diff --git a/.gitignore b/.gitignore index e9a56354..2dff7d12 100644 --- a/.gitignore +++ b/.gitignore @@ -49,3 +49,7 @@ ehthumbs.db Icon\? Thumbs.db +# Dk +*~ +.gitignore + diff --git a/README.md b/README.md index 6b5b967b..fe9ac565 100644 --- a/README.md +++ b/README.md @@ -6,4 +6,4 @@ The structure will follow a lullabot boilerplate approach so the codebase is in docroot. All site-specific fonts, libraries, modules, and themes should be placed in their respective directories. -Dummy line, checking push to fork. DELETE +Teen Program diff --git a/docroot/.gitignore b/docroot/.gitignore index ad34820a..9bd9102b 100644 --- a/docroot/.gitignore +++ b/docroot/.gitignore @@ -62,3 +62,9 @@ sites/*/settings*.php sites/*/files sites/*/private .gitignore + +# Ignore IDE created files. +*.sublime-* + +# Ignore SASS cache files. +*.sass-cache* diff --git a/docroot/CHANGELOG.txt b/docroot/CHANGELOG.txt index 29277196..72d9d8fc 100644 --- a/docroot/CHANGELOG.txt +++ b/docroot/CHANGELOG.txt @@ -1,4 +1,36 @@ +Drupal 7.43, 2016-02-24 +----------------------- +- Fixed security issues (multiple vulnerabilities). See SA-CORE-2016-001. + +Drupal 7.42, 2016-02-03 +----------------------- +- Stopped invoking hook_flush_caches() on every cron run, since some modules + use that hook for expensive operations that are only needed on cache clears. +- Changed the default .htaccess and web.config to block Composer-related files. +- Added static caching to module_load_include() to improve performance. +- Fixed double-encoding bugs in select field widgets provided by the Options + module. The fix deprecates the 'strip_tags' property on option widgets and + replaces it with a new 'strip_tags_and_unescape' property (minor data + structure change). +- Improved MySQL 5.7 support by changing the MySQL database driver to stop + using the ANSI SQL mode alias, which has different meanings for different + MySQL versions. +- Fixed a regression introduced in Drupal 7.39 which prevented autocomplete + functionality from working on servers that are not configured to + automatically recognize index.php. +- Updated the Archive_Tar PEAR package to the latest 1.4.0 release, to fix bugs + with tar file handling on various operating systems. +- Fixed fatal errors on node preview when a field is displayed in the node + teaser but hidden in the full node view. The fix removes a + field_attach_prepare_view() call from the node_preview() function since it is + redundant with one in the node preview theme layer. +- Improved the description of the "Trimmed" format option on text fields + (translatable string change, and minor UI and data structure change). +- Numerous small bug fixes. +- Numerous API documentation improvements. +- Additional automated test coverage. + Drupal 7.41, 2015-10-21 ----------------------- - Fixed security issues (open redirect). See SA-CORE-2015-004. diff --git a/docroot/includes/bootstrap.inc b/docroot/includes/bootstrap.inc index b3382bf6..0428bd36 100644 --- a/docroot/includes/bootstrap.inc +++ b/docroot/includes/bootstrap.inc @@ -8,7 +8,7 @@ /** * The current system version. */ -define('VERSION', '7.41'); +define('VERSION', '7.43'); /** * Core API compatibility. @@ -2786,10 +2786,14 @@ function language_list($field = 'language') { } /** - * Returns the default language used on the site + * Returns the default language, as an object, or one of its properties. * * @param $property - * Optional property of the language object to return + * (optional) The property of the language object to return. + * + * @return + * Either the language object for the default language used on the site, + * or the property of that object named in the $property parameter. */ function language_default($property = NULL) { $language = variable_get('language_default', (object) array('language' => 'en', 'name' => 'English', 'native' => 'English', 'direction' => 0, 'enabled' => 1, 'plurals' => 0, 'formula' => '', 'domain' => '', 'prefix' => '', 'weight' => 0, 'javascript' => '')); diff --git a/docroot/includes/common.inc b/docroot/includes/common.inc index 34fa9b96..c6303efa 100644 --- a/docroot/includes/common.inc +++ b/docroot/includes/common.inc @@ -688,6 +688,13 @@ function drupal_goto($path = '', array $options = array(), $http_response_code = $options['fragment'] = $destination['fragment']; } + // In some cases modules call drupal_goto(current_path()). We need to ensure + // that such a redirect is not to an external URL. + if ($path === current_path() && empty($options['external']) && url_is_external($path)) { + // Force url() to generate a non-external URL. + $options['external'] = FALSE; + } + drupal_alter('drupal_goto', $path, $options, $http_response_code); // The 'Location' HTTP header must be absolute. @@ -2220,20 +2227,8 @@ function url($path = NULL, array $options = array()) { 'prefix' => '' ); - // A duplicate of the code from url_is_external() to avoid needing another - // function call, since performance inside url() is critical. if (!isset($options['external'])) { - // Return an external link if $path contains an allowed absolute URL. Avoid - // calling drupal_strip_dangerous_protocols() if there is any slash (/), - // hash (#) or question_mark (?) before the colon (:) occurrence - if any - - // as this would clearly mean it is not a URL. If the path starts with 2 - // slashes then it is always considered an external URL without an explicit - // protocol part. - $colonpos = strpos($path, ':'); - $options['external'] = (strpos($path, '//') === 0) - || ($colonpos !== FALSE - && !preg_match('![/?#]!', substr($path, 0, $colonpos)) - && drupal_strip_dangerous_protocols($path) == $path); + $options['external'] = url_is_external($path); } // Preserve the original path before altering or aliasing. @@ -2353,12 +2348,18 @@ function url($path = NULL, array $options = array()) { */ function url_is_external($path) { $colonpos = strpos($path, ':'); - // Avoid calling drupal_strip_dangerous_protocols() if there is any slash (/), - // hash (#) or question_mark (?) before the colon (:) occurrence - if any - as - // this would clearly mean it is not a URL. If the path starts with 2 slashes - // then it is always considered an external URL without an explicit protocol - // part. + // Some browsers treat \ as / so normalize to forward slashes. + $path = str_replace('\\', '/', $path); + // If the path starts with 2 slashes then it is always considered an external + // URL without an explicit protocol part. return (strpos($path, '//') === 0) + // Leading control characters may be ignored or mishandled by browsers, so + // assume such a path may lead to an external location. The \p{C} character + // class matches all UTF-8 control, unassigned, and private characters. + || (preg_match('/^\p{C}/u', $path) !== 0) + // Avoid calling drupal_strip_dangerous_protocols() if there is any slash + // (/), hash (#) or question_mark (?) before the colon (:) occurrence - if + // any - as this would clearly mean it is not a URL. || ($colonpos !== FALSE && !preg_match('![/?#]!', substr($path, 0, $colonpos)) && drupal_strip_dangerous_protocols($path) == $path); diff --git a/docroot/includes/database/mysql/database.inc b/docroot/includes/database/mysql/database.inc index fdf9271b..a96b053c 100644 --- a/docroot/includes/database/mysql/database.inc +++ b/docroot/includes/database/mysql/database.inc @@ -81,7 +81,7 @@ class DatabaseConnection_mysql extends DatabaseConnection { 'init_commands' => array(), ); $connection_options['init_commands'] += array( - 'sql_mode' => "SET sql_mode = 'ANSI,STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER'", + 'sql_mode' => "SET sql_mode = 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER'", ); // Execute initial commands. foreach ($connection_options['init_commands'] as $sql) { diff --git a/docroot/includes/form.inc b/docroot/includes/form.inc index f1691adf..baadcef2 100644 --- a/docroot/includes/form.inc +++ b/docroot/includes/form.inc @@ -3385,9 +3385,12 @@ function form_process_container($element, &$form_state) { /** * Returns HTML to wrap child elements in a container. * - * Used for grouped form items. Can also be used as a #theme_wrapper for any + * Used for grouped form items. Can also be used as a theme wrapper for any * renderable element, to surround it with a
and add attributes such as - * classes or an HTML id. + * classes or an HTML ID. + * + * See the @link forms_api_reference.html Form API reference @endlink for more + * information on the #theme_wrappers render array property. * * @param $variables * An associative array containing: @@ -3979,7 +3982,12 @@ function form_process_autocomplete($element) { // browser interpreting the path plus search string as an actual file. $current_clean_url = isset($GLOBALS['conf']['clean_url']) ? $GLOBALS['conf']['clean_url'] : NULL; $GLOBALS['conf']['clean_url'] = 0; - $element['#autocomplete_input']['#url_value'] = url($element['#autocomplete_path'], array('absolute' => TRUE)); + // Force the script path to 'index.php', in case the server is not + // configured to find it automatically. Normally it is the responsibility + // of the site to do this themselves using hook_url_outbound_alter() (see + // url()) but since this code is forcing non-clean URLs on sites that don't + // normally use them, it is done here instead. + $element['#autocomplete_input']['#url_value'] = url($element['#autocomplete_path'], array('absolute' => TRUE, 'script' => 'index.php')); $GLOBALS['conf']['clean_url'] = $current_clean_url; } return $element; diff --git a/docroot/includes/install.inc b/docroot/includes/install.inc index 2b55589f..5e1d3c63 100644 --- a/docroot/includes/install.inc +++ b/docroot/includes/install.inc @@ -750,7 +750,7 @@ function drupal_install_system() { /** * Uninstalls a given list of disabled modules. * - * @param array $module_list + * @param string[] $module_list * The modules to uninstall. It is the caller's responsibility to ensure that * all modules in this list have already been disabled before this function * is called. @@ -769,6 +769,7 @@ function drupal_install_system() { * included in $module_list). * * @see module_disable() + * @see module_enable() */ function drupal_uninstall_modules($module_list = array(), $uninstall_dependents = TRUE) { if ($uninstall_dependents) { diff --git a/docroot/includes/mail.inc b/docroot/includes/mail.inc index 0275922b..0e5c1780 100644 --- a/docroot/includes/mail.inc +++ b/docroot/includes/mail.inc @@ -566,7 +566,7 @@ function _drupal_wrap_mail_line(&$line, $key, $values) { // Use soft-breaks only for purely quoted or unindented text. $line = wordwrap($line, 77 - $values['length'], $values['soft'] ? " \n" : "\n"); // Break really long words at the maximum width allowed. - $line = wordwrap($line, 996 - $values['length'], $values['soft'] ? " \n" : "\n"); + $line = wordwrap($line, 996 - $values['length'], $values['soft'] ? " \n" : "\n", TRUE); } /** diff --git a/docroot/includes/module.inc b/docroot/includes/module.inc index 7bf619b4..68c8b8ef 100644 --- a/docroot/includes/module.inc +++ b/docroot/includes/module.inc @@ -320,16 +320,27 @@ function module_load_install($module) { * The name of the included file, if successful; FALSE otherwise. */ function module_load_include($type, $module, $name = NULL) { + static $files = array(); + if (!isset($name)) { $name = $module; } + $key = $type . ':' . $module . ':' . $name; + if (isset($files[$key])) { + return $files[$key]; + } + if (function_exists('drupal_get_path')) { $file = DRUPAL_ROOT . '/' . drupal_get_path('module', $module) . "/$name.$type"; if (is_file($file)) { require_once $file; + $files[$key] = $file; return $file; } + else { + $files[$key] = FALSE; + } } return FALSE; } @@ -365,20 +376,22 @@ function module_load_all_includes($type, $name = NULL) { * - Invoke hook_modules_installed(). * - Invoke hook_modules_enabled(). * - * @param $module_list + * @param string[] $module_list * An array of module names. - * @param $enable_dependencies + * @param bool $enable_dependencies * If TRUE, dependencies will automatically be added and enabled in the * correct order. This incurs a significant performance cost, so use FALSE * if you know $module_list is already complete and in the correct order. * - * @return + * @return bool * FALSE if one or more dependencies are missing, TRUE otherwise. * * @see hook_install() * @see hook_enable() * @see hook_modules_installed() * @see hook_modules_enabled() + * @see module_disable() + * @see drupal_uninstall_modules() */ function module_enable($module_list, $enable_dependencies = TRUE) { if ($enable_dependencies) { @@ -505,12 +518,15 @@ function module_enable($module_list, $enable_dependencies = TRUE) { /** * Disables a given set of modules. * - * @param $module_list + * @param string[] $module_list * An array of module names. - * @param $disable_dependents + * @param bool $disable_dependents * If TRUE, dependent modules will automatically be added and disabled in the * correct order. This incurs a significant performance cost, so use FALSE * if you know $module_list is already complete and in the correct order. + * + * @see drupal_uninstall_modules() + * @see module_enable() */ function module_disable($module_list, $disable_dependents = TRUE) { if ($disable_dependents) { @@ -722,6 +738,7 @@ function module_implements($hook, $sort = FALSE, $reset = FALSE) { drupal_static_reset('module_hook_info'); drupal_static_reset('drupal_alter'); cache_clear_all('hook_info', 'cache_bootstrap'); + cache_clear_all('system_cache_tables', 'cache'); return; } diff --git a/docroot/includes/path.inc b/docroot/includes/path.inc index 2e357111..6bd48d30 100644 --- a/docroot/includes/path.inc +++ b/docroot/includes/path.inc @@ -347,7 +347,8 @@ function drupal_match_path($path, $patterns) { * drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL) makes this function available. * * @return - * The current Drupal URL path. + * The current Drupal URL path. The path is untrusted user input and must be + * treated as such. * * @see request_path() */ diff --git a/docroot/includes/theme.inc b/docroot/includes/theme.inc index 1accdcea..ff54d6e2 100644 --- a/docroot/includes/theme.inc +++ b/docroot/includes/theme.inc @@ -1809,7 +1809,8 @@ function theme_links($variables) { foreach ($links as $key => $link) { $class = array($key); - // Add first, last and active classes to the list of links to help out themers. + // Add first, last and active classes to the list of links to help out + // themers. if ($i == 1) { $class[] = 'first'; } @@ -1827,7 +1828,8 @@ function theme_links($variables) { $output .= l($link['title'], $link['href'], $link); } elseif (!empty($link['title'])) { - // Some links are actually not links, but we wrap these in for adding title and class attributes. + // Some links are actually not links, but we wrap these in for + // adding title and class attributes. if (empty($link['html'])) { $link['title'] = check_plain($link['title']); } diff --git a/docroot/includes/xmlrpcs.inc b/docroot/includes/xmlrpcs.inc index 8655c05b..c334de15 100644 --- a/docroot/includes/xmlrpcs.inc +++ b/docroot/includes/xmlrpcs.inc @@ -264,6 +264,10 @@ function xmlrpc_server_call($xmlrpc_server, $methodname, $args) { */ function xmlrpc_server_multicall($methodcalls) { // See http://www.xmlrpc.com/discuss/msgReader$1208 + // To avoid multicall expansion attacks, limit the number of duplicate method + // calls allowed with a default of 1. Set to -1 for unlimited. + $duplicate_method_limit = variable_get('xmlrpc_multicall_duplicate_method_limit', 1); + $method_count = array(); $return = array(); $xmlrpc_server = xmlrpc_server_get(); foreach ($methodcalls as $call) { @@ -273,10 +277,14 @@ function xmlrpc_server_multicall($methodcalls) { $ok = FALSE; } $method = $call['methodName']; + $method_count[$method] = isset($method_count[$method]) ? $method_count[$method] + 1 : 1; $params = $call['params']; if ($method == 'system.multicall') { $result = xmlrpc_error(-32600, t('Recursive calls to system.multicall are forbidden.')); } + elseif ($duplicate_method_limit > 0 && $method_count[$method] > $duplicate_method_limit) { + $result = xmlrpc_error(-156579, t('Too many duplicate method calls in system.multicall.')); + } elseif ($ok) { $result = xmlrpc_server_call($xmlrpc_server, $method, $params); } diff --git a/docroot/modules/aggregator/aggregator.info b/docroot/modules/aggregator/aggregator.info index 2d7b037b..c181417a 100644 --- a/docroot/modules/aggregator/aggregator.info +++ b/docroot/modules/aggregator/aggregator.info @@ -7,8 +7,8 @@ files[] = aggregator.test configure = admin/config/services/aggregator/settings stylesheets[all][] = aggregator.css -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/aggregator/tests/aggregator_test.info b/docroot/modules/aggregator/tests/aggregator_test.info index f65a549c..4579b77e 100644 --- a/docroot/modules/aggregator/tests/aggregator_test.info +++ b/docroot/modules/aggregator/tests/aggregator_test.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/block/block.info b/docroot/modules/block/block.info index 10a90d14..ad206a88 100644 --- a/docroot/modules/block/block.info +++ b/docroot/modules/block/block.info @@ -6,8 +6,8 @@ core = 7.x files[] = block.test configure = admin/structure/block -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/block/block.module b/docroot/modules/block/block.module index 405a9537..ca41da71 100644 --- a/docroot/modules/block/block.module +++ b/docroot/modules/block/block.module @@ -16,7 +16,7 @@ define('BLOCK_REGION_NONE', -1); define('BLOCK_CUSTOM_FIXED', 0); /** - * Shows this block by default, but lets individual users hide it. + * Shows this block by default, but lets individual users hide it. */ define('BLOCK_CUSTOM_ENABLED', 1); @@ -59,6 +59,7 @@ function block_help($path, $arg) { $output .= '
' . t('Users with the Administer blocks permission can add custom blocks, which are then listed on the Blocks administration page. Once created, custom blocks behave just like default and module-generated blocks.', array('@blocks' => url('admin/structure/block'), '@block-add' => url('admin/structure/block/add'))) . '
'; $output .= ''; return $output; + case 'admin/structure/block/add': return '

' . t('Use this page to create a new custom block.') . '

'; } @@ -189,6 +190,7 @@ function _block_themes_access($theme) { * @param $theme * The theme whose blocks are being configured. If not set, the default theme * is assumed. + * * @return * The theme that should be used for the block configuration page, or NULL * to indicate that the default theme should be used. @@ -343,7 +345,10 @@ function _block_get_renderable_array($list = array()) { // to perform contextual actions on the help block, and the links needlessly // draw attention on it. if ($key != 'system_main' && $key != 'system_help') { - $build[$key]['#contextual_links']['block'] = array('admin/structure/block/manage', array($block->module, $block->delta)); + $build[$key]['#contextual_links']['block'] = array( + 'admin/structure/block/manage', + array($block->module, $block->delta), + ); } $build[$key] += array( @@ -386,18 +391,20 @@ function _block_rehash($theme = NULL) { // Gather the blocks defined by modules. foreach (module_implements('block_info') as $module) { $module_blocks = module_invoke($module, 'block_info'); + $delta_list = array(); foreach ($module_blocks as $delta => $block) { // Compile a condition to retrieve this block from the database. - $condition = db_and() - ->condition('module', $module) - ->condition('delta', $delta); - $or->condition($condition); // Add identifiers. + $delta_list[] = $delta; $block['module'] = $module; - $block['delta'] = $delta; - $block['theme'] = $theme; + $block['delta'] = $delta; + $block['theme'] = $theme; $current_blocks[$module][$delta] = $block; } + if (!empty($delta_list)) { + $condition = db_and()->condition('module', $module)->condition('delta', $delta_list); + $or->condition($condition); + } } // Save the blocks defined in code for alter context. $code_blocks = $current_blocks; @@ -644,7 +651,8 @@ function block_theme_initialize($theme) { $regions = system_region_list($theme, REGIONS_VISIBLE); $result = db_query("SELECT * FROM {block} WHERE theme = :theme", array(':theme' => $default_theme), array('fetch' => PDO::FETCH_ASSOC)); foreach ($result as $block) { - // If the region isn't supported by the theme, assign the block to the theme's default region. + // If the region isn't supported by the theme, assign the block to the + // theme's default region. if ($block['status'] && !isset($regions[$block['region']])) { $block['region'] = system_default_region($theme); } @@ -812,17 +820,18 @@ function block_block_list_alter(&$blocks) { // with different case. Ex: /Page, /page, /PAGE. $pages = drupal_strtolower($block->pages); if ($block->visibility < BLOCK_VISIBILITY_PHP) { - // Convert the Drupal path to lowercase + // Convert the Drupal path to lowercase. $path = drupal_strtolower(drupal_get_path_alias($_GET['q'])); // Compare the lowercase internal and lowercase path alias (if any). $page_match = drupal_match_path($path, $pages); if ($path != $_GET['q']) { $page_match = $page_match || drupal_match_path($_GET['q'], $pages); } - // When $block->visibility has a value of 0 (BLOCK_VISIBILITY_NOTLISTED), - // the block is displayed on all pages except those listed in $block->pages. - // When set to 1 (BLOCK_VISIBILITY_LISTED), it is displayed only on those - // pages listed in $block->pages. + // When $block->visibility has a value of 0 + // (BLOCK_VISIBILITY_NOTLISTED), the block is displayed on all pages + // except those listed in $block->pages. When set to 1 + // (BLOCK_VISIBILITY_LISTED), it is displayed only on those pages + // listed in $block->pages. $page_match = !($block->visibility xor $page_match); } elseif (module_exists('php')) { @@ -845,7 +854,8 @@ function block_block_list_alter(&$blocks) { * Render the content and subject for a set of blocks. * * @param $region_blocks - * An array of block objects such as returned for one region by _block_load_blocks(). + * An array of block objects such as returned for one region by + * _block_load_blocks(). * * @return * An array of visible blocks as expected by drupal_render(). @@ -953,6 +963,8 @@ function _block_render_blocks($region_blocks) { * Theme and language contexts are automatically differentiated. * * @param $block + * The block to get the cache_id from. + * * @return * The string used as cache_id for the block. */ diff --git a/docroot/modules/block/tests/block_test.info b/docroot/modules/block/tests/block_test.info index 9dcd6bac..1e7e4e92 100644 --- a/docroot/modules/block/tests/block_test.info +++ b/docroot/modules/block/tests/block_test.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/block/tests/themes/block_test_theme/block_test_theme.info b/docroot/modules/block/tests/themes/block_test_theme/block_test_theme.info index 4482a3c8..e49025ab 100644 --- a/docroot/modules/block/tests/themes/block_test_theme/block_test_theme.info +++ b/docroot/modules/block/tests/themes/block_test_theme/block_test_theme.info @@ -13,8 +13,8 @@ regions[footer] = Footer regions[highlighted] = Highlighted regions[help] = Help -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/blog/blog.info b/docroot/modules/blog/blog.info index 961cdc63..13294f93 100644 --- a/docroot/modules/blog/blog.info +++ b/docroot/modules/blog/blog.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x files[] = blog.test -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/book/book.info b/docroot/modules/book/book.info index 989da915..fa5b99ba 100644 --- a/docroot/modules/book/book.info +++ b/docroot/modules/book/book.info @@ -7,8 +7,8 @@ files[] = book.test configure = admin/content/book/settings stylesheets[all][] = book.css -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/color/color.info b/docroot/modules/color/color.info index e6b241f7..47ae442e 100644 --- a/docroot/modules/color/color.info +++ b/docroot/modules/color/color.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x files[] = color.test -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/comment/comment.info b/docroot/modules/comment/comment.info index 3a40e2cd..fa206f98 100644 --- a/docroot/modules/comment/comment.info +++ b/docroot/modules/comment/comment.info @@ -9,8 +9,8 @@ files[] = comment.test configure = admin/content/comment stylesheets[all][] = comment.css -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/contact/contact.info b/docroot/modules/contact/contact.info index 8aee2f00..f8d1a97d 100644 --- a/docroot/modules/contact/contact.info +++ b/docroot/modules/contact/contact.info @@ -6,8 +6,8 @@ core = 7.x files[] = contact.test configure = admin/structure/contact -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/contextual/contextual.info b/docroot/modules/contextual/contextual.info index dc04f6d4..8e82e2d3 100644 --- a/docroot/modules/contextual/contextual.info +++ b/docroot/modules/contextual/contextual.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x files[] = contextual.test -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/dashboard/dashboard.info b/docroot/modules/dashboard/dashboard.info index 4f0f210e..55b454ef 100644 --- a/docroot/modules/dashboard/dashboard.info +++ b/docroot/modules/dashboard/dashboard.info @@ -7,8 +7,8 @@ files[] = dashboard.test dependencies[] = block configure = admin/dashboard/customize -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/dblog/dblog.info b/docroot/modules/dblog/dblog.info index 799d002e..89de733f 100644 --- a/docroot/modules/dblog/dblog.info +++ b/docroot/modules/dblog/dblog.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x files[] = dblog.test -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/dblog/dblog.module b/docroot/modules/dblog/dblog.module index 9183eed6..eb79faff 100644 --- a/docroot/modules/dblog/dblog.module +++ b/docroot/modules/dblog/dblog.module @@ -144,17 +144,20 @@ function _dblog_get_message_types() { * Note: Some values may be truncated to meet database column size restrictions. */ function dblog_watchdog(array $log_entry) { + if (!function_exists('drupal_substr')) { + require_once DRUPAL_ROOT . '/includes/unicode.inc'; + } Database::getConnection('default', 'default')->insert('watchdog') ->fields(array( 'uid' => $log_entry['uid'], - 'type' => substr($log_entry['type'], 0, 64), + 'type' => drupal_substr($log_entry['type'], 0, 64), 'message' => $log_entry['message'], 'variables' => serialize($log_entry['variables']), 'severity' => $log_entry['severity'], - 'link' => substr($log_entry['link'], 0, 255), + 'link' => drupal_substr($log_entry['link'], 0, 255), 'location' => $log_entry['request_uri'], 'referer' => $log_entry['referer'], - 'hostname' => substr($log_entry['ip'], 0, 128), + 'hostname' => drupal_substr($log_entry['ip'], 0, 128), 'timestamp' => $log_entry['timestamp'], )) ->execute(); diff --git a/docroot/modules/dblog/dblog.test b/docroot/modules/dblog/dblog.test index bf409c94..03308aff 100644 --- a/docroot/modules/dblog/dblog.test +++ b/docroot/modules/dblog/dblog.test @@ -119,13 +119,16 @@ class DBLogTestCase extends DrupalWebTestCase { private function generateLogEntries($count, $type = 'custom', $severity = WATCHDOG_NOTICE) { global $base_root; + // Make it just a little bit harder to pass the link part of the test. + $link = urldecode('/content/xo%E9%85%B1%E5%87%89%E6%8B%8C%E7%B4%A0%E9%B8%A1%E7%85%A7%E7%83%A7%E9%B8%A1%E9%BB%84%E7%8E%AB%E7%91%B0-%E7%A7%91%E5%B7%9E%E7%9A%84%E5%B0%8F%E4%B9%9D%E5%AF%A8%E6%B2%9F%E7%BB%9D%E7%BE%8E%E9%AB%98%E5%B1%B1%E6%B9%96%E6%B3%8A%E9%85%B1%E5%87%89%E6%8B%8C%E7%B4%A0%E9%B8%A1%E7%85%A7%E7%83%A7%E9%B8%A1%E9%BB%84%E7%8E%AB%E7%91%B0-%E7%A7%91%E5%B7%9E%E7%9A%84%E5%B0%8F%E4%B9%9D%E5%AF%A8%E6%B2%9F%E7%BB%9D%E7%BE%8E%E9%AB%98%E5%B1%B1%E6%B9%96%E6%B3%8A%E9%85%B1%E5%87%89%E6%8B%8C%E7%B4%A0%E9%B8%A1%E7%85%A7%E7%83%A7%E9%B8%A1%E9%BB%84%E7%8E%AB%E7%91%B0-%E7%A7%91%E5%B7%9E%E7%9A%84%E5%B0%8F%E4%B9%9D%E5%AF%A8%E6%B2%9F%E7%BB%9D%E7%BE%8E%E9%AB%98%E5%B1%B1%E6%B9%96%E6%B3%8A%E9%85%B1%E5%87%89%E6%8B%8C%E7%B4%A0%E9%B8%A1%E7%85%A7%E7%83%A7%E9%B8%A1%E9%BB%84%E7%8E%AB%E7%91%B0-%E7%A7%91%E5%B7%9E%E7%9A%84%E5%B0%8F%E4%B9%9D%E5%AF%A8%E6%B2%9F%E7%BB%9D%E7%BE%8E%E9%AB%98%E5%B1%B1%E6%B9%96%E6%B3%8A%E9%85%B1%E5%87%89%E6%8B%8C%E7%B4%A0%E9%B8%A1%E7%85%A7%E7%83%A7%E9%B8%A1%E9%BB%84%E7%8E%AB%E7%91%B0-%E7%A7%91%E5%B7%9E%E7%9A%84%E5%B0%8F%E4%B9%9D%E5%AF%A8%E6%B2%9F%E7%BB%9D%E7%BE%8E%E9%AB%98%E5%B1%B1%E6%B9%96%E6%B3%8A%E9%85%B1%E5%87%89%E6%8B%8C%E7%B4%A0%E9%B8%A1%E7%85%A7%E7%83%A7%E9%B8%A1%E9%BB%84%E7%8E%AB%E7%91%B0-%E7%A7%91%E5%B7%9E%E7%9A%84%E5%B0%8F%E4%B9%9D%E5%AF%A8%E6%B2%9F%E7%BB%9D%E7%BE%8E%E9%AB%98%E5%B1%B1%E6%B9%96%E6%B3%8A%E9%85%B1%E5%87%89%E6%8B%8C%E7%B4%A0%E9%B8%A1%E7%85%A7%E7%83%A7%E9%B8%A1%E9%BB%84%E7%8E%AB%E7%91%B0-%E7%A7%91%E5%B7%9E%E7%9A%84%E5%B0%8F%E4%B9%9D%E5%AF%A8%E6%B2%9F%E7%BB%9D%E7%BE%8E%E9%AB%98%E5%B1%B1%E6%B9%96%E6%B3%8A%E9%85%B1%E5%87%89%E6%8B%8C%E7%B4%A0%E9%B8%A1%E7%85%A7%E7%83%A7%E9%B8%A1%E9%BB%84%E7%8E%AB%E7%91%B0-%E7%A7%91%E5%B7%9E%E7%9A%84%E5%B0%8F%E4%B9%9D%E5%AF%A8%E6%B2%9F%E7%BB%9D%E7%BE%8E%E9%AB%98%E5%B1%B1%E6%B9%96%E6%B3%8A%E9%85%B1%E5%87%89%E6%8B%8C%E7%B4%A0%E9%B8%A1%E7%85%A7%E7%83%A7%E9%B8%A1%E9%BB%84%E7%8E%AB%E7%91%B0-%E7%A7%91%E5%B7%9E%E7%9A%84%E5%B0%8F%E4%B9%9D%E5%AF%A8%E6%B2%9F%E7%BB%9D%E7%BE%8E%E9%AB%98%E5%B1%B1%E6%B9%96%E6%B3%8A%E9%85%B1%E5%87%89%E6%8B%8C%E7%B4%A0%E9%B8%A1%E7%85%A7%E7%83%A7%E9%B8%A1%E9%BB%84%E7%8E%AB%E7%91%B0-%E7%A7%91%E5%B7%9E%E7%9A%84%E5%B0%8F%E4%B9%9D%E5%AF%A8%E6%B2%9F%E7%BB%9D%E7%BE%8E%E9%AB%98%E5%B1%B1%E6%B9%96%E6%B3%8A%E9%85%B1%E5%87%89%E6%8B%8C%E7%B4%A0%E9%B8%A1%E7%85%A7%E7%83%A7%E9%B8%A1%E9%BB%84%E7%8E%AB%E7%91%B0-%E7%A7%91%E5%B7%9E%E7%9A%84%E5%B0%8F%E4%B9%9D%E5%AF%A8%E6%B2%9F%E7%BB%9D%E7%BE%8E%E9%AB%98%E5%B1%B1%E6%B9%96%E6%B3%8A%E9%85%B1%E5%87%89%E6%8B%8C%E7%B4%A0%E9%B8%A1%E7%85%A7%E7%83%A7%E9%B8%A1%E9%BB%84%E7%8E%AB%E7%91%B0-%E7%A7%91%E5%B7%9E%E7%9A%84%E5%B0%8F%E4%B9%9D%E5%AF%A8%E6%B2%9F%E7%BB%9D%E7%BE%8E%E9%AB%98%E5%B1%B1%E6%B9%96%E6%B3%8A%E9%85%B1%E5%87%89%E6%8B%8C%E7%B4%A0%E9%B8%A1%E7%85%A7%E7%83%A7%E9%B8%A1%E9%BB%84%E7%8E%AB%E7%91%B0-%E7%A7%91%E5%B7%9E%E7%9A%84%E5%B0%8F%E4%B9%9D%E5%AF%A8%E6%B2%9F%E7%BB%9D%E7%BE%8E%E9%AB%98%E5%B1%B1%E6%B9%96%E6%B3%8A-lake-isabelle'); + // Prepare the fields to be logged $log = array( 'type' => $type, 'message' => 'Log entry added to test the dblog row limit.', 'variables' => array(), 'severity' => $severity, - 'link' => NULL, + 'link' => $link, 'user' => $this->big_user, 'uid' => isset($this->big_user->uid) ? $this->big_user->uid : 0, 'request_uri' => $base_root . request_uri(), @@ -634,4 +637,3 @@ class DBLogTestCase extends DrupalWebTestCase { $this->assertLink(html_entity_decode($message_text), 0, $message); } } - diff --git a/docroot/modules/field/field.info b/docroot/modules/field/field.info index 7a7cf7ff..11015a75 100644 --- a/docroot/modules/field/field.info +++ b/docroot/modules/field/field.info @@ -11,8 +11,8 @@ dependencies[] = field_sql_storage required = TRUE stylesheets[all][] = theme/field.css -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/field/modules/field_sql_storage/field_sql_storage.info b/docroot/modules/field/modules/field_sql_storage/field_sql_storage.info index d04ab5d5..0828c20a 100644 --- a/docroot/modules/field/modules/field_sql_storage/field_sql_storage.info +++ b/docroot/modules/field/modules/field_sql_storage/field_sql_storage.info @@ -7,8 +7,8 @@ dependencies[] = field files[] = field_sql_storage.test required = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/field/modules/list/list.info b/docroot/modules/field/modules/list/list.info index 21cdecd3..7b0c9c23 100644 --- a/docroot/modules/field/modules/list/list.info +++ b/docroot/modules/field/modules/list/list.info @@ -7,8 +7,8 @@ dependencies[] = field dependencies[] = options files[] = tests/list.test -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/field/modules/list/tests/list_test.info b/docroot/modules/field/modules/list/tests/list_test.info index 88b98405..9b3e4d6b 100644 --- a/docroot/modules/field/modules/list/tests/list_test.info +++ b/docroot/modules/field/modules/list/tests/list_test.info @@ -5,8 +5,8 @@ package = Testing version = VERSION hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/field/modules/number/number.info b/docroot/modules/field/modules/number/number.info index 65d7e4a6..52553fd7 100644 --- a/docroot/modules/field/modules/number/number.info +++ b/docroot/modules/field/modules/number/number.info @@ -6,8 +6,8 @@ core = 7.x dependencies[] = field files[] = number.test -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/field/modules/options/options.info b/docroot/modules/field/modules/options/options.info index e1b5920c..f07ea90b 100644 --- a/docroot/modules/field/modules/options/options.info +++ b/docroot/modules/field/modules/options/options.info @@ -6,8 +6,8 @@ core = 7.x dependencies[] = field files[] = options.test -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/field/modules/options/options.module b/docroot/modules/field/modules/options/options.module index 3862ba77..041b84a6 100644 --- a/docroot/modules/field/modules/options/options.module +++ b/docroot/modules/field/modules/options/options.module @@ -185,6 +185,7 @@ function _options_properties($type, $multiple, $required, $has_value) { $base = array( 'filter_xss' => FALSE, 'strip_tags' => FALSE, + 'strip_tags_and_unescape' => FALSE, 'empty_option' => FALSE, 'optgroups' => FALSE, ); @@ -195,7 +196,7 @@ function _options_properties($type, $multiple, $required, $has_value) { case 'select': $properties = array( // Select boxes do not support any HTML tag. - 'strip_tags' => TRUE, + 'strip_tags_and_unescape' => TRUE, 'optgroups' => TRUE, ); if ($multiple) { @@ -271,9 +272,16 @@ function _options_prepare_options(&$options, $properties) { _options_prepare_options($options[$value], $properties); } else { + // The 'strip_tags' option is deprecated. Use 'strip_tags_and_unescape' + // when plain text is required (and where the output will be run through + // check_plain() before being inserted back into HTML) or 'filter_xss' + // when HTML is required. if ($properties['strip_tags']) { $options[$value] = strip_tags($label); } + if ($properties['strip_tags_and_unescape']) { + $options[$value] = decode_entities(strip_tags($label)); + } if ($properties['filter_xss']) { $options[$value] = field_filter_xss($label); } diff --git a/docroot/modules/field/modules/options/options.test b/docroot/modules/field/modules/options/options.test index 7183311b..0e19f52f 100644 --- a/docroot/modules/field/modules/options/options.test +++ b/docroot/modules/field/modules/options/options.test @@ -24,7 +24,7 @@ class OptionsWidgetsTestCase extends FieldTestCase { 'cardinality' => 1, 'settings' => array( // Make sure that 0 works as an option. - 'allowed_values' => array(0 => 'Zero', 1 => 'One', 2 => 'Some & unescaped markup'), + 'allowed_values' => array(0 => 'Zero', 1 => 'One', 2 => 'Some & unescaped markup', 3 => 'Some HTML encoded markup with < & >'), ), ); $this->card_1 = field_create_field($this->card_1); @@ -233,6 +233,7 @@ class OptionsWidgetsTestCase extends FieldTestCase { $this->assertNoOptionSelected("edit-card-1-$langcode", 1); $this->assertNoOptionSelected("edit-card-1-$langcode", 2); $this->assertRaw('Some dangerous & unescaped markup', 'Option text was properly filtered.'); + $this->assertRaw('Some HTML encoded markup with < & >', 'HTML entities in option text were properly handled and not double-encoded'); // Submit form: select invalid 'none' option. $edit = array("card_1[$langcode]" => '_none'); diff --git a/docroot/modules/field/modules/text/text.info b/docroot/modules/field/modules/text/text.info index cd055dc3..b3cf7cf0 100644 --- a/docroot/modules/field/modules/text/text.info +++ b/docroot/modules/field/modules/text/text.info @@ -7,8 +7,8 @@ dependencies[] = field files[] = text.test required = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/field/modules/text/text.module b/docroot/modules/field/modules/text/text.module index 68fc3cb4..bf0d29d5 100644 --- a/docroot/modules/field/modules/text/text.module +++ b/docroot/modules/field/modules/text/text.module @@ -223,11 +223,13 @@ function text_field_formatter_settings_form($field, $instance, $view_mode, $form if (strpos($display['type'], '_trimmed') !== FALSE) { $element['trim_length'] = array( - '#title' => t('Trim length'), + '#title' => t('Trimmed limit'), '#type' => 'textfield', + '#field_suffix' => t('characters'), '#size' => 10, '#default_value' => $settings['trim_length'], '#element_validate' => array('element_validate_integer_positive'), + '#description' => t('If the summary is not set, the trimmed %label field will be shorter than this character limit.', array('%label' => $instance['label'])), '#required' => TRUE, ); } @@ -245,7 +247,7 @@ function text_field_formatter_settings_summary($field, $instance, $view_mode) { $summary = ''; if (strpos($display['type'], '_trimmed') !== FALSE) { - $summary = t('Trim length') . ': ' . check_plain($settings['trim_length']); + $summary = t('Trimmed limit: @trim_length characters', array('@trim_length' => $settings['trim_length'])); } return $summary; diff --git a/docroot/modules/field/tests/field_test.info b/docroot/modules/field/tests/field_test.info index 37e118c9..8bfe1719 100644 --- a/docroot/modules/field/tests/field_test.info +++ b/docroot/modules/field/tests/field_test.info @@ -6,8 +6,8 @@ files[] = field_test.entity.inc version = VERSION hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/field_ui/field_ui.info b/docroot/modules/field_ui/field_ui.info index b0c15246..ef904d2e 100644 --- a/docroot/modules/field_ui/field_ui.info +++ b/docroot/modules/field_ui/field_ui.info @@ -6,8 +6,8 @@ core = 7.x dependencies[] = field files[] = field_ui.test -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/file/file.info b/docroot/modules/file/file.info index 825d0af0..aebd7f92 100644 --- a/docroot/modules/file/file.info +++ b/docroot/modules/file/file.info @@ -6,8 +6,8 @@ core = 7.x dependencies[] = field files[] = tests/file.test -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/file/file.module b/docroot/modules/file/file.module index fbf8b81e..9e091af0 100644 --- a/docroot/modules/file/file.module +++ b/docroot/modules/file/file.module @@ -529,14 +529,19 @@ function file_managed_file_value(&$element, $input = FALSE, $form_state = NULL) // publicly accessible, with no download restrictions; for security // reasons all other schemes must go through the file_download_access() // check. - if (in_array(file_uri_scheme($file->uri), variable_get('file_public_schema', array('public'))) || file_download_access($file->uri)) { - $fid = $file->fid; + if (!in_array(file_uri_scheme($file->uri), variable_get('file_public_schema', array('public'))) && !file_download_access($file->uri)) { + $force_default = TRUE; } - // If the current user doesn't have access, don't let the file be - // changed. - else { + // Temporary files that belong to other users should never be allowed. + // Since file ownership can't be determined for anonymous users, they + // are not allowed to reuse temporary files at all. + elseif ($file->status != FILE_STATUS_PERMANENT && (!$GLOBALS['user']->uid || $file->uid != $GLOBALS['user']->uid)) { $force_default = TRUE; } + // If all checks pass, allow the file to be changed. + else { + $fid = $file->fid; + } } } } diff --git a/docroot/modules/file/tests/file.test b/docroot/modules/file/tests/file.test index 80433954..6d7cb4bc 100644 --- a/docroot/modules/file/tests/file.test +++ b/docroot/modules/file/tests/file.test @@ -218,6 +218,30 @@ class FileFieldTestCase extends DrupalWebTestCase { $message = isset($message) ? $message : format_string('File %file is permanent.', array('%file' => $file->uri)); $this->assertTrue($file->status == FILE_STATUS_PERMANENT, $message); } + + /** + * Creates a temporary file, for a specific user. + * + * @param string $data + * A string containing the contents of the file. + * @param int $uid + * The user ID of the file owner. + * + * @return object + * A file object, or FALSE on error. + */ + function createTemporaryFile($data, $uid = NULL) { + $file = file_save_data($data, NULL, NULL); + + if ($file) { + $file->uid = isset($uid) ? $uid : $this->admin_user->uid; + // Change the file status to be temporary. + $file->status = NULL; + return file_save($file); + } + + return $file; + } } /** @@ -526,6 +550,120 @@ class FileFieldWidgetTestCase extends FileFieldTestCase { } } + /** + * Tests exploiting the temporary file removal of another user using fid. + */ + function testTemporaryFileRemovalExploit() { + // Create a victim user. + $victim_user = $this->drupalCreateUser(); + + // Create an attacker user. + $attacker_user = $this->drupalCreateUser(array( + 'access content', + 'create page content', + 'edit any page content', + )); + + // Log in as the attacker user. + $this->drupalLogin($attacker_user); + + // Perform tests using the newly created users. + $this->doTestTemporaryFileRemovalExploit($victim_user->uid, $attacker_user->uid); + } + + /** + * Tests exploiting the temporary file removal for anonymous users using fid. + */ + public function testTemporaryFileRemovalExploitAnonymous() { + // Set up an anonymous victim user. + $victim_uid = 0; + + // Set up an anonymous attacker user. + $attacker_uid = 0; + + // Set up permissions for anonymous attacker user. + user_role_change_permissions(DRUPAL_ANONYMOUS_RID, array( + 'access content' => TRUE, + 'create page content' => TRUE, + 'edit any page content' => TRUE, + )); + + // In order to simulate being the anonymous attacker user, we need to log + // out here since setUp() has logged in the admin. + $this->drupalLogout(); + + // Perform tests using the newly set up users. + $this->doTestTemporaryFileRemovalExploit($victim_uid, $attacker_uid); + } + + /** + * Helper for testing exploiting the temporary file removal using fid. + * + * @param int $victim_uid + * The victim user ID. + * @param int $attacker_uid + * The attacker user ID. + */ + protected function doTestTemporaryFileRemovalExploit($victim_uid, $attacker_uid) { + // Use 'page' instead of 'article', so that the 'article' image field does + // not conflict with this test. If in the future the 'page' type gets its + // own default file or image field, this test can be made more robust by + // using a custom node type. + $type_name = 'page'; + $field_name = 'test_file_field'; + $this->createFileField($field_name, $type_name); + + $test_file = $this->getTestFile('text'); + foreach (array('nojs', 'js') as $type) { + // Create a temporary file owned by the anonymous victim user. This will be + // as if they had uploaded the file, but not saved the node they were + // editing or creating. + $victim_tmp_file = $this->createTemporaryFile('some text', $victim_uid); + $victim_tmp_file = file_load($victim_tmp_file->fid); + $this->assertTrue($victim_tmp_file->status != FILE_STATUS_PERMANENT, 'New file saved to disk is temporary.'); + $this->assertFalse(empty($victim_tmp_file->fid), 'New file has a fid'); + $this->assertEqual($victim_uid, $victim_tmp_file->uid, 'New file belongs to the victim user'); + + // Have attacker create a new node with a different uploaded file and + // ensure it got uploaded successfully. + // @todo Can we test AJAX? See https://www.drupal.org/node/2538260 + $edit = array( + 'title' => $type . '-title', + ); + + // Attach a file to a node. + $langcode = LANGUAGE_NONE; + $edit['files[' . $field_name . '_' . $langcode . '_0]'] = drupal_realpath($test_file->uri); + $this->drupalPost("node/add/$type_name", $edit, 'Save'); + $node = $this->drupalGetNodeByTitle($edit['title']); + $node_file = file_load($node->{$field_name}[$langcode][0]['fid']); + $this->assertFileExists($node_file, 'New file saved to disk on node creation.'); + $this->assertEqual($attacker_uid, $node_file->uid, 'New file belongs to the attacker.'); + + // Ensure the file can be downloaded. + $this->drupalGet(file_create_url($node_file->uri)); + $this->assertResponse(200, 'Confirmed that the generated URL is correct by downloading the shipped file.'); + + // "Click" the remove button (emulating either a nojs or js submission). + // In this POST request, the attacker "guesses" the fid of the victim's + // temporary file and uses that to remove this file. + $this->drupalGet('node/' . $node->nid . '/edit'); + switch ($type) { + case 'nojs': + $this->drupalPost(NULL, array("{$field_name}[$langcode][0][fid]" => (string) $victim_tmp_file->fid), 'Remove'); + break; + case 'js': + $button = $this->xpath('//input[@type="submit" and @value="Remove"]'); + $this->drupalPostAJAX(NULL, array("{$field_name}[$langcode][0][fid]" => (string) $victim_tmp_file->fid), array((string) $button[0]['name'] => (string) $button[0]['value'])); + break; + } + + // The victim's temporary file should not be removed by the attacker's + // POST request. + $this->assertFileExists($victim_tmp_file); + } + } + /** * Tests upload and remove buttons for multiple multi-valued File fields. */ diff --git a/docroot/modules/file/tests/file_module_test.info b/docroot/modules/file/tests/file_module_test.info index 5820f083..a9675621 100644 --- a/docroot/modules/file/tests/file_module_test.info +++ b/docroot/modules/file/tests/file_module_test.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/filter/filter.info b/docroot/modules/filter/filter.info index 6772b655..7584d6ed 100644 --- a/docroot/modules/filter/filter.info +++ b/docroot/modules/filter/filter.info @@ -7,8 +7,8 @@ files[] = filter.test required = TRUE configure = admin/config/content/formats -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/forum/forum.info b/docroot/modules/forum/forum.info index 7c36bf13..2f10e395 100644 --- a/docroot/modules/forum/forum.info +++ b/docroot/modules/forum/forum.info @@ -9,8 +9,8 @@ files[] = forum.test configure = admin/structure/forum stylesheets[all][] = forum.css -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/help/help.info b/docroot/modules/help/help.info index 7ce67534..accbca80 100644 --- a/docroot/modules/help/help.info +++ b/docroot/modules/help/help.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x files[] = help.test -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/image/image.info b/docroot/modules/image/image.info index 1c010578..b6bd514d 100644 --- a/docroot/modules/image/image.info +++ b/docroot/modules/image/image.info @@ -7,8 +7,8 @@ dependencies[] = file files[] = image.test configure = admin/config/media/image-styles -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/image/image.module b/docroot/modules/image/image.module index 526330c6..dab88361 100644 --- a/docroot/modules/image/image.module +++ b/docroot/modules/image/image.module @@ -835,8 +835,8 @@ function image_style_deliver($style, $scheme) { file_download($scheme, file_uri_target($derivative_uri)); } else { - $headers = module_invoke_all('file_download', $image_uri); - if (in_array(-1, $headers) || empty($headers)) { + $headers = file_download_headers($image_uri); + if (empty($headers)) { return MENU_ACCESS_DENIED; } if (count($headers)) { diff --git a/docroot/modules/image/image.test b/docroot/modules/image/image.test index 87d803a5..42f8d8bc 100644 --- a/docroot/modules/image/image.test +++ b/docroot/modules/image/image.test @@ -201,6 +201,22 @@ class ImageStylesPathAndUrlTestCase extends DrupalWebTestCase { $this->assertResponse(404, 'Accessing an image style URL with a source image that does not exist provides a 404 error response.'); } + /** + * Test that we do not pass an array to drupal_add_http_header. + */ + function testImageContentTypeHeaders() { + $files = $this->drupalGetTestFiles('image'); + $file = array_shift($files); + // Copy the test file to private folder. + $private_file = file_copy($file, 'private://', FILE_EXISTS_RENAME); + // Tell image_module_test module to return the headers we want to test. + variable_set('image_module_test_invalid_headers', $private_file->uri); + // Invoke image_style_deliver so it will try to set headers. + $generated_url = image_style_url($this->style_name, $private_file->uri); + $this->drupalGet($generated_url); + variable_del('image_module_test_invalid_headers'); + } + /** * Test image_style_url(). */ diff --git a/docroot/modules/image/tests/image_module_test.info b/docroot/modules/image/tests/image_module_test.info index cbfb3c52..85a47e21 100644 --- a/docroot/modules/image/tests/image_module_test.info +++ b/docroot/modules/image/tests/image_module_test.info @@ -6,8 +6,8 @@ core = 7.x files[] = image_module_test.module hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/image/tests/image_module_test.module b/docroot/modules/image/tests/image_module_test.module index 8a322fb9..fc66d9b8 100644 --- a/docroot/modules/image/tests/image_module_test.module +++ b/docroot/modules/image/tests/image_module_test.module @@ -9,6 +9,9 @@ function image_module_test_file_download($uri) { if (variable_get('image_module_test_file_download', FALSE) == $uri) { return array('X-Image-Owned-By' => 'image_module_test'); } + if (variable_get('image_module_test_invalid_headers', FALSE) == $uri) { + return array('Content-Type' => 'image/png'); + } } /** diff --git a/docroot/modules/locale/locale.info b/docroot/modules/locale/locale.info index 69618b58..b2208f7a 100644 --- a/docroot/modules/locale/locale.info +++ b/docroot/modules/locale/locale.info @@ -6,8 +6,8 @@ core = 7.x files[] = locale.test configure = admin/config/regional/language -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/locale/tests/locale_test.info b/docroot/modules/locale/tests/locale_test.info index 724ce820..23493fe3 100644 --- a/docroot/modules/locale/tests/locale_test.info +++ b/docroot/modules/locale/tests/locale_test.info @@ -5,8 +5,8 @@ package = Testing version = VERSION hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/menu/menu.info b/docroot/modules/menu/menu.info index dfe25a43..b135e395 100644 --- a/docroot/modules/menu/menu.info +++ b/docroot/modules/menu/menu.info @@ -6,8 +6,8 @@ core = 7.x files[] = menu.test configure = admin/structure/menu -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/node/node.admin.inc b/docroot/modules/node/node.admin.inc index 145be7ad..eead4ea9 100644 --- a/docroot/modules/node/node.admin.inc +++ b/docroot/modules/node/node.admin.inc @@ -508,14 +508,17 @@ function node_admin_nodes() { $options = array(); foreach ($nodes as $node) { $langcode = entity_language('node', $node); - $l_options = $langcode != LANGUAGE_NONE && isset($languages[$langcode]) ? array('language' => $languages[$langcode]) : array(); + $uri = entity_uri('node', $node); + if ($langcode != LANGUAGE_NONE && isset($languages[$langcode])) { + $uri['options']['language'] = $languages[$langcode]; + } $options[$node->nid] = array( 'title' => array( 'data' => array( '#type' => 'link', '#title' => $node->title, - '#href' => 'node/' . $node->nid, - '#options' => $l_options, + '#href' => $uri['path'], + '#options' => $uri['options'], '#suffix' => ' ' . theme('mark', array('type' => node_mark($node->nid, $node->changed))), ), ), diff --git a/docroot/modules/node/node.info b/docroot/modules/node/node.info index 41a2e337..58f56696 100644 --- a/docroot/modules/node/node.info +++ b/docroot/modules/node/node.info @@ -9,8 +9,8 @@ required = TRUE configure = admin/structure/types stylesheets[all][] = node.css -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/node/node.module b/docroot/modules/node/node.module index f892d1c2..1d88834c 100644 --- a/docroot/modules/node/node.module +++ b/docroot/modules/node/node.module @@ -2953,7 +2953,10 @@ function node_search_validate($form, &$form_state) { * system. When adding a node listing to your module, be sure to use a dynamic * query created by db_select() and add a tag of "node_access". This will allow * modules dealing with node access to ensure only nodes to which the user has - * access are retrieved, through the use of hook_query_TAG_alter(). + * access are retrieved, through the use of hook_query_TAG_alter(). Tagging a + * query with "node_access" does not check the published/unpublished status of + * nodes, so the base query is responsible for ensuring that unpublished nodes + * are not displayed to inappropriate users. * * Note: Even a single module returning NODE_ACCESS_DENY from hook_node_access() * will block access to the node. Therefore, implementers should take care to @@ -3685,7 +3688,7 @@ function _node_access_rebuild_batch_operation(&$context) { // Initiate multistep processing. $context['sandbox']['progress'] = 0; $context['sandbox']['current_node'] = 0; - $context['sandbox']['max'] = db_query('SELECT COUNT(DISTINCT nid) FROM {node}')->fetchField(); + $context['sandbox']['max'] = db_query('SELECT COUNT(nid) FROM {node}')->fetchField(); } // Process the next 20 nodes. diff --git a/docroot/modules/node/node.pages.inc b/docroot/modules/node/node.pages.inc index cc3908e3..72b0ea7c 100644 --- a/docroot/modules/node/node.pages.inc +++ b/docroot/modules/node/node.pages.inc @@ -396,7 +396,6 @@ function node_preview($node) { $cloned_node->changed = REQUEST_TIME; $nodes = array($cloned_node->nid => $cloned_node); - field_attach_prepare_view('node', $nodes, 'full'); // Display a preview of the node. if (!form_get_errors()) { diff --git a/docroot/modules/node/node.test b/docroot/modules/node/node.test index 5c9118eb..4ffc88e8 100644 --- a/docroot/modules/node/node.test +++ b/docroot/modules/node/node.test @@ -457,10 +457,70 @@ class PagePreviewTestCase extends DrupalWebTestCase { } function setUp() { - parent::setUp(); + parent::setUp(array('taxonomy', 'node')); $web_user = $this->drupalCreateUser(array('edit own page content', 'create page content')); $this->drupalLogin($web_user); + + // Add a vocabulary so we can test different view modes. + $vocabulary = (object) array( + 'name' => $this->randomName(), + 'description' => $this->randomName(), + 'machine_name' => drupal_strtolower($this->randomName()), + 'help' => '', + 'nodes' => array('page' => 'page'), + ); + taxonomy_vocabulary_save($vocabulary); + + $this->vocabulary = $vocabulary; + + // Add a term to the vocabulary. + $term = (object) array( + 'name' => $this->randomName(), + 'description' => $this->randomName(), + // Use the first available text format. + 'format' => db_query_range('SELECT format FROM {filter_format}', 0, 1)->fetchField(), + 'vid' => $this->vocabulary->vid, + 'vocabulary_machine_name' => $vocabulary->machine_name, + ); + taxonomy_term_save($term); + + $this->term = $term; + + // Set up a field and instance. + $this->field_name = drupal_strtolower($this->randomName()); + $this->field = array( + 'field_name' => $this->field_name, + 'type' => 'taxonomy_term_reference', + 'settings' => array( + 'allowed_values' => array( + array( + 'vocabulary' => $this->vocabulary->machine_name, + 'parent' => '0', + ), + ), + ) + ); + + field_create_field($this->field); + $this->instance = array( + 'field_name' => $this->field_name, + 'entity_type' => 'node', + 'bundle' => 'page', + 'widget' => array( + 'type' => 'options_select', + ), + // Hide on full display but render on teaser. + 'display' => array( + 'default' => array( + 'type' => 'hidden', + ), + 'teaser' => array( + 'type' => 'taxonomy_term_reference_link', + ), + ), + ); + field_create_instance($this->instance); } /** @@ -470,21 +530,26 @@ class PagePreviewTestCase extends DrupalWebTestCase { $langcode = LANGUAGE_NONE; $title_key = "title"; $body_key = "body[$langcode][0][value]"; + $term_key = "{$this->field_name}[$langcode]"; // Fill in node creation form and preview node. $edit = array(); $edit[$title_key] = $this->randomName(8); $edit[$body_key] = $this->randomName(16); + $edit[$term_key] = $this->term->tid; $this->drupalPost('node/add/page', $edit, t('Preview')); - // Check that the preview is displaying the title and body. + // Check that the preview is displaying the title, body, and term. $this->assertTitle(t('Preview | Drupal'), 'Basic page title is preview.'); $this->assertText($edit[$title_key], 'Title displayed.'); $this->assertText($edit[$body_key], 'Body displayed.'); + $this->assertText($this->term->name, 'Term displayed.'); - // Check that the title and body fields are displayed with the correct values. + // Check that the title, body, and term fields are displayed with the + // correct values. $this->assertFieldByName($title_key, $edit[$title_key], 'Title field displayed.'); $this->assertFieldByName($body_key, $edit[$body_key], 'Body field displayed.'); + $this->assertFieldByName($term_key, $edit[$term_key], 'Term field displayed.'); } /** @@ -494,6 +559,7 @@ class PagePreviewTestCase extends DrupalWebTestCase { $langcode = LANGUAGE_NONE; $title_key = "title"; $body_key = "body[$langcode][0][value]"; + $term_key = "{$this->field_name}[$langcode]"; // Force revision on "Basic page" content. variable_set('node_options_page', array('status', 'revision')); @@ -501,17 +567,21 @@ class PagePreviewTestCase extends DrupalWebTestCase { $edit = array(); $edit[$title_key] = $this->randomName(8); $edit[$body_key] = $this->randomName(16); + $edit[$term_key] = $this->term->tid; $edit['log'] = $this->randomName(32); $this->drupalPost('node/add/page', $edit, t('Preview')); - // Check that the preview is displaying the title and body. + // Check that the preview is displaying the title, body, and term. $this->assertTitle(t('Preview | Drupal'), 'Basic page title is preview.'); $this->assertText($edit[$title_key], 'Title displayed.'); $this->assertText($edit[$body_key], 'Body displayed.'); + $this->assertText($this->term->name, 'Term displayed.'); - // Check that the title and body fields are displayed with the correct values. + // Check that the title, body, and term fields are displayed with the + // correct values. $this->assertFieldByName($title_key, $edit[$title_key], 'Title field displayed.'); $this->assertFieldByName($body_key, $edit[$body_key], 'Body field displayed.'); + $this->assertFieldByName($term_key, $edit[$term_key], 'Term field displayed.'); // Check that the log field has the correct value. $this->assertFieldByName('log', $edit['log'], 'Log field displayed.'); diff --git a/docroot/modules/node/tests/node_access_test.info b/docroot/modules/node/tests/node_access_test.info index dc404dd3..faa0c5b3 100644 --- a/docroot/modules/node/tests/node_access_test.info +++ b/docroot/modules/node/tests/node_access_test.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/node/tests/node_test.info b/docroot/modules/node/tests/node_test.info index 28eaff19..fe528f7a 100644 --- a/docroot/modules/node/tests/node_test.info +++ b/docroot/modules/node/tests/node_test.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/node/tests/node_test_exception.info b/docroot/modules/node/tests/node_test_exception.info index ee20c068..59941f03 100644 --- a/docroot/modules/node/tests/node_test_exception.info +++ b/docroot/modules/node/tests/node_test_exception.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/openid/openid.info b/docroot/modules/openid/openid.info index 832b7739..8f265925 100644 --- a/docroot/modules/openid/openid.info +++ b/docroot/modules/openid/openid.info @@ -5,8 +5,8 @@ package = Core core = 7.x files[] = openid.test -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/openid/tests/openid_test.info b/docroot/modules/openid/tests/openid_test.info index 57b51a61..c123b952 100644 --- a/docroot/modules/openid/tests/openid_test.info +++ b/docroot/modules/openid/tests/openid_test.info @@ -6,8 +6,8 @@ core = 7.x dependencies[] = openid hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/overlay/overlay.info b/docroot/modules/overlay/overlay.info index cf0a404a..d415a0d5 100644 --- a/docroot/modules/overlay/overlay.info +++ b/docroot/modules/overlay/overlay.info @@ -4,8 +4,8 @@ package = Core version = VERSION core = 7.x -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/path/path.info b/docroot/modules/path/path.info index 06ef66a7..7ef6ad34 100644 --- a/docroot/modules/path/path.info +++ b/docroot/modules/path/path.info @@ -6,8 +6,8 @@ core = 7.x files[] = path.test configure = admin/config/search/path -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/php/php.info b/docroot/modules/php/php.info index a7dc1fc8..fb788c62 100644 --- a/docroot/modules/php/php.info +++ b/docroot/modules/php/php.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x files[] = php.test -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/poll/poll.info b/docroot/modules/poll/poll.info index 4fa941bc..8d9d91af 100644 --- a/docroot/modules/poll/poll.info +++ b/docroot/modules/poll/poll.info @@ -6,8 +6,8 @@ core = 7.x files[] = poll.test stylesheets[all][] = poll.css -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/poll/poll.module b/docroot/modules/poll/poll.module index bfc72bf9..336e4456 100644 --- a/docroot/modules/poll/poll.module +++ b/docroot/modules/poll/poll.module @@ -631,9 +631,6 @@ function poll_delete($node) { * The node object to load. */ function poll_block_latest_poll_view($node) { - global $user; - $output = ''; - // This is necessary for shared objects because PHP doesn't copy objects, but // passes them by reference. So when the objects are cached it can result in // the wrong output being displayed on subsequent calls. The cloning and @@ -674,9 +671,6 @@ function poll_block_latest_poll_view($node) { * Implements hook_view(). */ function poll_view($node, $view_mode) { - global $user; - $output = ''; - if (!empty($node->allowvotes) && empty($node->show_results)) { $node->content['poll_view_voting'] = drupal_get_form('poll_view_voting', $node); } @@ -694,7 +688,7 @@ function poll_view($node, $view_mode) { function poll_teaser($node) { $teaser = NULL; if (is_array($node->choice)) { - foreach ($node->choice as $k => $choice) { + foreach ($node->choice as $choice) { if ($choice['chtext'] != '') { $teaser .= '* ' . check_plain($choice['chtext']) . "\n"; } diff --git a/docroot/modules/profile/profile.info b/docroot/modules/profile/profile.info index b227e81d..db6e7b1b 100644 --- a/docroot/modules/profile/profile.info +++ b/docroot/modules/profile/profile.info @@ -11,8 +11,8 @@ configure = admin/config/people/profile ; See user_system_info_alter(). hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/profile/profile.test b/docroot/modules/profile/profile.test index 6cb07391..18924714 100644 --- a/docroot/modules/profile/profile.test +++ b/docroot/modules/profile/profile.test @@ -342,7 +342,7 @@ class ProfileTestAutocomplete extends ProfileTestCase { // Autocomplete always uses non-clean URLs. $current_clean_url = isset($GLOBALS['conf']['clean_url']) ? $GLOBALS['conf']['clean_url'] : NULL; $GLOBALS['conf']['clean_url'] = 0; - $autocomplete_url = url('profile/autocomplete/' . $field['fid'], array('absolute' => TRUE)); + $autocomplete_url = url('profile/autocomplete/' . $field['fid'], array('absolute' => TRUE, 'script' => 'index.php')); $GLOBALS['conf']['clean_url'] = $current_clean_url; $autocomplete_id = drupal_html_id('edit-' . $field['form_name'] . '-autocomplete'); $autocomplete_html = ''; diff --git a/docroot/modules/rdf/rdf.info b/docroot/modules/rdf/rdf.info index 0ec84a5e..a58be463 100644 --- a/docroot/modules/rdf/rdf.info +++ b/docroot/modules/rdf/rdf.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x files[] = rdf.test -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/rdf/tests/rdf_test.info b/docroot/modules/rdf/tests/rdf_test.info index fef68a6c..836ddf63 100644 --- a/docroot/modules/rdf/tests/rdf_test.info +++ b/docroot/modules/rdf/tests/rdf_test.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/search/search.info b/docroot/modules/search/search.info index 7b1083d3..33fed95d 100644 --- a/docroot/modules/search/search.info +++ b/docroot/modules/search/search.info @@ -8,8 +8,8 @@ files[] = search.test configure = admin/config/search/settings stylesheets[all][] = search.css -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/search/search.pages.inc b/docroot/modules/search/search.pages.inc index 9dd00a6d..2123dd75 100644 --- a/docroot/modules/search/search.pages.inc +++ b/docroot/modules/search/search.pages.inc @@ -49,7 +49,7 @@ function search_view($module = NULL, $keys = '') { // which will get us back to this page callback. In other words, the search // form submits with POST but redirects to GET. This way we can keep // the search query URL clean as a whistle. - if (empty($_POST['form_id']) || $_POST['form_id'] != 'search_form') { + if (empty($_POST['form_id']) || ($_POST['form_id'] != 'search_form' && $_POST['form_id'] != 'search_block_form')) { $conditions = NULL; if (isset($info['conditions_callback']) && function_exists($info['conditions_callback'])) { // Build an optional array of more search conditions. diff --git a/docroot/modules/search/search.test b/docroot/modules/search/search.test index 5ee5870d..913d1989 100644 --- a/docroot/modules/search/search.test +++ b/docroot/modules/search/search.test @@ -666,6 +666,24 @@ class SearchBlockTestCase extends DrupalWebTestCase { url('search/node/', array('absolute' => TRUE)), 'Redirected to correct url.' ); + + // Test that after entering a too-short keyword in the form, you can then + // search again with a longer keyword. First test using the block form. + $terms = array('search_block_form' => 'a'); + $this->drupalPost('node', $terms, t('Search')); + $this->assertText('You must include at least one positive keyword with 3 characters or more'); + $terms = array('search_block_form' => 'foo'); + $this->drupalPost(NULL, $terms, t('Search')); + $this->assertNoText('You must include at least one positive keyword with 3 characters or more'); + $this->assertText('Your search yielded no results'); + + // Same test again, using the search page form for the second search this time. + $terms = array('search_block_form' => 'a'); + $this->drupalPost('node', $terms, t('Search')); + $terms = array('keys' => 'foo'); + $this->drupalPost(NULL, $terms, t('Search')); + $this->assertNoText('You must include at least one positive keyword with 3 characters or more'); + $this->assertText('Your search yielded no results'); } } diff --git a/docroot/modules/search/tests/search_embedded_form.info b/docroot/modules/search/tests/search_embedded_form.info index f98e3ba9..d8b237ff 100644 --- a/docroot/modules/search/tests/search_embedded_form.info +++ b/docroot/modules/search/tests/search_embedded_form.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/search/tests/search_extra_type.info b/docroot/modules/search/tests/search_extra_type.info index 360d8978..306cc8cb 100644 --- a/docroot/modules/search/tests/search_extra_type.info +++ b/docroot/modules/search/tests/search_extra_type.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/search/tests/search_node_tags.info b/docroot/modules/search/tests/search_node_tags.info index d5eccdd5..78b1f397 100644 --- a/docroot/modules/search/tests/search_node_tags.info +++ b/docroot/modules/search/tests/search_node_tags.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/shortcut/shortcut.info b/docroot/modules/shortcut/shortcut.info index 95125868..d6aa11c0 100644 --- a/docroot/modules/shortcut/shortcut.info +++ b/docroot/modules/shortcut/shortcut.info @@ -6,8 +6,8 @@ core = 7.x files[] = shortcut.test configure = admin/config/user-interface/shortcut -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/drupal_web_test_case.php b/docroot/modules/simpletest/drupal_web_test_case.php index bf1e9c31..aed66fa2 100644 --- a/docroot/modules/simpletest/drupal_web_test_case.php +++ b/docroot/modules/simpletest/drupal_web_test_case.php @@ -2584,6 +2584,11 @@ protected function buildXPathQuery($xpath, array $args = array()) { * * @param $xpath * The xpath string to use in the search. + * @param array $arguments + * An array of arguments with keys in the form ':name' matching the + * placeholders in the query. The values may be either strings or numeric + * values. + * * @return * The return value of the xpath search. For details on the xpath string * format and return values see the SimpleXML documentation, diff --git a/docroot/modules/simpletest/simpletest.info b/docroot/modules/simpletest/simpletest.info index 1df6dfc2..1063ed66 100644 --- a/docroot/modules/simpletest/simpletest.info +++ b/docroot/modules/simpletest/simpletest.info @@ -57,8 +57,8 @@ files[] = tests/upgrade/update.trigger.test files[] = tests/upgrade/update.field.test files[] = tests/upgrade/update.user.test -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/actions_loop_test.info b/docroot/modules/simpletest/tests/actions_loop_test.info index d1c4b6b0..8054ae3e 100644 --- a/docroot/modules/simpletest/tests/actions_loop_test.info +++ b/docroot/modules/simpletest/tests/actions_loop_test.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/ajax_forms_test.info b/docroot/modules/simpletest/tests/ajax_forms_test.info index cf00fd81..9a036b55 100644 --- a/docroot/modules/simpletest/tests/ajax_forms_test.info +++ b/docroot/modules/simpletest/tests/ajax_forms_test.info @@ -5,8 +5,8 @@ package = Testing version = VERSION hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/ajax_test.info b/docroot/modules/simpletest/tests/ajax_test.info index 6cb51932..a987a3fa 100644 --- a/docroot/modules/simpletest/tests/ajax_test.info +++ b/docroot/modules/simpletest/tests/ajax_test.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/batch_test.info b/docroot/modules/simpletest/tests/batch_test.info index ddc7a513..04db1c8c 100644 --- a/docroot/modules/simpletest/tests/batch_test.info +++ b/docroot/modules/simpletest/tests/batch_test.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/boot_test_1.info b/docroot/modules/simpletest/tests/boot_test_1.info index 0717c4e6..16c7bc48 100644 --- a/docroot/modules/simpletest/tests/boot_test_1.info +++ b/docroot/modules/simpletest/tests/boot_test_1.info @@ -5,8 +5,8 @@ package = Testing version = VERSION hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/boot_test_2.info b/docroot/modules/simpletest/tests/boot_test_2.info index ff68bcf9..64fb360a 100644 --- a/docroot/modules/simpletest/tests/boot_test_2.info +++ b/docroot/modules/simpletest/tests/boot_test_2.info @@ -5,8 +5,8 @@ package = Testing version = VERSION hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/bootstrap.test b/docroot/modules/simpletest/tests/bootstrap.test index d46c6ec8..3d038ac9 100644 --- a/docroot/modules/simpletest/tests/bootstrap.test +++ b/docroot/modules/simpletest/tests/bootstrap.test @@ -152,7 +152,7 @@ class BootstrapPageCacheTestCase extends DrupalWebTestCase { $this->drupalLogin($user); $this->drupalGet('', array(), array('If-Modified-Since: ' . $last_modified, 'If-None-Match: ' . $etag)); $this->assertResponse(200, 'Conditional request returned 200 OK for authenticated user.'); - $this->assertFalse($this->drupalGetHeader('X-Drupal-Cache'), 'Absense of Page was not cached.'); + $this->assertFalse($this->drupalGetHeader('X-Drupal-Cache'), 'Absence of Page was not cached.'); $this->assertFalse($this->drupalGetHeader('ETag'), 'ETag HTTP headers are not present for logged in users.'); $this->assertFalse($this->drupalGetHeader('Last-Modified'), 'Last-Modified HTTP headers are not present for logged in users.'); } diff --git a/docroot/modules/simpletest/tests/common.test b/docroot/modules/simpletest/tests/common.test index bf855761..92aefe48 100644 --- a/docroot/modules/simpletest/tests/common.test +++ b/docroot/modules/simpletest/tests/common.test @@ -372,6 +372,65 @@ class CommonURLUnitTest extends DrupalWebTestCase { } } +/** + * Tests url_is_external(). + */ +class UrlIsExternalUnitTest extends DrupalUnitTestCase { + + public static function getInfo() { + return array( + 'name' => 'External URL checking', + 'description' => 'Performs tests on url_is_external().', + 'group' => 'System', + ); + } + + /** + * Tests if each URL is external or not. + */ + function testUrlIsExternal() { + foreach ($this->examples() as $path => $expected) { + $this->assertIdentical(url_is_external($path), $expected, $path); + } + } + + /** + * Provides data for testUrlIsExternal(). + * + * @return array + * An array of test data, keyed by a path, with the expected value where + * TRUE is external, and FALSE is not external. + */ + protected function examples() { + return array( + // Simple external URLs. + 'http://example.com' => TRUE, + 'https://example.com' => TRUE, + 'http://drupal.org/foo/bar?foo=bar&bar=baz&baz#foo' => TRUE, + '//drupal.org' => TRUE, + // Some browsers ignore or strip leading control characters. + "\x00//www.example.com" => TRUE, + "\x08//www.example.com" => TRUE, + "\x1F//www.example.com" => TRUE, + "\n//www.example.com" => TRUE, + // JSON supports decoding directly from UTF-8 code points. + json_decode('"\u00AD"') . "//www.example.com" => TRUE, + json_decode('"\u200E"') . "//www.example.com" => TRUE, + json_decode('"\uE0020"') . "//www.example.com" => TRUE, + json_decode('"\uE000"') . "//www.example.com" => TRUE, + // Backslashes should be normalized to forward. + '\\\\example.com' => TRUE, + // Local URLs. + 'node' => FALSE, + '/system/ajax' => FALSE, + '?q=foo:bar' => FALSE, + 'node/edit:me' => FALSE, + '/drupal.org' => FALSE, + '' => FALSE, + ); + } +} + /** * Tests for check_plain(), filter_xss(), format_string(), and check_url(). */ @@ -1256,6 +1315,15 @@ class DrupalGotoTest extends DrupalWebTestCase { $this->assertText('drupal_goto', 'Drupal goto redirect succeeded.'); $this->assertEqual($this->getUrl(), url('common-test/drupal_goto', array('query' => array('foo' => '123'), 'absolute' => TRUE)), 'Drupal goto redirected to expected URL.'); + // Test that calling drupal_goto() on the current path is not dangerous. + variable_set('common_test_redirect_current_path', TRUE); + $this->drupalGet('', array('query' => array('q' => 'http://www.example.com/'))); + $headers = $this->drupalGetHeaders(TRUE); + list(, $status) = explode(' ', $headers[0][':status'], 3); + $this->assertEqual($status, 302, 'Expected response code was sent.'); + $this->assertNotEqual($this->getUrl(), 'http://www.example.com/', 'Drupal goto did not redirect to external URL.'); + $this->assertTrue(strpos($this->getUrl(), url('', array('absolute' => TRUE))) === 0, 'Drupal redirected to itself.'); + variable_del('common_test_redirect_current_path'); // Test that drupal_goto() respects ?destination=xxx. Use an complicated URL // to test that the path is encoded and decoded properly. $destination = 'common-test/drupal_goto/destination?foo=%2525&bar=123'; diff --git a/docroot/modules/simpletest/tests/common_test.info b/docroot/modules/simpletest/tests/common_test.info index 6d824cc0..e484a8c2 100644 --- a/docroot/modules/simpletest/tests/common_test.info +++ b/docroot/modules/simpletest/tests/common_test.info @@ -7,8 +7,8 @@ stylesheets[all][] = common_test.css stylesheets[print][] = common_test.print.css hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/common_test.module b/docroot/modules/simpletest/tests/common_test.module index 674a4944..2eb8cd5d 100644 --- a/docroot/modules/simpletest/tests/common_test.module +++ b/docroot/modules/simpletest/tests/common_test.module @@ -92,6 +92,15 @@ function common_test_drupal_goto_alter(&$path, &$options, &$http_response_code) } } +/** + * Implements hook_init(). + */ +function common_test_init() { + if (variable_get('common_test_redirect_current_path', FALSE)) { + drupal_goto(current_path()); + } +} + /** * Print destination query parameter. */ diff --git a/docroot/modules/simpletest/tests/common_test_cron_helper.info b/docroot/modules/simpletest/tests/common_test_cron_helper.info index 595c0bf7..a11c2fc5 100644 --- a/docroot/modules/simpletest/tests/common_test_cron_helper.info +++ b/docroot/modules/simpletest/tests/common_test_cron_helper.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/database_test.info b/docroot/modules/simpletest/tests/database_test.info index 200e057c..c8c2aa80 100644 --- a/docroot/modules/simpletest/tests/database_test.info +++ b/docroot/modules/simpletest/tests/database_test.info @@ -5,8 +5,8 @@ package = Testing version = VERSION hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/drupal_autoload_test/drupal_autoload_test.info b/docroot/modules/simpletest/tests/drupal_autoload_test/drupal_autoload_test.info index fcf318c0..520e8d59 100644 --- a/docroot/modules/simpletest/tests/drupal_autoload_test/drupal_autoload_test.info +++ b/docroot/modules/simpletest/tests/drupal_autoload_test/drupal_autoload_test.info @@ -7,8 +7,8 @@ version = VERSION core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/drupal_system_listing_compatible_test/drupal_system_listing_compatible_test.info b/docroot/modules/simpletest/tests/drupal_system_listing_compatible_test/drupal_system_listing_compatible_test.info index 7a1212a9..613d911a 100644 --- a/docroot/modules/simpletest/tests/drupal_system_listing_compatible_test/drupal_system_listing_compatible_test.info +++ b/docroot/modules/simpletest/tests/drupal_system_listing_compatible_test/drupal_system_listing_compatible_test.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/drupal_system_listing_incompatible_test/drupal_system_listing_incompatible_test.info b/docroot/modules/simpletest/tests/drupal_system_listing_incompatible_test/drupal_system_listing_incompatible_test.info index b762f17e..e417f4bf 100644 --- a/docroot/modules/simpletest/tests/drupal_system_listing_incompatible_test/drupal_system_listing_incompatible_test.info +++ b/docroot/modules/simpletest/tests/drupal_system_listing_incompatible_test/drupal_system_listing_incompatible_test.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/entity_cache_test.info b/docroot/modules/simpletest/tests/entity_cache_test.info index bb64735a..ebb4b089 100644 --- a/docroot/modules/simpletest/tests/entity_cache_test.info +++ b/docroot/modules/simpletest/tests/entity_cache_test.info @@ -6,8 +6,8 @@ core = 7.x dependencies[] = entity_cache_test_dependency hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/entity_cache_test_dependency.info b/docroot/modules/simpletest/tests/entity_cache_test_dependency.info index 7e13ad23..835e4ca6 100644 --- a/docroot/modules/simpletest/tests/entity_cache_test_dependency.info +++ b/docroot/modules/simpletest/tests/entity_cache_test_dependency.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/entity_crud_hook_test.info b/docroot/modules/simpletest/tests/entity_crud_hook_test.info index 36091c59..d7969f18 100644 --- a/docroot/modules/simpletest/tests/entity_crud_hook_test.info +++ b/docroot/modules/simpletest/tests/entity_crud_hook_test.info @@ -5,8 +5,8 @@ package = Testing version = VERSION hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/entity_query_access_test.info b/docroot/modules/simpletest/tests/entity_query_access_test.info index afc269c1..03c2dcf1 100644 --- a/docroot/modules/simpletest/tests/entity_query_access_test.info +++ b/docroot/modules/simpletest/tests/entity_query_access_test.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/error_test.info b/docroot/modules/simpletest/tests/error_test.info index a25c9d32..08ff6765 100644 --- a/docroot/modules/simpletest/tests/error_test.info +++ b/docroot/modules/simpletest/tests/error_test.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/file_test.info b/docroot/modules/simpletest/tests/file_test.info index 0b168a45..4f6598ab 100644 --- a/docroot/modules/simpletest/tests/file_test.info +++ b/docroot/modules/simpletest/tests/file_test.info @@ -6,8 +6,8 @@ core = 7.x files[] = file_test.module hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/filter_test.info b/docroot/modules/simpletest/tests/filter_test.info index 5a1fae48..b57f9795 100644 --- a/docroot/modules/simpletest/tests/filter_test.info +++ b/docroot/modules/simpletest/tests/filter_test.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/form_test.info b/docroot/modules/simpletest/tests/form_test.info index b93f6566..21f621b4 100644 --- a/docroot/modules/simpletest/tests/form_test.info +++ b/docroot/modules/simpletest/tests/form_test.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/image_test.info b/docroot/modules/simpletest/tests/image_test.info index 7c345490..6ad1785f 100644 --- a/docroot/modules/simpletest/tests/image_test.info +++ b/docroot/modules/simpletest/tests/image_test.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/mail.test b/docroot/modules/simpletest/tests/mail.test index 70a43cb4..3e40e13a 100644 --- a/docroot/modules/simpletest/tests/mail.test +++ b/docroot/modules/simpletest/tests/mail.test @@ -441,7 +441,7 @@ class DrupalHtmlToTextTestCase extends DrupalWebTestCase { * is 1000 characters." */ function testVeryLongLineWrap() { - $input = 'Drupal

' . str_repeat('x', 2100) . '
Drupal'; + $input = 'Drupal

' . str_repeat('x', 2100) . '


Drupal'; $output = drupal_html_to_text($input); // This awkward construct comes from includes/mail.inc lines 8-13. $eol = variable_get('mail_line_endings', MAIL_LINE_ENDINGS); @@ -455,7 +455,6 @@ class DrupalHtmlToTextTestCase extends DrupalWebTestCase { $maximum_line_length = max($maximum_line_length, strlen($line . $eol)); } $verbose = 'Maximum line length found was ' . $maximum_line_length . ' octets.'; - // @todo This should assert that $maximum_line_length <= 1000. - $this->pass($verbose); + $this->assertTrue($maximum_line_length <= 1000, $verbose); } } diff --git a/docroot/modules/simpletest/tests/menu_test.info b/docroot/modules/simpletest/tests/menu_test.info index 63311d5a..88007a1e 100644 --- a/docroot/modules/simpletest/tests/menu_test.info +++ b/docroot/modules/simpletest/tests/menu_test.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/module_test.info b/docroot/modules/simpletest/tests/module_test.info index 593f26b3..08c2c7f1 100644 --- a/docroot/modules/simpletest/tests/module_test.info +++ b/docroot/modules/simpletest/tests/module_test.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/path_test.info b/docroot/modules/simpletest/tests/path_test.info index 7a003fc4..7c3d6c93 100644 --- a/docroot/modules/simpletest/tests/path_test.info +++ b/docroot/modules/simpletest/tests/path_test.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/psr_0_test/psr_0_test.info b/docroot/modules/simpletest/tests/psr_0_test/psr_0_test.info index 57ced88a..e17791ac 100644 --- a/docroot/modules/simpletest/tests/psr_0_test/psr_0_test.info +++ b/docroot/modules/simpletest/tests/psr_0_test/psr_0_test.info @@ -5,8 +5,8 @@ core = 7.x hidden = TRUE package = Testing -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/psr_4_test/psr_4_test.info b/docroot/modules/simpletest/tests/psr_4_test/psr_4_test.info index 6f7a1ca2..52004961 100644 --- a/docroot/modules/simpletest/tests/psr_4_test/psr_4_test.info +++ b/docroot/modules/simpletest/tests/psr_4_test/psr_4_test.info @@ -5,8 +5,8 @@ core = 7.x hidden = TRUE package = Testing -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/requirements1_test.info b/docroot/modules/simpletest/tests/requirements1_test.info index 133bcf47..95ac379b 100644 --- a/docroot/modules/simpletest/tests/requirements1_test.info +++ b/docroot/modules/simpletest/tests/requirements1_test.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/requirements2_test.info b/docroot/modules/simpletest/tests/requirements2_test.info index 4e30b46f..ab6015ab 100644 --- a/docroot/modules/simpletest/tests/requirements2_test.info +++ b/docroot/modules/simpletest/tests/requirements2_test.info @@ -7,8 +7,8 @@ version = VERSION core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/session_test.info b/docroot/modules/simpletest/tests/session_test.info index aa983cb6..fe8594ac 100644 --- a/docroot/modules/simpletest/tests/session_test.info +++ b/docroot/modules/simpletest/tests/session_test.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/system_dependencies_test.info b/docroot/modules/simpletest/tests/system_dependencies_test.info index eba3d323..6bc9979f 100644 --- a/docroot/modules/simpletest/tests/system_dependencies_test.info +++ b/docroot/modules/simpletest/tests/system_dependencies_test.info @@ -6,8 +6,8 @@ core = 7.x hidden = TRUE dependencies[] = _missing_dependency -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/system_incompatible_core_version_dependencies_test.info b/docroot/modules/simpletest/tests/system_incompatible_core_version_dependencies_test.info index b43f28b1..0cdbda70 100644 --- a/docroot/modules/simpletest/tests/system_incompatible_core_version_dependencies_test.info +++ b/docroot/modules/simpletest/tests/system_incompatible_core_version_dependencies_test.info @@ -6,8 +6,8 @@ core = 7.x hidden = TRUE dependencies[] = system_incompatible_core_version_test -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/system_incompatible_core_version_test.info b/docroot/modules/simpletest/tests/system_incompatible_core_version_test.info index 8605f45b..7c36e496 100644 --- a/docroot/modules/simpletest/tests/system_incompatible_core_version_test.info +++ b/docroot/modules/simpletest/tests/system_incompatible_core_version_test.info @@ -5,8 +5,8 @@ version = VERSION core = 5.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/system_incompatible_module_version_dependencies_test.info b/docroot/modules/simpletest/tests/system_incompatible_module_version_dependencies_test.info index daef43e2..5c7c43ab 100644 --- a/docroot/modules/simpletest/tests/system_incompatible_module_version_dependencies_test.info +++ b/docroot/modules/simpletest/tests/system_incompatible_module_version_dependencies_test.info @@ -7,8 +7,8 @@ hidden = TRUE ; system_incompatible_module_version_test declares version 1.0 dependencies[] = system_incompatible_module_version_test (>2.0) -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/system_incompatible_module_version_test.info b/docroot/modules/simpletest/tests/system_incompatible_module_version_test.info index 06b52e8f..0bdef7cd 100644 --- a/docroot/modules/simpletest/tests/system_incompatible_module_version_test.info +++ b/docroot/modules/simpletest/tests/system_incompatible_module_version_test.info @@ -5,8 +5,8 @@ version = 1.0 core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/system_project_namespace_test.info b/docroot/modules/simpletest/tests/system_project_namespace_test.info index bfb66f7c..2bfeb881 100644 --- a/docroot/modules/simpletest/tests/system_project_namespace_test.info +++ b/docroot/modules/simpletest/tests/system_project_namespace_test.info @@ -6,8 +6,8 @@ core = 7.x hidden = TRUE dependencies[] = drupal:filter -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/system_test.info b/docroot/modules/simpletest/tests/system_test.info index 7aeaa776..3c7da63b 100644 --- a/docroot/modules/simpletest/tests/system_test.info +++ b/docroot/modules/simpletest/tests/system_test.info @@ -6,8 +6,8 @@ core = 7.x files[] = system_test.module hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/taxonomy_test.info b/docroot/modules/simpletest/tests/taxonomy_test.info index 9c389412..1e2d7221 100644 --- a/docroot/modules/simpletest/tests/taxonomy_test.info +++ b/docroot/modules/simpletest/tests/taxonomy_test.info @@ -6,8 +6,8 @@ core = 7.x hidden = TRUE dependencies[] = taxonomy -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/theme_test.info b/docroot/modules/simpletest/tests/theme_test.info index 4e06f033..adb04d76 100644 --- a/docroot/modules/simpletest/tests/theme_test.info +++ b/docroot/modules/simpletest/tests/theme_test.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/themes/test_basetheme/test_basetheme.info b/docroot/modules/simpletest/tests/themes/test_basetheme/test_basetheme.info index c9a04ef9..b82f86a4 100644 --- a/docroot/modules/simpletest/tests/themes/test_basetheme/test_basetheme.info +++ b/docroot/modules/simpletest/tests/themes/test_basetheme/test_basetheme.info @@ -6,8 +6,8 @@ hidden = TRUE settings[basetheme_only] = base theme value settings[subtheme_override] = base theme value -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/themes/test_subtheme/test_subtheme.info b/docroot/modules/simpletest/tests/themes/test_subtheme/test_subtheme.info index cb487d91..5059593b 100644 --- a/docroot/modules/simpletest/tests/themes/test_subtheme/test_subtheme.info +++ b/docroot/modules/simpletest/tests/themes/test_subtheme/test_subtheme.info @@ -6,8 +6,8 @@ hidden = TRUE settings[subtheme_override] = subtheme value -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/themes/test_theme/test_theme.info b/docroot/modules/simpletest/tests/themes/test_theme/test_theme.info index e7c335d8..98050c40 100644 --- a/docroot/modules/simpletest/tests/themes/test_theme/test_theme.info +++ b/docroot/modules/simpletest/tests/themes/test_theme/test_theme.info @@ -17,8 +17,8 @@ stylesheets[all][] = system.base.css settings[theme_test_setting] = default value -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/update_script_test.info b/docroot/modules/simpletest/tests/update_script_test.info index de5c2e02..fb5d12bb 100644 --- a/docroot/modules/simpletest/tests/update_script_test.info +++ b/docroot/modules/simpletest/tests/update_script_test.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/update_test_1.info b/docroot/modules/simpletest/tests/update_test_1.info index c539041b..4dddc493 100644 --- a/docroot/modules/simpletest/tests/update_test_1.info +++ b/docroot/modules/simpletest/tests/update_test_1.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/update_test_2.info b/docroot/modules/simpletest/tests/update_test_2.info index c539041b..4dddc493 100644 --- a/docroot/modules/simpletest/tests/update_test_2.info +++ b/docroot/modules/simpletest/tests/update_test_2.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/update_test_3.info b/docroot/modules/simpletest/tests/update_test_3.info index c539041b..4dddc493 100644 --- a/docroot/modules/simpletest/tests/update_test_3.info +++ b/docroot/modules/simpletest/tests/update_test_3.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/url_alter_test.info b/docroot/modules/simpletest/tests/url_alter_test.info index c1cda829..641b673f 100644 --- a/docroot/modules/simpletest/tests/url_alter_test.info +++ b/docroot/modules/simpletest/tests/url_alter_test.info @@ -5,8 +5,8 @@ package = Testing version = VERSION hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/simpletest/tests/xmlrpc.test b/docroot/modules/simpletest/tests/xmlrpc.test index 1a9ef234..bb74f059 100644 --- a/docroot/modules/simpletest/tests/xmlrpc.test +++ b/docroot/modules/simpletest/tests/xmlrpc.test @@ -246,4 +246,38 @@ class XMLRPCMessagesTestCase extends DrupalWebTestCase { $this->assertEqual($removed, 'system.methodSignature', 'Hiding builting system.methodSignature with hook_xmlrpc_alter works'); } + /** + * Test limits on system.multicall that can prevent brute-force attacks. + */ + function testMulticallLimit() { + $url = url(NULL, array('absolute' => TRUE)) . 'xmlrpc.php'; + $multicall_args = array(); + $num_method_calls = 10; + for ($i = 0; $i < $num_method_calls; $i++) { + $struct = array('i' => $i); + $multicall_args[] = array('methodName' => 'validator1.echoStructTest', 'params' => array($struct)); + } + // Test limits of 1, 5, 9, 13. + for ($limit = 1; $limit < $num_method_calls + 4; $limit += 4) { + variable_set('xmlrpc_multicall_duplicate_method_limit', $limit); + $results = xmlrpc($url, array('system.multicall' => array($multicall_args))); + $this->assertEqual($num_method_calls, count($results)); + for ($i = 0; $i < min($limit, $num_method_calls); $i++) { + $x = array_shift($results); + $this->assertTrue(empty($x->is_error), "Result $i is not an error"); + $this->assertEqual($multicall_args[$i]['params'][0], $x); + } + for (; $i < $num_method_calls; $i++) { + $x = array_shift($results); + $this->assertFalse(empty($x->is_error), "Result $i is an error"); + $this->assertEqual(-156579, $x->code); + } + } + variable_set('xmlrpc_multicall_duplicate_method_limit', -1); + $results = xmlrpc($url, array('system.multicall' => array($multicall_args))); + $this->assertEqual($num_method_calls, count($results)); + foreach ($results as $i => $x) { + $this->assertTrue(empty($x->is_error), "Result $i is not an error"); + } + } } diff --git a/docroot/modules/simpletest/tests/xmlrpc_test.info b/docroot/modules/simpletest/tests/xmlrpc_test.info index e5121a1d..857b1a51 100644 --- a/docroot/modules/simpletest/tests/xmlrpc_test.info +++ b/docroot/modules/simpletest/tests/xmlrpc_test.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/statistics/statistics.info b/docroot/modules/statistics/statistics.info index 3b078364..25a6ecc2 100644 --- a/docroot/modules/statistics/statistics.info +++ b/docroot/modules/statistics/statistics.info @@ -6,8 +6,8 @@ core = 7.x files[] = statistics.test configure = admin/config/system/statistics -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/syslog/syslog.info b/docroot/modules/syslog/syslog.info index 339e865a..39afcb72 100644 --- a/docroot/modules/syslog/syslog.info +++ b/docroot/modules/syslog/syslog.info @@ -6,8 +6,8 @@ core = 7.x files[] = syslog.test configure = admin/config/development/logging -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/system/system.admin.inc b/docroot/modules/system/system.admin.inc index 0f525c6c..16c40d4d 100644 --- a/docroot/modules/system/system.admin.inc +++ b/docroot/modules/system/system.admin.inc @@ -2202,6 +2202,11 @@ function system_add_date_format_type_form_submit($form, &$form_state) { * Return the date for a given format string via Ajax. */ function system_date_time_lookup() { + // This callback is protected with a CSRF token because user input from the + // query string is reflected in the output. + if (!isset($_GET['token']) || !drupal_valid_token($_GET['token'], 'admin/config/regional/date-time/formats/lookup')) { + return MENU_ACCESS_DENIED; + } $result = format_date(REQUEST_TIME, 'custom', $_GET['format']); drupal_json_output($result); } @@ -2875,13 +2880,14 @@ function system_date_time_formats() { * Allow users to add additional date formats. */ function system_configure_date_formats_form($form, &$form_state, $dfid = 0) { + $ajax_path = 'admin/config/regional/date-time/formats/lookup'; $js_settings = array( 'type' => 'setting', 'data' => array( 'dateTime' => array( 'date-format' => array( 'text' => t('Displayed as'), - 'lookup' => url('admin/config/regional/date-time/formats/lookup'), + 'lookup' => url($ajax_path, array('query' => array('token' => drupal_get_token($ajax_path)))), ), ), ), diff --git a/docroot/modules/system/system.info b/docroot/modules/system/system.info index e887dd8f..850f7cee 100644 --- a/docroot/modules/system/system.info +++ b/docroot/modules/system/system.info @@ -12,8 +12,8 @@ files[] = system.test required = TRUE configure = admin/config/system -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/system/system.js b/docroot/modules/system/system.js index 910fb5d3..c0e76d38 100644 --- a/docroot/modules/system/system.js +++ b/docroot/modules/system/system.js @@ -105,7 +105,7 @@ Drupal.behaviors.dateTime = { // Attach keyup handler to custom format inputs. $('input' + source, context).once('date-time').keyup(function () { var input = $(this); - var url = fieldSettings.lookup + (/\?q=/.test(fieldSettings.lookup) ? '&format=' : '?format=') + encodeURIComponent(input.val()); + var url = fieldSettings.lookup + (/\?/.test(fieldSettings.lookup) ? '&format=' : '?format=') + encodeURIComponent(input.val()); $.getJSON(url, function (data) { $(suffix).empty().append(' ' + fieldSettings.text + ': ' + data + ''); }); diff --git a/docroot/modules/system/system.module b/docroot/modules/system/system.module index 39de758e..362bdd44 100644 --- a/docroot/modules/system/system.module +++ b/docroot/modules/system/system.module @@ -3056,8 +3056,20 @@ function system_cron() { } } - $core = array('cache', 'cache_path', 'cache_filter', 'cache_page', 'cache_form', 'cache_menu'); - $cache_tables = array_merge(module_invoke_all('flush_caches'), $core); + // Delete expired cache entries. + // Avoid invoking hook_flush_cashes() on every cron run because some modules + // use this hook to perform expensive rebuilding operations (which are only + // designed to happen on full cache clears), rather than just returning a + // list of cache tables to be cleared. + $cache_object = cache_get('system_cache_tables'); + if (empty($cache_object)) { + $core = array('cache', 'cache_path', 'cache_filter', 'cache_page', 'cache_form', 'cache_menu'); + $cache_tables = array_merge(module_invoke_all('flush_caches'), $core); + cache_set('system_cache_tables', $cache_tables); + } + else { + $cache_tables = $cache_object->data; + } foreach ($cache_tables as $table) { cache_clear_all(NULL, $table); } diff --git a/docroot/modules/system/system.tar.inc b/docroot/modules/system/system.tar.inc index 32bf7f06..86e4e3de 100644 --- a/docroot/modules/system/system.tar.inc +++ b/docroot/modules/system/system.tar.inc @@ -30,81 +30,148 @@ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * - * @category File_Formats - * @package Archive_Tar - * @author Vincent Blavet - * @copyright 1997-2008 The Authors - * @license http://www.opensource.org/licenses/bsd-license.php New BSD License - * @version CVS: Id: Tar.php,v 1.43 2008/10/30 17:58:42 dufuz Exp - * @link http://pear.php.net/package/Archive_Tar + * @category File_Formats + * @package Archive_Tar + * @author Vincent Blavet + * @copyright 1997-2010 The Authors + * @license http://www.opensource.org/licenses/bsd-license.php New BSD License + * @version CVS: $Id$ + * @link http://pear.php.net/package/Archive_Tar + */ + + /** + * Note on Drupal 8 porting. + * This file origin is Tar.php, release 1.4.0 (stable) with some code + * from PEAR.php, release 1.9.5 (stable) both at http://pear.php.net. + * To simplify future porting from pear of this file, you should not + * do cosmetic or other non significant changes to this file. + * The following changes have been done: + * Added namespace Drupal\Core\Archiver. + * Removed require_once 'PEAR.php'. + * Added defintion of OS_WINDOWS taken from PEAR.php. + * Renamed class to ArchiveTar. + * Removed extends PEAR from class. + * Removed call parent:: __construct(). + * Changed PEAR::loadExtension($extname) to this->loadExtension($extname). + * Added function loadExtension() taken from PEAR.php. + * Changed all calls of unlink() to drupal_unlink(). + * Changed $this->error_object = &$this->raiseError($p_message) + * to throw new \Exception($p_message). + */ + + /** + * Note on Drupal 7 backporting from Drupal 8. + * File origin is core/lib/Drupal/Core/Archiver/ArchiveTar.php from Drupal 8. + * The following changes have been done: + * Removed namespace Drupal\Core\Archiver. + * Renamed class to Archive_Tar. + * Changed \Exception to Exception. */ -//require_once 'PEAR.php'; -// -// -define ('ARCHIVE_TAR_ATT_SEPARATOR', 90001); -define ('ARCHIVE_TAR_END_BLOCK', pack("a512", '')); + +// Drupal removal require_once 'PEAR.php'. + +// Drupal addition OS_WINDOWS as defined in PEAR.php. +if (substr(PHP_OS, 0, 3) == 'WIN') { + define('OS_WINDOWS', true); +} else { + define('OS_WINDOWS', false); +} + +define('ARCHIVE_TAR_ATT_SEPARATOR', 90001); +define('ARCHIVE_TAR_END_BLOCK', pack("a512", '')); + +if (!function_exists('gzopen') && function_exists('gzopen64')) { + function gzopen($filename, $mode, $use_include_path = 0) + { + return gzopen64($filename, $mode, $use_include_path); + } +} + +if (!function_exists('gztell') && function_exists('gztell64')) { + function gztell($zp) + { + return gztell64($zp); + } +} + +if (!function_exists('gzseek') && function_exists('gzseek64')) { + function gzseek($zp, $offset, $whence = SEEK_SET) + { + return gzseek64($zp, $offset, $whence); + } +} /** -* Creates a (compressed) Tar archive -* -* @author Vincent Blavet -* @version Revision: 1.43 -* @license http://www.opensource.org/licenses/bsd-license.php New BSD License -* @package Archive_Tar -*/ -class Archive_Tar // extends PEAR + * Creates a (compressed) Tar archive + * + * @package Archive_Tar + * @author Vincent Blavet + * @license http://www.opensource.org/licenses/bsd-license.php New BSD License + * @version $Revision$ + */ +// Drupal change class Archive_Tar extends PEAR. +class Archive_Tar { /** - * @var string Name of the Tar - */ - var $_tarname=''; + * @var string Name of the Tar + */ + public $_tarname = ''; /** - * @var boolean if true, the Tar file will be gzipped - */ - var $_compress=false; + * @var boolean if true, the Tar file will be gzipped + */ + public $_compress = false; /** - * @var string Type of compression : 'none', 'gz' or 'bz2' - */ - var $_compress_type='none'; + * @var string Type of compression : 'none', 'gz', 'bz2' or 'lzma2' + */ + public $_compress_type = 'none'; /** - * @var string Explode separator - */ - var $_separator=' '; + * @var string Explode separator + */ + public $_separator = ' '; /** - * @var file descriptor - */ - var $_file=0; + * @var file descriptor + */ + public $_file = 0; /** - * @var string Local Tar name of a remote Tar (http:// or ftp://) - */ - var $_temp_tarname=''; + * @var string Local Tar name of a remote Tar (http:// or ftp://) + */ + public $_temp_tarname = ''; - // {{{ constructor /** - * Archive_Tar Class constructor. This flavour of the constructor only - * declare a new Archive_Tar object, identifying it by the name of the - * tar file. - * If the compress argument is set the tar will be read or created as a - * gzip or bz2 compressed TAR file. - * - * @param string $p_tarname The name of the tar archive to create - * @param string $p_compress can be null, 'gz' or 'bz2'. This - * parameter indicates if gzip or bz2 compression - * is required. For compatibility reason the - * boolean value 'true' means 'gz'. - * @access public - */ -// function Archive_Tar($p_tarname, $p_compress = null) - function __construct($p_tarname, $p_compress = null) + * @var string regular expression for ignoring files or directories + */ + public $_ignore_regexp = ''; + + /** + * @var object PEAR_Error object + */ + public $error_object = null; + + /** + * Archive_Tar Class constructor. This flavour of the constructor only + * declare a new Archive_Tar object, identifying it by the name of the + * tar file. + * If the compress argument is set the tar will be read or created as a + * gzip or bz2 compressed TAR file. + * + * @param string $p_tarname The name of the tar archive to create + * @param string $p_compress can be null, 'gz', 'bz2' or 'lzma2'. This + * parameter indicates if gzip, bz2 or lzma2 compression + * is required. For compatibility reason the + * boolean value 'true' means 'gz'. + * + * @return bool + */ + public function __construct($p_tarname, $p_compress = null) { -// $this->PEAR(); + // Drupal removal parent::__construct(). + $this->_compress = false; $this->_compress_type = 'none'; if (($p_compress === null) || ($p_compress == '')) { @@ -116,10 +183,13 @@ class Archive_Tar // extends PEAR if ($data == "\37\213") { $this->_compress = true; $this->_compress_type = 'gz'; - // No sure it's enought for a magic code .... + // No sure it's enought for a magic code .... } elseif ($data == "BZ") { $this->_compress = true; $this->_compress_type = 'bz2'; + } elseif (file_get_contents($p_tarname, false, null, 1, 4) == '7zXZ') { + $this->_compress = true; + $this->_compress_type = 'lzma2'; } } } else { @@ -129,151 +199,177 @@ class Archive_Tar // extends PEAR $this->_compress = true; $this->_compress_type = 'gz'; } elseif ((substr($p_tarname, -3) == 'bz2') || - (substr($p_tarname, -2) == 'bz')) { + (substr($p_tarname, -2) == 'bz') + ) { $this->_compress = true; $this->_compress_type = 'bz2'; + } else { + if (substr($p_tarname, -2) == 'xz') { + $this->_compress = true; + $this->_compress_type = 'lzma2'; + } } } } else { if (($p_compress === true) || ($p_compress == 'gz')) { $this->_compress = true; $this->_compress_type = 'gz'; - } else if ($p_compress == 'bz2') { - $this->_compress = true; - $this->_compress_type = 'bz2'; } else { - die("Unsupported compression type '$p_compress'\n". - "Supported types are 'gz' and 'bz2'.\n"); - return false; + if ($p_compress == 'bz2') { + $this->_compress = true; + $this->_compress_type = 'bz2'; + } else { + if ($p_compress == 'lzma2') { + $this->_compress = true; + $this->_compress_type = 'lzma2'; + } else { + $this->_error( + "Unsupported compression type '$p_compress'\n" . + "Supported types are 'gz', 'bz2' and 'lzma2'.\n" + ); + return false; + } + } } } $this->_tarname = $p_tarname; - if ($this->_compress) { // assert zlib or bz2 extension support - if ($this->_compress_type == 'gz') + if ($this->_compress) { // assert zlib or bz2 or xz extension support + if ($this->_compress_type == 'gz') { $extname = 'zlib'; - else if ($this->_compress_type == 'bz2') - $extname = 'bz2'; + } else { + if ($this->_compress_type == 'bz2') { + $extname = 'bz2'; + } else { + if ($this->_compress_type == 'lzma2') { + $extname = 'xz'; + } + } + } if (!extension_loaded($extname)) { -// PEAR::loadExtension($extname); + // Drupal change PEAR::loadExtension($extname). $this->loadExtension($extname); } if (!extension_loaded($extname)) { - die("The extension '$extname' couldn't be found.\n". - "Please make sure your version of PHP was built ". - "with '$extname' support.\n"); + $this->_error( + "The extension '$extname' couldn't be found.\n" . + "Please make sure your version of PHP was built " . + "with '$extname' support.\n" + ); return false; } } } - // }}} + public function __destruct() + { + $this->_close(); + // ----- Look for a local copy to delete + if ($this->_temp_tarname != '') { + @drupal_unlink($this->_temp_tarname); + } + } + + // Drupal addition from PEAR.php. /** * OS independent PHP extension load. Remember to take care * on the correct extension name for case sensitive OSes. - * The function is the copy of PEAR::loadExtension(). * * @param string $ext The extension name * @return bool Success or not on the dl() call */ function loadExtension($ext) { - if (!extension_loaded($ext)) { - // if either returns true dl() will produce a FATAL error, stop that - if ((ini_get('enable_dl') != 1) || (ini_get('safe_mode') == 1)) { - return false; - } + if (extension_loaded($ext)) { + return true; + } - if (OS_WINDOWS) { - $suffix = '.dll'; - } elseif (PHP_OS == 'HP-UX') { - $suffix = '.sl'; - } elseif (PHP_OS == 'AIX') { - $suffix = '.a'; - } elseif (PHP_OS == 'OSX') { - $suffix = '.bundle'; - } else { - $suffix = '.so'; - } + // if either returns true dl() will produce a FATAL error, stop that + if ( + function_exists('dl') === false || + ini_get('enable_dl') != 1 || + ini_get('safe_mode') == 1 + ) { + return false; + } - return @dl('php_'.$ext.$suffix) || @dl($ext.$suffix); + if (OS_WINDOWS) { + $suffix = '.dll'; + } elseif (PHP_OS == 'HP-UX') { + $suffix = '.sl'; + } elseif (PHP_OS == 'AIX') { + $suffix = '.a'; + } elseif (PHP_OS == 'OSX') { + $suffix = '.bundle'; + } else { + $suffix = '.so'; } - return true; + return @dl('php_'.$ext.$suffix) || @dl($ext.$suffix); } - // {{{ destructor -// function _Archive_Tar() - function __destruct() - { - $this->_close(); - // ----- Look for a local copy to delete - if ($this->_temp_tarname != '') - @drupal_unlink($this->_temp_tarname); -// $this->_PEAR(); - } - // }}} - - // {{{ create() /** - * This method creates the archive file and add the files / directories - * that are listed in $p_filelist. - * If a file with the same name exist and is writable, it is replaced - * by the new tar. - * The method return false and a PEAR error text. - * The $p_filelist parameter can be an array of string, each string - * representing a filename or a directory name with their path if - * needed. It can also be a single string with names separated by a - * single blank. - * For each directory added in the archive, the files and - * sub-directories are also added. - * See also createModify() method for more details. - * - * @param array $p_filelist An array of filenames and directory names, or a - * single string with names separated by a single - * blank space. - * @return true on success, false on error. - * @see createModify() - * @access public - */ - function create($p_filelist) + * This method creates the archive file and add the files / directories + * that are listed in $p_filelist. + * If a file with the same name exist and is writable, it is replaced + * by the new tar. + * The method return false and a PEAR error text. + * The $p_filelist parameter can be an array of string, each string + * representing a filename or a directory name with their path if + * needed. It can also be a single string with names separated by a + * single blank. + * For each directory added in the archive, the files and + * sub-directories are also added. + * See also createModify() method for more details. + * + * @param array $p_filelist An array of filenames and directory names, or a + * single string with names separated by a single + * blank space. + * + * @return true on success, false on error. + * @see createModify() + */ + public function create($p_filelist) { return $this->createModify($p_filelist, '', ''); } - // }}} - // {{{ add() /** - * This method add the files / directories that are listed in $p_filelist in - * the archive. If the archive does not exist it is created. - * The method return false and a PEAR error text. - * The files and directories listed are only added at the end of the archive, - * even if a file with the same name is already archived. - * See also createModify() method for more details. - * - * @param array $p_filelist An array of filenames and directory names, or a - * single string with names separated by a single - * blank space. - * @return true on success, false on error. - * @see createModify() - * @access public - */ - function add($p_filelist) + * This method add the files / directories that are listed in $p_filelist in + * the archive. If the archive does not exist it is created. + * The method return false and a PEAR error text. + * The files and directories listed are only added at the end of the archive, + * even if a file with the same name is already archived. + * See also createModify() method for more details. + * + * @param array $p_filelist An array of filenames and directory names, or a + * single string with names separated by a single + * blank space. + * + * @return true on success, false on error. + * @see createModify() + * @access public + */ + public function add($p_filelist) { return $this->addModify($p_filelist, '', ''); } - // }}} - // {{{ extract() - function extract($p_path='') + /** + * @param string $p_path + * @param bool $p_preserve + * @return bool + */ + public function extract($p_path = '', $p_preserve = false) { - return $this->extractModify($p_path, ''); + return $this->extractModify($p_path, '', $p_preserve); } - // }}} - // {{{ listContent() - function listContent() + /** + * @return array|int + */ + public function listContent() { $v_list_detail = array(); @@ -287,57 +383,56 @@ class Archive_Tar // extends PEAR return $v_list_detail; } - // }}} - // {{{ createModify() /** - * This method creates the archive file and add the files / directories - * that are listed in $p_filelist. - * If the file already exists and is writable, it is replaced by the - * new tar. It is a create and not an add. If the file exists and is - * read-only or is a directory it is not replaced. The method return - * false and a PEAR error text. - * The $p_filelist parameter can be an array of string, each string - * representing a filename or a directory name with their path if - * needed. It can also be a single string with names separated by a - * single blank. - * The path indicated in $p_remove_dir will be removed from the - * memorized path of each file / directory listed when this path - * exists. By default nothing is removed (empty path '') - * The path indicated in $p_add_dir will be added at the beginning of - * the memorized path of each file / directory listed. However it can - * be set to empty ''. The adding of a path is done after the removing - * of path. - * The path add/remove ability enables the user to prepare an archive - * for extraction in a different path than the origin files are. - * See also addModify() method for file adding properties. - * - * @param array $p_filelist An array of filenames and directory names, - * or a single string with names separated by - * a single blank space. - * @param string $p_add_dir A string which contains a path to be added - * to the memorized path of each element in - * the list. - * @param string $p_remove_dir A string which contains a path to be - * removed from the memorized path of each - * element in the list, when relevant. - * @return boolean true on success, false on error. - * @access public - * @see addModify() - */ - function createModify($p_filelist, $p_add_dir, $p_remove_dir='') + * This method creates the archive file and add the files / directories + * that are listed in $p_filelist. + * If the file already exists and is writable, it is replaced by the + * new tar. It is a create and not an add. If the file exists and is + * read-only or is a directory it is not replaced. The method return + * false and a PEAR error text. + * The $p_filelist parameter can be an array of string, each string + * representing a filename or a directory name with their path if + * needed. It can also be a single string with names separated by a + * single blank. + * The path indicated in $p_remove_dir will be removed from the + * memorized path of each file / directory listed when this path + * exists. By default nothing is removed (empty path '') + * The path indicated in $p_add_dir will be added at the beginning of + * the memorized path of each file / directory listed. However it can + * be set to empty ''. The adding of a path is done after the removing + * of path. + * The path add/remove ability enables the user to prepare an archive + * for extraction in a different path than the origin files are. + * See also addModify() method for file adding properties. + * + * @param array $p_filelist An array of filenames and directory names, + * or a single string with names separated by + * a single blank space. + * @param string $p_add_dir A string which contains a path to be added + * to the memorized path of each element in + * the list. + * @param string $p_remove_dir A string which contains a path to be + * removed from the memorized path of each + * element in the list, when relevant. + * + * @return boolean true on success, false on error. + * @see addModify() + */ + public function createModify($p_filelist, $p_add_dir, $p_remove_dir = '') { $v_result = true; - if (!$this->_openWrite()) + if (!$this->_openWrite()) { return false; + } if ($p_filelist != '') { - if (is_array($p_filelist)) + if (is_array($p_filelist)) { $v_list = $p_filelist; - elseif (is_string($p_filelist)) + } elseif (is_string($p_filelist)) { $v_list = explode($this->_separator, $p_filelist); - else { + } else { $this->_cleanFile(); $this->_error('Invalid file list'); return false; @@ -349,67 +444,69 @@ class Archive_Tar // extends PEAR if ($v_result) { $this->_writeFooter(); $this->_close(); - } else + } else { $this->_cleanFile(); + } return $v_result; } - // }}} - // {{{ addModify() /** - * This method add the files / directories listed in $p_filelist at the - * end of the existing archive. If the archive does not yet exists it - * is created. - * The $p_filelist parameter can be an array of string, each string - * representing a filename or a directory name with their path if - * needed. It can also be a single string with names separated by a - * single blank. - * The path indicated in $p_remove_dir will be removed from the - * memorized path of each file / directory listed when this path - * exists. By default nothing is removed (empty path '') - * The path indicated in $p_add_dir will be added at the beginning of - * the memorized path of each file / directory listed. However it can - * be set to empty ''. The adding of a path is done after the removing - * of path. - * The path add/remove ability enables the user to prepare an archive - * for extraction in a different path than the origin files are. - * If a file/dir is already in the archive it will only be added at the - * end of the archive. There is no update of the existing archived - * file/dir. However while extracting the archive, the last file will - * replace the first one. This results in a none optimization of the - * archive size. - * If a file/dir does not exist the file/dir is ignored. However an - * error text is send to PEAR error. - * If a file/dir is not readable the file/dir is ignored. However an - * error text is send to PEAR error. - * - * @param array $p_filelist An array of filenames and directory - * names, or a single string with names - * separated by a single blank space. - * @param string $p_add_dir A string which contains a path to be - * added to the memorized path of each - * element in the list. - * @param string $p_remove_dir A string which contains a path to be - * removed from the memorized path of - * each element in the list, when - * relevant. - * @return true on success, false on error. - * @access public - */ - function addModify($p_filelist, $p_add_dir, $p_remove_dir='') + * This method add the files / directories listed in $p_filelist at the + * end of the existing archive. If the archive does not yet exists it + * is created. + * The $p_filelist parameter can be an array of string, each string + * representing a filename or a directory name with their path if + * needed. It can also be a single string with names separated by a + * single blank. + * The path indicated in $p_remove_dir will be removed from the + * memorized path of each file / directory listed when this path + * exists. By default nothing is removed (empty path '') + * The path indicated in $p_add_dir will be added at the beginning of + * the memorized path of each file / directory listed. However it can + * be set to empty ''. The adding of a path is done after the removing + * of path. + * The path add/remove ability enables the user to prepare an archive + * for extraction in a different path than the origin files are. + * If a file/dir is already in the archive it will only be added at the + * end of the archive. There is no update of the existing archived + * file/dir. However while extracting the archive, the last file will + * replace the first one. This results in a none optimization of the + * archive size. + * If a file/dir does not exist the file/dir is ignored. However an + * error text is send to PEAR error. + * If a file/dir is not readable the file/dir is ignored. However an + * error text is send to PEAR error. + * + * @param array $p_filelist An array of filenames and directory + * names, or a single string with names + * separated by a single blank space. + * @param string $p_add_dir A string which contains a path to be + * added to the memorized path of each + * element in the list. + * @param string $p_remove_dir A string which contains a path to be + * removed from the memorized path of + * each element in the list, when + * relevant. + * + * @return true on success, false on error. + */ + public function addModify($p_filelist, $p_add_dir, $p_remove_dir = '') { $v_result = true; - if (!$this->_isArchive()) - $v_result = $this->createModify($p_filelist, $p_add_dir, - $p_remove_dir); - else { - if (is_array($p_filelist)) + if (!$this->_isArchive()) { + $v_result = $this->createModify( + $p_filelist, + $p_add_dir, + $p_remove_dir + ); + } else { + if (is_array($p_filelist)) { $v_list = $p_filelist; - elseif (is_string($p_filelist)) + } elseif (is_string($p_filelist)) { $v_list = explode($this->_separator, $p_filelist); - else { + } else { $this->_error('Invalid file list'); return false; } @@ -419,24 +516,41 @@ class Archive_Tar // extends PEAR return $v_result; } - // }}} - // {{{ addString() /** - * This method add a single string as a file at the - * end of the existing archive. If the archive does not yet exists it - * is created. - * - * @param string $p_filename A string which contains the full - * filename path that will be associated - * with the string. - * @param string $p_string The content of the file added in - * the archive. - * @return true on success, false on error. - * @access public - */ - function addString($p_filename, $p_string) + * This method add a single string as a file at the + * end of the existing archive. If the archive does not yet exists it + * is created. + * + * @param string $p_filename A string which contains the full + * filename path that will be associated + * with the string. + * @param string $p_string The content of the file added in + * the archive. + * @param bool|int $p_datetime A custom date/time (unix timestamp) + * for the file (optional). + * @param array $p_params An array of optional params: + * stamp => the datetime (replaces + * datetime above if it exists) + * mode => the permissions on the + * file (600 by default) + * type => is this a link? See the + * tar specification for details. + * (default = regular file) + * uid => the user ID of the file + * (default = 0 = root) + * gid => the group ID of the file + * (default = 0 = root) + * + * @return true on success, false on error. + */ + public function addString($p_filename, $p_string, $p_datetime = false, $p_params = array()) { + $p_stamp = @$p_params["stamp"] ? $p_params["stamp"] : ($p_datetime ? $p_datetime : time()); + $p_mode = @$p_params["mode"] ? $p_params["mode"] : 0600; + $p_type = @$p_params["type"] ? $p_params["type"] : ""; + $p_uid = @$p_params["uid"] ? $p_params["uid"] : ""; + $p_gid = @$p_params["gid"] ? $p_params["gid"] : ""; $v_result = true; if (!$this->_isArchive()) { @@ -446,11 +560,12 @@ class Archive_Tar // extends PEAR $this->_close(); } - if (!$this->_openAppend()) + if (!$this->_openAppend()) { return false; + } // Need to check the get back to the temporary file ? .... - $v_result = $this->_addString($p_filename, $p_string); + $v_result = $this->_addString($p_filename, $p_string, $p_datetime, $p_params); $this->_writeFooter(); @@ -458,131 +573,138 @@ class Archive_Tar // extends PEAR return $v_result; } - // }}} - // {{{ extractModify() /** - * This method extract all the content of the archive in the directory - * indicated by $p_path. When relevant the memorized path of the - * files/dir can be modified by removing the $p_remove_path path at the - * beginning of the file/dir path. - * While extracting a file, if the directory path does not exists it is - * created. - * While extracting a file, if the file already exists it is replaced - * without looking for last modification date. - * While extracting a file, if the file already exists and is write - * protected, the extraction is aborted. - * While extracting a file, if a directory with the same name already - * exists, the extraction is aborted. - * While extracting a directory, if a file with the same name already - * exists, the extraction is aborted. - * While extracting a file/directory if the destination directory exist - * and is write protected, or does not exist but can not be created, - * the extraction is aborted. - * If after extraction an extracted file does not show the correct - * stored file size, the extraction is aborted. - * When the extraction is aborted, a PEAR error text is set and false - * is returned. However the result can be a partial extraction that may - * need to be manually cleaned. - * - * @param string $p_path The path of the directory where the - * files/dir need to by extracted. - * @param string $p_remove_path Part of the memorized path that can be - * removed if present at the beginning of - * the file/dir path. - * @return boolean true on success, false on error. - * @access public - * @see extractList() - */ - function extractModify($p_path, $p_remove_path) + * This method extract all the content of the archive in the directory + * indicated by $p_path. When relevant the memorized path of the + * files/dir can be modified by removing the $p_remove_path path at the + * beginning of the file/dir path. + * While extracting a file, if the directory path does not exists it is + * created. + * While extracting a file, if the file already exists it is replaced + * without looking for last modification date. + * While extracting a file, if the file already exists and is write + * protected, the extraction is aborted. + * While extracting a file, if a directory with the same name already + * exists, the extraction is aborted. + * While extracting a directory, if a file with the same name already + * exists, the extraction is aborted. + * While extracting a file/directory if the destination directory exist + * and is write protected, or does not exist but can not be created, + * the extraction is aborted. + * If after extraction an extracted file does not show the correct + * stored file size, the extraction is aborted. + * When the extraction is aborted, a PEAR error text is set and false + * is returned. However the result can be a partial extraction that may + * need to be manually cleaned. + * + * @param string $p_path The path of the directory where the + * files/dir need to by extracted. + * @param string $p_remove_path Part of the memorized path that can be + * removed if present at the beginning of + * the file/dir path. + * @param boolean $p_preserve Preserve user/group ownership of files + * + * @return boolean true on success, false on error. + * @see extractList() + */ + public function extractModify($p_path, $p_remove_path, $p_preserve = false) { $v_result = true; $v_list_detail = array(); if ($v_result = $this->_openRead()) { - $v_result = $this->_extractList($p_path, $v_list_detail, - "complete", 0, $p_remove_path); + $v_result = $this->_extractList( + $p_path, + $v_list_detail, + "complete", + 0, + $p_remove_path, + $p_preserve + ); $this->_close(); } return $v_result; } - // }}} - // {{{ extractInString() /** - * This method extract from the archive one file identified by $p_filename. - * The return value is a string with the file content, or NULL on error. - * @param string $p_filename The path of the file to extract in a string. - * @return a string with the file content or NULL. - * @access public - */ - function extractInString($p_filename) + * This method extract from the archive one file identified by $p_filename. + * The return value is a string with the file content, or NULL on error. + * + * @param string $p_filename The path of the file to extract in a string. + * + * @return a string with the file content or NULL. + */ + public function extractInString($p_filename) { if ($this->_openRead()) { $v_result = $this->_extractInString($p_filename); $this->_close(); } else { - $v_result = NULL; + $v_result = null; } return $v_result; } - // }}} - // {{{ extractList() /** - * This method extract from the archive only the files indicated in the - * $p_filelist. These files are extracted in the current directory or - * in the directory indicated by the optional $p_path parameter. - * If indicated the $p_remove_path can be used in the same way as it is - * used in extractModify() method. - * @param array $p_filelist An array of filenames and directory names, - * or a single string with names separated - * by a single blank space. - * @param string $p_path The path of the directory where the - * files/dir need to by extracted. - * @param string $p_remove_path Part of the memorized path that can be - * removed if present at the beginning of - * the file/dir path. - * @return true on success, false on error. - * @access public - * @see extractModify() - */ - function extractList($p_filelist, $p_path='', $p_remove_path='') + * This method extract from the archive only the files indicated in the + * $p_filelist. These files are extracted in the current directory or + * in the directory indicated by the optional $p_path parameter. + * If indicated the $p_remove_path can be used in the same way as it is + * used in extractModify() method. + * + * @param array $p_filelist An array of filenames and directory names, + * or a single string with names separated + * by a single blank space. + * @param string $p_path The path of the directory where the + * files/dir need to by extracted. + * @param string $p_remove_path Part of the memorized path that can be + * removed if present at the beginning of + * the file/dir path. + * @param boolean $p_preserve Preserve user/group ownership of files + * + * @return true on success, false on error. + * @see extractModify() + */ + public function extractList($p_filelist, $p_path = '', $p_remove_path = '', $p_preserve = false) { $v_result = true; $v_list_detail = array(); - if (is_array($p_filelist)) + if (is_array($p_filelist)) { $v_list = $p_filelist; - elseif (is_string($p_filelist)) + } elseif (is_string($p_filelist)) { $v_list = explode($this->_separator, $p_filelist); - else { + } else { $this->_error('Invalid string list'); return false; } if ($v_result = $this->_openRead()) { - $v_result = $this->_extractList($p_path, $v_list_detail, "partial", - $v_list, $p_remove_path); + $v_result = $this->_extractList( + $p_path, + $v_list_detail, + "partial", + $v_list, + $p_remove_path, + $p_preserve + ); $this->_close(); } return $v_result; } - // }}} - // {{{ setAttribute() /** - * This method set specific attributes of the archive. It uses a variable - * list of parameters, in the format attribute code + attribute values : - * $arch->setAttribute(ARCHIVE_TAR_ATT_SEPARATOR, ','); - * @param mixed $argv variable list of attributes and values - * @return true on success, false on error. - * @access public - */ - function setAttribute() + * This method set specific attributes of the archive. It uses a variable + * list of parameters, in the format attribute code + attribute values : + * $arch->setAttribute(ARCHIVE_TAR_ATT_SEPARATOR, ','); + * + * @return true on success, false on error. + */ + public function setAttribute() { $v_result = true; @@ -592,30 +714,32 @@ class Archive_Tar // extends PEAR } // ----- Get the arguments - $v_att_list = &func_get_args(); + $v_att_list = & func_get_args(); // ----- Read the attributes - $i=0; - while ($i<$v_size) { + $i = 0; + while ($i < $v_size) { // ----- Look for next option switch ($v_att_list[$i]) { // ----- Look for options that request a string value case ARCHIVE_TAR_ATT_SEPARATOR : // ----- Check the number of parameters - if (($i+1) >= $v_size) { - $this->_error('Invalid number of parameters for ' - .'attribute ARCHIVE_TAR_ATT_SEPARATOR'); + if (($i + 1) >= $v_size) { + $this->_error( + 'Invalid number of parameters for ' + . 'attribute ARCHIVE_TAR_ATT_SEPARATOR' + ); return false; } // ----- Get the value - $this->_separator = $v_att_list[$i+1]; + $this->_separator = $v_att_list[$i + 1]; $i++; - break; + break; default : - $this->_error('Unknow attribute code '.$v_att_list[$i].''); + $this->_error('Unknown attribute code ' . $v_att_list[$i] . ''); return false; } @@ -625,151 +749,248 @@ class Archive_Tar // extends PEAR return $v_result; } - // }}} - // {{{ _error() - function _error($p_message) + /** + * This method sets the regular expression for ignoring files and directories + * at import, for example: + * $arch->setIgnoreRegexp("#CVS|\.svn#"); + * + * @param string $regexp regular expression defining which files or directories to ignore + */ + public function setIgnoreRegexp($regexp) + { + $this->_ignore_regexp = $regexp; + } + + /** + * This method sets the regular expression for ignoring all files and directories + * matching the filenames in the array list at import, for example: + * $arch->setIgnoreList(array('CVS', '.svn', 'bin/tool')); + * + * @param array $list a list of file or directory names to ignore + * + * @access public + */ + public function setIgnoreList($list) + { + $regexp = str_replace(array('#', '.', '^', '$'), array('\#', '\.', '\^', '\$'), $list); + $regexp = '#/' . join('$|/', $list) . '#'; + $this->setIgnoreRegexp($regexp); + } + + /** + * @param string $p_message + */ + public function _error($p_message) { - // ----- To be completed -// $this->raiseError($p_message); + // Drupal change $this->error_object = $this->raiseError($p_message). throw new Exception($p_message); } - // }}} - // {{{ _warning() - function _warning($p_message) + /** + * @param string $p_message + */ + public function _warning($p_message) { - // ----- To be completed -// $this->raiseError($p_message); + // Drupal change $this->error_object = $this->raiseError($p_message). throw new Exception($p_message); } - // }}} - // {{{ _isArchive() - function _isArchive($p_filename=NULL) + /** + * @param string $p_filename + * @return bool + */ + public function _isArchive($p_filename = null) { - if ($p_filename == NULL) { + if ($p_filename == null) { $p_filename = $this->_tarname; } clearstatcache(); return @is_file($p_filename) && !@is_link($p_filename); } - // }}} - // {{{ _openWrite() - function _openWrite() + /** + * @return bool + */ + public function _openWrite() { - if ($this->_compress_type == 'gz') + if ($this->_compress_type == 'gz' && function_exists('gzopen')) { $this->_file = @gzopen($this->_tarname, "wb9"); - else if ($this->_compress_type == 'bz2') - $this->_file = @bzopen($this->_tarname, "w"); - else if ($this->_compress_type == 'none') - $this->_file = @fopen($this->_tarname, "wb"); - else - $this->_error('Unknown or missing compression type (' - .$this->_compress_type.')'); + } else { + if ($this->_compress_type == 'bz2' && function_exists('bzopen')) { + $this->_file = @bzopen($this->_tarname, "w"); + } else { + if ($this->_compress_type == 'lzma2' && function_exists('xzopen')) { + $this->_file = @xzopen($this->_tarname, 'w'); + } else { + if ($this->_compress_type == 'none') { + $this->_file = @fopen($this->_tarname, "wb"); + } else { + $this->_error( + 'Unknown or missing compression type (' + . $this->_compress_type . ')' + ); + return false; + } + } + } + } if ($this->_file == 0) { - $this->_error('Unable to open in write mode \'' - .$this->_tarname.'\''); + $this->_error( + 'Unable to open in write mode \'' + . $this->_tarname . '\'' + ); return false; } return true; } - // }}} - // {{{ _openRead() - function _openRead() + /** + * @return bool + */ + public function _openRead() { if (strtolower(substr($this->_tarname, 0, 7)) == 'http://') { - // ----- Look if a local copy need to be done - if ($this->_temp_tarname == '') { - $this->_temp_tarname = uniqid('tar').'.tmp'; - if (!$v_file_from = @fopen($this->_tarname, 'rb')) { - $this->_error('Unable to open in read mode \'' - .$this->_tarname.'\''); - $this->_temp_tarname = ''; - return false; - } - if (!$v_file_to = @fopen($this->_temp_tarname, 'wb')) { - $this->_error('Unable to open in write mode \'' - .$this->_temp_tarname.'\''); - $this->_temp_tarname = ''; - return false; - } - while ($v_data = @fread($v_file_from, 1024)) - @fwrite($v_file_to, $v_data); - @fclose($v_file_from); - @fclose($v_file_to); - } + // ----- Look if a local copy need to be done + if ($this->_temp_tarname == '') { + $this->_temp_tarname = uniqid('tar') . '.tmp'; + if (!$v_file_from = @fopen($this->_tarname, 'rb')) { + $this->_error( + 'Unable to open in read mode \'' + . $this->_tarname . '\'' + ); + $this->_temp_tarname = ''; + return false; + } + if (!$v_file_to = @fopen($this->_temp_tarname, 'wb')) { + $this->_error( + 'Unable to open in write mode \'' + . $this->_temp_tarname . '\'' + ); + $this->_temp_tarname = ''; + return false; + } + while ($v_data = @fread($v_file_from, 1024)) { + @fwrite($v_file_to, $v_data); + } + @fclose($v_file_from); + @fclose($v_file_to); + } - // ----- File to open if the local copy - $v_filename = $this->_temp_tarname; + // ----- File to open if the local copy + $v_filename = $this->_temp_tarname; + } else { + // ----- File to open if the normal Tar file - } else - // ----- File to open if the normal Tar file - $v_filename = $this->_tarname; + $v_filename = $this->_tarname; + } - if ($this->_compress_type == 'gz') + if ($this->_compress_type == 'gz' && function_exists('gzopen')) { $this->_file = @gzopen($v_filename, "rb"); - else if ($this->_compress_type == 'bz2') - $this->_file = @bzopen($v_filename, "r"); - else if ($this->_compress_type == 'none') - $this->_file = @fopen($v_filename, "rb"); - else - $this->_error('Unknown or missing compression type (' - .$this->_compress_type.')'); + } else { + if ($this->_compress_type == 'bz2' && function_exists('bzopen')) { + $this->_file = @bzopen($v_filename, "r"); + } else { + if ($this->_compress_type == 'lzma2' && function_exists('xzopen')) { + $this->_file = @xzopen($v_filename, "r"); + } else { + if ($this->_compress_type == 'none') { + $this->_file = @fopen($v_filename, "rb"); + } else { + $this->_error( + 'Unknown or missing compression type (' + . $this->_compress_type . ')' + ); + return false; + } + } + } + } if ($this->_file == 0) { - $this->_error('Unable to open in read mode \''.$v_filename.'\''); + $this->_error('Unable to open in read mode \'' . $v_filename . '\''); return false; } return true; } - // }}} - // {{{ _openReadWrite() - function _openReadWrite() + /** + * @return bool + */ + public function _openReadWrite() { - if ($this->_compress_type == 'gz') + if ($this->_compress_type == 'gz') { $this->_file = @gzopen($this->_tarname, "r+b"); - else if ($this->_compress_type == 'bz2') { - $this->_error('Unable to open bz2 in read/write mode \'' - .$this->_tarname.'\' (limitation of bz2 extension)'); - return false; - } else if ($this->_compress_type == 'none') - $this->_file = @fopen($this->_tarname, "r+b"); - else - $this->_error('Unknown or missing compression type (' - .$this->_compress_type.')'); + } else { + if ($this->_compress_type == 'bz2') { + $this->_error( + 'Unable to open bz2 in read/write mode \'' + . $this->_tarname . '\' (limitation of bz2 extension)' + ); + return false; + } else { + if ($this->_compress_type == 'lzma2') { + $this->_error( + 'Unable to open lzma2 in read/write mode \'' + . $this->_tarname . '\' (limitation of lzma2 extension)' + ); + return false; + } else { + if ($this->_compress_type == 'none') { + $this->_file = @fopen($this->_tarname, "r+b"); + } else { + $this->_error( + 'Unknown or missing compression type (' + . $this->_compress_type . ')' + ); + return false; + } + } + } + } if ($this->_file == 0) { - $this->_error('Unable to open in read/write mode \'' - .$this->_tarname.'\''); + $this->_error( + 'Unable to open in read/write mode \'' + . $this->_tarname . '\'' + ); return false; } return true; } - // }}} - // {{{ _close() - function _close() + /** + * @return bool + */ + public function _close() { //if (isset($this->_file)) { if (is_resource($this->_file)) { - if ($this->_compress_type == 'gz') + if ($this->_compress_type == 'gz') { @gzclose($this->_file); - else if ($this->_compress_type == 'bz2') - @bzclose($this->_file); - else if ($this->_compress_type == 'none') - @fclose($this->_file); - else - $this->_error('Unknown or missing compression type (' - .$this->_compress_type.')'); + } else { + if ($this->_compress_type == 'bz2') { + @bzclose($this->_file); + } else { + if ($this->_compress_type == 'lzma2') { + @xzclose($this->_file); + } else { + if ($this->_compress_type == 'none') { + @fclose($this->_file); + } else { + $this->_error( + 'Unknown or missing compression type (' + . $this->_compress_type . ')' + ); + } + } + } + } $this->_file = 0; } @@ -783,10 +1004,11 @@ class Archive_Tar // extends PEAR return true; } - // }}} - // {{{ _cleanFile() - function _cleanFile() + /** + * @return bool + */ + public function _cleanFile() { $this->_close(); @@ -803,296 +1025,419 @@ class Archive_Tar // extends PEAR return true; } - // }}} - // {{{ _writeBlock() - function _writeBlock($p_binary_data, $p_len=null) + /** + * @param mixed $p_binary_data + * @param integer $p_len + * @return bool + */ + public function _writeBlock($p_binary_data, $p_len = null) { - if (is_resource($this->_file)) { - if ($p_len === null) { - if ($this->_compress_type == 'gz') - @gzputs($this->_file, $p_binary_data); - else if ($this->_compress_type == 'bz2') - @bzwrite($this->_file, $p_binary_data); - else if ($this->_compress_type == 'none') - @fputs($this->_file, $p_binary_data); - else - $this->_error('Unknown or missing compression type (' - .$this->_compress_type.')'); - } else { - if ($this->_compress_type == 'gz') - @gzputs($this->_file, $p_binary_data, $p_len); - else if ($this->_compress_type == 'bz2') - @bzwrite($this->_file, $p_binary_data, $p_len); - else if ($this->_compress_type == 'none') - @fputs($this->_file, $p_binary_data, $p_len); - else - $this->_error('Unknown or missing compression type (' - .$this->_compress_type.')'); - - } - } - return true; + if (is_resource($this->_file)) { + if ($p_len === null) { + if ($this->_compress_type == 'gz') { + @gzputs($this->_file, $p_binary_data); + } else { + if ($this->_compress_type == 'bz2') { + @bzwrite($this->_file, $p_binary_data); + } else { + if ($this->_compress_type == 'lzma2') { + @xzwrite($this->_file, $p_binary_data); + } else { + if ($this->_compress_type == 'none') { + @fputs($this->_file, $p_binary_data); + } else { + $this->_error( + 'Unknown or missing compression type (' + . $this->_compress_type . ')' + ); + } + } + } + } + } else { + if ($this->_compress_type == 'gz') { + @gzputs($this->_file, $p_binary_data, $p_len); + } else { + if ($this->_compress_type == 'bz2') { + @bzwrite($this->_file, $p_binary_data, $p_len); + } else { + if ($this->_compress_type == 'lzma2') { + @xzwrite($this->_file, $p_binary_data, $p_len); + } else { + if ($this->_compress_type == 'none') { + @fputs($this->_file, $p_binary_data, $p_len); + } else { + $this->_error( + 'Unknown or missing compression type (' + . $this->_compress_type . ')' + ); + } + } + } + } + } + } + return true; } - // }}} - // {{{ _readBlock() - function _readBlock() + /** + * @return null|string + */ + public function _readBlock() { - $v_block = null; - if (is_resource($this->_file)) { - if ($this->_compress_type == 'gz') - $v_block = @gzread($this->_file, 512); - else if ($this->_compress_type == 'bz2') - $v_block = @bzread($this->_file, 512); - else if ($this->_compress_type == 'none') - $v_block = @fread($this->_file, 512); - else - $this->_error('Unknown or missing compression type (' - .$this->_compress_type.')'); - } - return $v_block; + $v_block = null; + if (is_resource($this->_file)) { + if ($this->_compress_type == 'gz') { + $v_block = @gzread($this->_file, 512); + } else { + if ($this->_compress_type == 'bz2') { + $v_block = @bzread($this->_file, 512); + } else { + if ($this->_compress_type == 'lzma2') { + $v_block = @xzread($this->_file, 512); + } else { + if ($this->_compress_type == 'none') { + $v_block = @fread($this->_file, 512); + } else { + $this->_error( + 'Unknown or missing compression type (' + . $this->_compress_type . ')' + ); + } + } + } + } + } + return $v_block; } - // }}} - // {{{ _jumpBlock() - function _jumpBlock($p_len=null) - { - if (is_resource($this->_file)) { - if ($p_len === null) - $p_len = 1; - - if ($this->_compress_type == 'gz') { - @gzseek($this->_file, gztell($this->_file)+($p_len*512)); - } - else if ($this->_compress_type == 'bz2') { - // ----- Replace missing bztell() and bzseek() - for ($i=0; $i<$p_len; $i++) - $this->_readBlock(); - } else if ($this->_compress_type == 'none') - @fseek($this->_file, ftell($this->_file)+($p_len*512)); - else - $this->_error('Unknown or missing compression type (' - .$this->_compress_type.')'); - - } - return true; - } - // }}} + /** + * @param null $p_len + * @return bool + */ + public function _jumpBlock($p_len = null) + { + if (is_resource($this->_file)) { + if ($p_len === null) { + $p_len = 1; + } + + if ($this->_compress_type == 'gz') { + @gzseek($this->_file, gztell($this->_file) + ($p_len * 512)); + } else { + if ($this->_compress_type == 'bz2') { + // ----- Replace missing bztell() and bzseek() + for ($i = 0; $i < $p_len; $i++) { + $this->_readBlock(); + } + } else { + if ($this->_compress_type == 'lzma2') { + // ----- Replace missing xztell() and xzseek() + for ($i = 0; $i < $p_len; $i++) { + $this->_readBlock(); + } + } else { + if ($this->_compress_type == 'none') { + @fseek($this->_file, $p_len * 512, SEEK_CUR); + } else { + $this->_error( + 'Unknown or missing compression type (' + . $this->_compress_type . ')' + ); + } + } + } + } + } + return true; + } + + /** + * @return bool + */ + public function _writeFooter() + { + if (is_resource($this->_file)) { + // ----- Write the last 0 filled block for end of archive + $v_binary_data = pack('a1024', ''); + $this->_writeBlock($v_binary_data); + } + return true; + } + + /** + * @param array $p_list + * @param string $p_add_dir + * @param string $p_remove_dir + * @return bool + */ + public function _addList($p_list, $p_add_dir, $p_remove_dir) + { + $v_result = true; + $v_header = array(); + + // ----- Remove potential windows directory separator + $p_add_dir = $this->_translateWinPath($p_add_dir); + $p_remove_dir = $this->_translateWinPath($p_remove_dir, false); + + if (!$this->_file) { + $this->_error('Invalid file descriptor'); + return false; + } + + if (sizeof($p_list) == 0) { + return true; + } + + foreach ($p_list as $v_filename) { + if (!$v_result) { + break; + } + + // ----- Skip the current tar name + if ($v_filename == $this->_tarname) { + continue; + } + + if ($v_filename == '') { + continue; + } + + // ----- ignore files and directories matching the ignore regular expression + if ($this->_ignore_regexp && preg_match($this->_ignore_regexp, '/' . $v_filename)) { + $this->_warning("File '$v_filename' ignored"); + continue; + } + + if (!file_exists($v_filename) && !is_link($v_filename)) { + $this->_warning("File '$v_filename' does not exist"); + continue; + } + + // ----- Add the file or directory header + if (!$this->_addFile($v_filename, $v_header, $p_add_dir, $p_remove_dir)) { + return false; + } + + if (@is_dir($v_filename) && !@is_link($v_filename)) { + if (!($p_hdir = opendir($v_filename))) { + $this->_warning("Directory '$v_filename' can not be read"); + continue; + } + while (false !== ($p_hitem = readdir($p_hdir))) { + if (($p_hitem != '.') && ($p_hitem != '..')) { + if ($v_filename != ".") { + $p_temp_list[0] = $v_filename . '/' . $p_hitem; + } else { + $p_temp_list[0] = $p_hitem; + } + + $v_result = $this->_addList( + $p_temp_list, + $p_add_dir, + $p_remove_dir + ); + } + } + + unset($p_temp_list); + unset($p_hdir); + unset($p_hitem); + } + } - // {{{ _writeFooter() - function _writeFooter() - { - if (is_resource($this->_file)) { - // ----- Write the last 0 filled block for end of archive - $v_binary_data = pack('a1024', ''); - $this->_writeBlock($v_binary_data); - } - return true; + return $v_result; } - // }}} - // {{{ _addList() - function _addList($p_list, $p_add_dir, $p_remove_dir) + /** + * @param string $p_filename + * @param mixed $p_header + * @param string $p_add_dir + * @param string $p_remove_dir + * @param null $v_stored_filename + * @return bool + */ + public function _addFile($p_filename, &$p_header, $p_add_dir, $p_remove_dir, $v_stored_filename = null) { - $v_result=true; - $v_header = array(); + if (!$this->_file) { + $this->_error('Invalid file descriptor'); + return false; + } - // ----- Remove potential windows directory separator - $p_add_dir = $this->_translateWinPath($p_add_dir); - $p_remove_dir = $this->_translateWinPath($p_remove_dir, false); + if ($p_filename == '') { + $this->_error('Invalid file name'); + return false; + } - if (!$this->_file) { - $this->_error('Invalid file descriptor'); - return false; - } + if (is_null($v_stored_filename)) { + // ----- Calculate the stored filename + $p_filename = $this->_translateWinPath($p_filename, false); + $v_stored_filename = $p_filename; - if (sizeof($p_list) == 0) - return true; + if (strcmp($p_filename, $p_remove_dir) == 0) { + return true; + } - foreach ($p_list as $v_filename) { - if (!$v_result) { - break; - } + if ($p_remove_dir != '') { + if (substr($p_remove_dir, -1) != '/') { + $p_remove_dir .= '/'; + } - // ----- Skip the current tar name - if ($v_filename == $this->_tarname) - continue; + if (substr($p_filename, 0, strlen($p_remove_dir)) == $p_remove_dir) { + $v_stored_filename = substr($p_filename, strlen($p_remove_dir)); + } + } - if ($v_filename == '') - continue; + $v_stored_filename = $this->_translateWinPath($v_stored_filename); + if ($p_add_dir != '') { + if (substr($p_add_dir, -1) == '/') { + $v_stored_filename = $p_add_dir . $v_stored_filename; + } else { + $v_stored_filename = $p_add_dir . '/' . $v_stored_filename; + } + } - if (!file_exists($v_filename)) { - $this->_warning("File '$v_filename' does not exist"); - continue; + $v_stored_filename = $this->_pathReduction($v_stored_filename); } - // ----- Add the file or directory header - if (!$this->_addFile($v_filename, $v_header, $p_add_dir, $p_remove_dir)) - return false; + if ($this->_isArchive($p_filename)) { + if (($v_file = @fopen($p_filename, "rb")) == 0) { + $this->_warning( + "Unable to open file '" . $p_filename + . "' in binary read mode" + ); + return true; + } - if (@is_dir($v_filename) && !@is_link($v_filename)) { - if (!($p_hdir = opendir($v_filename))) { - $this->_warning("Directory '$v_filename' can not be read"); - continue; + if (!$this->_writeHeader($p_filename, $v_stored_filename)) { + return false; } - while (false !== ($p_hitem = readdir($p_hdir))) { - if (($p_hitem != '.') && ($p_hitem != '..')) { - if ($v_filename != ".") - $p_temp_list[0] = $v_filename.'/'.$p_hitem; - else - $p_temp_list[0] = $p_hitem; - - $v_result = $this->_addList($p_temp_list, - $p_add_dir, - $p_remove_dir); - } + + while (($v_buffer = fread($v_file, 512)) != '') { + $v_binary_data = pack("a512", "$v_buffer"); + $this->_writeBlock($v_binary_data); } - unset($p_temp_list); - unset($p_hdir); - unset($p_hitem); + fclose($v_file); + } else { + // ----- Only header for dir + if (!$this->_writeHeader($p_filename, $v_stored_filename)) { + return false; + } } - } - return $v_result; + return true; } - // }}} - // {{{ _addFile() - function _addFile($p_filename, &$p_header, $p_add_dir, $p_remove_dir) + /** + * @param string $p_filename + * @param string $p_string + * @param bool $p_datetime + * @param array $p_params + * @return bool + */ + public function _addString($p_filename, $p_string, $p_datetime = false, $p_params = array()) { - if (!$this->_file) { - $this->_error('Invalid file descriptor'); - return false; - } - - if ($p_filename == '') { - $this->_error('Invalid file name'); - return false; - } - - // ----- Calculate the stored filename - $p_filename = $this->_translateWinPath($p_filename, false);; - $v_stored_filename = $p_filename; - if (strcmp($p_filename, $p_remove_dir) == 0) { - return true; - } - if ($p_remove_dir != '') { - if (substr($p_remove_dir, -1) != '/') - $p_remove_dir .= '/'; - - if (substr($p_filename, 0, strlen($p_remove_dir)) == $p_remove_dir) - $v_stored_filename = substr($p_filename, strlen($p_remove_dir)); - } - $v_stored_filename = $this->_translateWinPath($v_stored_filename); - if ($p_add_dir != '') { - if (substr($p_add_dir, -1) == '/') - $v_stored_filename = $p_add_dir.$v_stored_filename; - else - $v_stored_filename = $p_add_dir.'/'.$v_stored_filename; - } - - $v_stored_filename = $this->_pathReduction($v_stored_filename); - - if ($this->_isArchive($p_filename)) { - if (($v_file = @fopen($p_filename, "rb")) == 0) { - $this->_warning("Unable to open file '".$p_filename - ."' in binary read mode"); - return true; - } - - if (!$this->_writeHeader($p_filename, $v_stored_filename)) - return false; - - while (($v_buffer = fread($v_file, 512)) != '') { - $v_binary_data = pack("a512", "$v_buffer"); - $this->_writeBlock($v_binary_data); - } - - fclose($v_file); - - } else { - // ----- Only header for dir - if (!$this->_writeHeader($p_filename, $v_stored_filename)) - return false; - } - - return true; - } - // }}} + $p_stamp = @$p_params["stamp"] ? $p_params["stamp"] : ($p_datetime ? $p_datetime : time()); + $p_mode = @$p_params["mode"] ? $p_params["mode"] : 0600; + $p_type = @$p_params["type"] ? $p_params["type"] : ""; + $p_uid = @$p_params["uid"] ? $p_params["uid"] : 0; + $p_gid = @$p_params["gid"] ? $p_params["gid"] : 0; + if (!$this->_file) { + $this->_error('Invalid file descriptor'); + return false; + } - // {{{ _addString() - function _addString($p_filename, $p_string) - { - if (!$this->_file) { - $this->_error('Invalid file descriptor'); - return false; - } - - if ($p_filename == '') { - $this->_error('Invalid file name'); - return false; - } - - // ----- Calculate the stored filename - $p_filename = $this->_translateWinPath($p_filename, false);; - - if (!$this->_writeHeaderBlock($p_filename, strlen($p_string), - time(), 384, "", 0, 0)) - return false; - - $i=0; - while (($v_buffer = substr($p_string, (($i++)*512), 512)) != '') { - $v_binary_data = pack("a512", $v_buffer); - $this->_writeBlock($v_binary_data); - } - - return true; + if ($p_filename == '') { + $this->_error('Invalid file name'); + return false; + } + + // ----- Calculate the stored filename + $p_filename = $this->_translateWinPath($p_filename, false); + + // ----- If datetime is not specified, set current time + if ($p_datetime === false) { + $p_datetime = time(); + } + + if (!$this->_writeHeaderBlock( + $p_filename, + strlen($p_string), + $p_stamp, + $p_mode, + $p_type, + $p_uid, + $p_gid + ) + ) { + return false; + } + + $i = 0; + while (($v_buffer = substr($p_string, (($i++) * 512), 512)) != '') { + $v_binary_data = pack("a512", $v_buffer); + $this->_writeBlock($v_binary_data); + } + + return true; } - // }}} - // {{{ _writeHeader() - function _writeHeader($p_filename, $p_stored_filename) + /** + * @param string $p_filename + * @param string $p_stored_filename + * @return bool + */ + public function _writeHeader($p_filename, $p_stored_filename) { - if ($p_stored_filename == '') + if ($p_stored_filename == '') { $p_stored_filename = $p_filename; + } $v_reduce_filename = $this->_pathReduction($p_stored_filename); if (strlen($v_reduce_filename) > 99) { - if (!$this->_writeLongHeader($v_reduce_filename)) - return false; + if (!$this->_writeLongHeader($v_reduce_filename)) { + return false; + } } $v_info = lstat($p_filename); - $v_uid = sprintf("%6s ", DecOct($v_info[4])); - $v_gid = sprintf("%6s ", DecOct($v_info[5])); - $v_perms = sprintf("%6s ", DecOct($v_info['mode'])); + $v_uid = sprintf("%07s", DecOct($v_info[4])); + $v_gid = sprintf("%07s", DecOct($v_info[5])); + $v_perms = sprintf("%07s", DecOct($v_info['mode'] & 000777)); - $v_mtime = sprintf("%11s", DecOct($v_info['mode'])); + $v_mtime = sprintf("%011s", DecOct($v_info['mtime'])); $v_linkname = ''; if (@is_link($p_filename)) { - $v_typeflag = '2'; - $v_linkname = readlink($p_filename); - $v_size = sprintf("%11s ", DecOct(0)); + $v_typeflag = '2'; + $v_linkname = readlink($p_filename); + $v_size = sprintf("%011s", DecOct(0)); } elseif (@is_dir($p_filename)) { - $v_typeflag = "5"; - $v_size = sprintf("%11s ", DecOct(0)); + $v_typeflag = "5"; + $v_size = sprintf("%011s", DecOct(0)); } else { - $v_typeflag = ''; - clearstatcache(); - $v_size = sprintf("%11s ", DecOct($v_info['size'])); + $v_typeflag = '0'; + clearstatcache(); + $v_size = sprintf("%011s", DecOct($v_info['size'])); } - $v_magic = ''; + $v_magic = 'ustar '; - $v_version = ''; + $v_version = ' '; - $v_uname = ''; + if (function_exists('posix_getpwuid')) { + $userinfo = posix_getpwuid($v_info[4]); + $groupinfo = posix_getgrgid($v_info[5]); - $v_gname = ''; + $v_uname = $userinfo['name']; + $v_gname = $groupinfo['name']; + } else { + $v_uname = ''; + $v_gname = ''; + } $v_devmajor = ''; @@ -1100,31 +1445,49 @@ class Archive_Tar // extends PEAR $v_prefix = ''; - $v_binary_data_first = pack("a100a8a8a8a12A12", - $v_reduce_filename, $v_perms, $v_uid, - $v_gid, $v_size, $v_mtime); - $v_binary_data_last = pack("a1a100a6a2a32a32a8a8a155a12", - $v_typeflag, $v_linkname, $v_magic, - $v_version, $v_uname, $v_gname, - $v_devmajor, $v_devminor, $v_prefix, ''); + $v_binary_data_first = pack( + "a100a8a8a8a12a12", + $v_reduce_filename, + $v_perms, + $v_uid, + $v_gid, + $v_size, + $v_mtime + ); + $v_binary_data_last = pack( + "a1a100a6a2a32a32a8a8a155a12", + $v_typeflag, + $v_linkname, + $v_magic, + $v_version, + $v_uname, + $v_gname, + $v_devmajor, + $v_devminor, + $v_prefix, + '' + ); // ----- Calculate the checksum $v_checksum = 0; // ..... First part of the header - for ($i=0; $i<148; $i++) - $v_checksum += ord(substr($v_binary_data_first,$i,1)); + for ($i = 0; $i < 148; $i++) { + $v_checksum += ord(substr($v_binary_data_first, $i, 1)); + } // ..... Ignore the checksum value and replace it by ' ' (space) - for ($i=148; $i<156; $i++) + for ($i = 148; $i < 156; $i++) { $v_checksum += ord(' '); + } // ..... Last part of the header - for ($i=156, $j=0; $i<512; $i++, $j++) - $v_checksum += ord(substr($v_binary_data_last,$j,1)); + for ($i = 156, $j = 0; $i < 512; $i++, $j++) { + $v_checksum += ord(substr($v_binary_data_last, $j, 1)); + } // ----- Write the first 148 bytes of the header in the archive $this->_writeBlock($v_binary_data_first, 148); // ----- Write the calculated checksum - $v_checksum = sprintf("%6s ", DecOct($v_checksum)); + $v_checksum = sprintf("%06s ", DecOct($v_checksum)); $v_binary_data = pack("a8", $v_checksum); $this->_writeBlock($v_binary_data, 8); @@ -1133,40 +1496,62 @@ class Archive_Tar // extends PEAR return true; } - // }}} - // {{{ _writeHeaderBlock() - function _writeHeaderBlock($p_filename, $p_size, $p_mtime=0, $p_perms=0, - $p_type='', $p_uid=0, $p_gid=0) - { + /** + * @param string $p_filename + * @param int $p_size + * @param int $p_mtime + * @param int $p_perms + * @param string $p_type + * @param int $p_uid + * @param int $p_gid + * @return bool + */ + public function _writeHeaderBlock( + $p_filename, + $p_size, + $p_mtime = 0, + $p_perms = 0, + $p_type = '', + $p_uid = 0, + $p_gid = 0 + ) { $p_filename = $this->_pathReduction($p_filename); if (strlen($p_filename) > 99) { - if (!$this->_writeLongHeader($p_filename)) - return false; + if (!$this->_writeLongHeader($p_filename)) { + return false; + } } if ($p_type == "5") { - $v_size = sprintf("%11s ", DecOct(0)); + $v_size = sprintf("%011s", DecOct(0)); } else { - $v_size = sprintf("%11s ", DecOct($p_size)); + $v_size = sprintf("%011s", DecOct($p_size)); } - $v_uid = sprintf("%6s ", DecOct($p_uid)); - $v_gid = sprintf("%6s ", DecOct($p_gid)); - $v_perms = sprintf("%6s ", DecOct($p_perms)); + $v_uid = sprintf("%07s", DecOct($p_uid)); + $v_gid = sprintf("%07s", DecOct($p_gid)); + $v_perms = sprintf("%07s", DecOct($p_perms & 000777)); $v_mtime = sprintf("%11s", DecOct($p_mtime)); $v_linkname = ''; - $v_magic = ''; + $v_magic = 'ustar '; - $v_version = ''; + $v_version = ' '; - $v_uname = ''; + if (function_exists('posix_getpwuid')) { + $userinfo = posix_getpwuid($p_uid); + $groupinfo = posix_getgrgid($p_gid); - $v_gname = ''; + $v_uname = $userinfo['name']; + $v_gname = $groupinfo['name']; + } else { + $v_uname = ''; + $v_gname = ''; + } $v_devmajor = ''; @@ -1174,31 +1559,49 @@ class Archive_Tar // extends PEAR $v_prefix = ''; - $v_binary_data_first = pack("a100a8a8a8a12A12", - $p_filename, $v_perms, $v_uid, $v_gid, - $v_size, $v_mtime); - $v_binary_data_last = pack("a1a100a6a2a32a32a8a8a155a12", - $p_type, $v_linkname, $v_magic, - $v_version, $v_uname, $v_gname, - $v_devmajor, $v_devminor, $v_prefix, ''); + $v_binary_data_first = pack( + "a100a8a8a8a12A12", + $p_filename, + $v_perms, + $v_uid, + $v_gid, + $v_size, + $v_mtime + ); + $v_binary_data_last = pack( + "a1a100a6a2a32a32a8a8a155a12", + $p_type, + $v_linkname, + $v_magic, + $v_version, + $v_uname, + $v_gname, + $v_devmajor, + $v_devminor, + $v_prefix, + '' + ); // ----- Calculate the checksum $v_checksum = 0; // ..... First part of the header - for ($i=0; $i<148; $i++) - $v_checksum += ord(substr($v_binary_data_first,$i,1)); + for ($i = 0; $i < 148; $i++) { + $v_checksum += ord(substr($v_binary_data_first, $i, 1)); + } // ..... Ignore the checksum value and replace it by ' ' (space) - for ($i=148; $i<156; $i++) + for ($i = 148; $i < 156; $i++) { $v_checksum += ord(' '); + } // ..... Last part of the header - for ($i=156, $j=0; $i<512; $i++, $j++) - $v_checksum += ord(substr($v_binary_data_last,$j,1)); + for ($i = 156, $j = 0; $i < 512; $i++, $j++) { + $v_checksum += ord(substr($v_binary_data_last, $j, 1)); + } // ----- Write the first 148 bytes of the header in the archive $this->_writeBlock($v_binary_data_first, 148); // ----- Write the calculated checksum - $v_checksum = sprintf("%6s ", DecOct($v_checksum)); + $v_checksum = sprintf("%06s ", DecOct($v_checksum)); $v_binary_data = pack("a8", $v_checksum); $this->_writeBlock($v_binary_data, 8); @@ -1207,10 +1610,12 @@ class Archive_Tar // extends PEAR return true; } - // }}} - // {{{ _writeLongHeader() - function _writeLongHeader($p_filename) + /** + * @param string $p_filename + * @return bool + */ + public function _writeLongHeader($p_filename) { $v_size = sprintf("%11s ", DecOct(strlen($p_filename))); @@ -1232,30 +1637,49 @@ class Archive_Tar // extends PEAR $v_prefix = ''; - $v_binary_data_first = pack("a100a8a8a8a12A12", - '././@LongLink', 0, 0, 0, $v_size, 0); - $v_binary_data_last = pack("a1a100a6a2a32a32a8a8a155a12", - $v_typeflag, $v_linkname, $v_magic, - $v_version, $v_uname, $v_gname, - $v_devmajor, $v_devminor, $v_prefix, ''); + $v_binary_data_first = pack( + "a100a8a8a8a12a12", + '././@LongLink', + 0, + 0, + 0, + $v_size, + 0 + ); + $v_binary_data_last = pack( + "a1a100a6a2a32a32a8a8a155a12", + $v_typeflag, + $v_linkname, + $v_magic, + $v_version, + $v_uname, + $v_gname, + $v_devmajor, + $v_devminor, + $v_prefix, + '' + ); // ----- Calculate the checksum $v_checksum = 0; // ..... First part of the header - for ($i=0; $i<148; $i++) - $v_checksum += ord(substr($v_binary_data_first,$i,1)); + for ($i = 0; $i < 148; $i++) { + $v_checksum += ord(substr($v_binary_data_first, $i, 1)); + } // ..... Ignore the checksum value and replace it by ' ' (space) - for ($i=148; $i<156; $i++) + for ($i = 148; $i < 156; $i++) { $v_checksum += ord(' '); + } // ..... Last part of the header - for ($i=156, $j=0; $i<512; $i++, $j++) - $v_checksum += ord(substr($v_binary_data_last,$j,1)); + for ($i = 156, $j = 0; $i < 512; $i++, $j++) { + $v_checksum += ord(substr($v_binary_data_last, $j, 1)); + } // ----- Write the first 148 bytes of the header in the archive $this->_writeBlock($v_binary_data_first, 148); // ----- Write the calculated checksum - $v_checksum = sprintf("%6s ", DecOct($v_checksum)); + $v_checksum = sprintf("%06s ", DecOct($v_checksum)); $v_binary_data = pack("a8", $v_checksum); $this->_writeBlock($v_binary_data, 8); @@ -1263,27 +1687,30 @@ class Archive_Tar // extends PEAR $this->_writeBlock($v_binary_data_last, 356); // ----- Write the filename as content of the block - $i=0; - while (($v_buffer = substr($p_filename, (($i++)*512), 512)) != '') { + $i = 0; + while (($v_buffer = substr($p_filename, (($i++) * 512), 512)) != '') { $v_binary_data = pack("a512", "$v_buffer"); $this->_writeBlock($v_binary_data); } return true; } - // }}} - // {{{ _readHeader() - function _readHeader($v_binary_data, &$v_header) + /** + * @param mixed $v_binary_data + * @param mixed $v_header + * @return bool + */ + public function _readHeader($v_binary_data, &$v_header) { - if (strlen($v_binary_data)==0) { + if (strlen($v_binary_data) == 0) { $v_header['filename'] = ''; return true; } if (strlen($v_binary_data) != 512) { $v_header['filename'] = ''; - $this->_error('Invalid block size : '.strlen($v_binary_data)); + $this->_error('Invalid block size : ' . strlen($v_binary_data)); return false; } @@ -1293,19 +1720,32 @@ class Archive_Tar // extends PEAR // ----- Calculate the checksum $v_checksum = 0; // ..... First part of the header - for ($i=0; $i<148; $i++) - $v_checksum+=ord(substr($v_binary_data,$i,1)); + for ($i = 0; $i < 148; $i++) { + $v_checksum += ord(substr($v_binary_data, $i, 1)); + } // ..... Ignore the checksum value and replace it by ' ' (space) - for ($i=148; $i<156; $i++) + for ($i = 148; $i < 156; $i++) { $v_checksum += ord(' '); + } // ..... Last part of the header - for ($i=156; $i<512; $i++) - $v_checksum+=ord(substr($v_binary_data,$i,1)); + for ($i = 156; $i < 512; $i++) { + $v_checksum += ord(substr($v_binary_data, $i, 1)); + } - $v_data = unpack("a100filename/a8mode/a8uid/a8gid/a12size/a12mtime/" - ."a8checksum/a1typeflag/a100link/a6magic/a2version/" - ."a32uname/a32gname/a8devmajor/a8devminor", - $v_binary_data); + if (version_compare(PHP_VERSION, "5.5.0-dev") < 0) { + $fmt = "a100filename/a8mode/a8uid/a8gid/a12size/a12mtime/" . + "a8checksum/a1typeflag/a100link/a6magic/a2version/" . + "a32uname/a32gname/a8devmajor/a8devminor/a131prefix"; + } else { + $fmt = "Z100filename/Z8mode/Z8uid/Z8gid/Z12size/Z12mtime/" . + "Z8checksum/Z1typeflag/Z100link/Z6magic/Z2version/" . + "Z32uname/Z32gname/Z8devmajor/Z8devminor/Z131prefix"; + } + $v_data = unpack($fmt, $v_binary_data); + + if (strlen($v_data["prefix"]) > 0) { + $v_data["filename"] = "$v_data[prefix]/$v_data[filename]"; + } // ----- Extract the checksum $v_header['checksum'] = OctDec(trim($v_data['checksum'])); @@ -1313,20 +1753,25 @@ class Archive_Tar // extends PEAR $v_header['filename'] = ''; // ----- Look for last block (empty block) - if (($v_checksum == 256) && ($v_header['checksum'] == 0)) + if (($v_checksum == 256) && ($v_header['checksum'] == 0)) { return true; + } - $this->_error('Invalid checksum for file "'.$v_data['filename'] - .'" : '.$v_checksum.' calculated, ' - .$v_header['checksum'].' expected'); + $this->_error( + 'Invalid checksum for file "' . $v_data['filename'] + . '" : ' . $v_checksum . ' calculated, ' + . $v_header['checksum'] . ' expected' + ); return false; } // ----- Extract the properties - $v_header['filename'] = trim($v_data['filename']); + $v_header['filename'] = rtrim($v_data['filename'], "\0"); if ($this->_maliciousFilename($v_header['filename'])) { - $this->_error('Malicious .tar detected, file "' . $v_header['filename'] . - '" will not install in desired directory tree'); + $this->_error( + 'Malicious .tar detected, file "' . $v_header['filename'] . + '" will not install in desired directory tree' + ); return false; } $v_header['mode'] = OctDec(trim($v_data['mode'])); @@ -1335,11 +1780,11 @@ class Archive_Tar // extends PEAR $v_header['size'] = OctDec(trim($v_data['size'])); $v_header['mtime'] = OctDec(trim($v_data['mtime'])); if (($v_header['typeflag'] = $v_data['typeflag']) == "5") { - $v_header['size'] = 0; + $v_header['size'] = 0; } $v_header['link'] = trim($v_data['link']); /* ----- All these fields are removed form the header because - they do not carry interesting info + they do not carry interesting info $v_header[magic] = trim($v_data[magic]); $v_header[version] = trim($v_data[version]); $v_header[uname] = trim($v_data[uname]); @@ -1350,17 +1795,15 @@ class Archive_Tar // extends PEAR return true; } - // }}} - // {{{ _maliciousFilename() /** * Detect and report a malicious file name * * @param string $file + * * @return bool - * @access private */ - function _maliciousFilename($file) + private function _maliciousFilename($file) { if (strpos($file, '/../') !== false) { return true; @@ -1370,386 +1813,507 @@ class Archive_Tar // extends PEAR } return false; } - // }}} - // {{{ _readLongHeader() - function _readLongHeader(&$v_header) + /** + * @param $v_header + * @return bool + */ + public function _readLongHeader(&$v_header) { - $v_filename = ''; - $n = floor($v_header['size']/512); - for ($i=0; $i<$n; $i++) { - $v_content = $this->_readBlock(); - $v_filename .= $v_content; - } - if (($v_header['size'] % 512) != 0) { - $v_content = $this->_readBlock(); - $v_filename .= $v_content; - } - - // ----- Read the next header - $v_binary_data = $this->_readBlock(); - - if (!$this->_readHeader($v_binary_data, $v_header)) - return false; + $v_filename = ''; + $v_filesize = $v_header['size']; + $n = floor($v_header['size'] / 512); + for ($i = 0; $i < $n; $i++) { + $v_content = $this->_readBlock(); + $v_filename .= $v_content; + } + if (($v_header['size'] % 512) != 0) { + $v_content = $this->_readBlock(); + $v_filename .= $v_content; + } - $v_filename = trim($v_filename); - $v_header['filename'] = $v_filename; + // ----- Read the next header + $v_binary_data = $this->_readBlock(); + + if (!$this->_readHeader($v_binary_data, $v_header)) { + return false; + } + + $v_filename = rtrim(substr($v_filename, 0, $v_filesize), "\0"); + $v_header['filename'] = $v_filename; if ($this->_maliciousFilename($v_filename)) { - $this->_error('Malicious .tar detected, file "' . $v_filename . - '" will not install in desired directory tree'); + $this->_error( + 'Malicious .tar detected, file "' . $v_filename . + '" will not install in desired directory tree' + ); return false; - } + } - return true; + return true; } - // }}} - // {{{ _extractInString() /** - * This method extract from the archive one file identified by $p_filename. - * The return value is a string with the file content, or NULL on error. - * @param string $p_filename The path of the file to extract in a string. - * @return a string with the file content or NULL. - * @access private - */ - function _extractInString($p_filename) + * This method extract from the archive one file identified by $p_filename. + * The return value is a string with the file content, or null on error. + * + * @param string $p_filename The path of the file to extract in a string. + * + * @return a string with the file content or null. + */ + private function _extractInString($p_filename) { $v_result_str = ""; - While (strlen($v_binary_data = $this->_readBlock()) != 0) - { - if (!$this->_readHeader($v_binary_data, $v_header)) - return NULL; - - if ($v_header['filename'] == '') - continue; - - // ----- Look for long filename - if ($v_header['typeflag'] == 'L') { - if (!$this->_readLongHeader($v_header)) - return NULL; - } - - if ($v_header['filename'] == $p_filename) { - if ($v_header['typeflag'] == "5") { - $this->_error('Unable to extract in string a directory ' - .'entry {'.$v_header['filename'].'}'); - return NULL; - } else { - $n = floor($v_header['size']/512); - for ($i=0; $i<$n; $i++) { - $v_result_str .= $this->_readBlock(); - } - if (($v_header['size'] % 512) != 0) { - $v_content = $this->_readBlock(); - $v_result_str .= substr($v_content, 0, - ($v_header['size'] % 512)); - } - return $v_result_str; - } - } else { - $this->_jumpBlock(ceil(($v_header['size']/512))); - } - } - - return NULL; - } - // }}} + while (strlen($v_binary_data = $this->_readBlock()) != 0) { + if (!$this->_readHeader($v_binary_data, $v_header)) { + return null; + } - // {{{ _extractList() - function _extractList($p_path, &$p_list_detail, $p_mode, - $p_file_list, $p_remove_path) - { - $v_result=true; - $v_nb = 0; - $v_extract_all = true; - $v_listing = false; - - $p_path = $this->_translateWinPath($p_path, false); - if ($p_path == '' || (substr($p_path, 0, 1) != '/' - && substr($p_path, 0, 3) != "../" && !strpos($p_path, ':'))) { - $p_path = "./".$p_path; - } - $p_remove_path = $this->_translateWinPath($p_remove_path); - - // ----- Look for path to remove format (should end by /) - if (($p_remove_path != '') && (substr($p_remove_path, -1) != '/')) - $p_remove_path .= '/'; - $p_remove_path_size = strlen($p_remove_path); - - switch ($p_mode) { - case "complete" : - $v_extract_all = TRUE; - $v_listing = FALSE; - break; - case "partial" : - $v_extract_all = FALSE; - $v_listing = FALSE; - break; - case "list" : - $v_extract_all = FALSE; - $v_listing = TRUE; - break; - default : - $this->_error('Invalid extract mode ('.$p_mode.')'); - return false; + if ($v_header['filename'] == '') { + continue; + } + + // ----- Look for long filename + if ($v_header['typeflag'] == 'L') { + if (!$this->_readLongHeader($v_header)) { + return null; + } + } + + if ($v_header['filename'] == $p_filename) { + if ($v_header['typeflag'] == "5") { + $this->_error( + 'Unable to extract in string a directory ' + . 'entry {' . $v_header['filename'] . '}' + ); + return null; + } else { + $n = floor($v_header['size'] / 512); + for ($i = 0; $i < $n; $i++) { + $v_result_str .= $this->_readBlock(); + } + if (($v_header['size'] % 512) != 0) { + $v_content = $this->_readBlock(); + $v_result_str .= substr( + $v_content, + 0, + ($v_header['size'] % 512) + ); + } + return $v_result_str; + } + } else { + $this->_jumpBlock(ceil(($v_header['size'] / 512))); + } + } + + return null; } - clearstatcache(); + /** + * @param string $p_path + * @param string $p_list_detail + * @param string $p_mode + * @param string $p_file_list + * @param string $p_remove_path + * @param bool $p_preserve + * @return bool + */ + public function _extractList( + $p_path, + &$p_list_detail, + $p_mode, + $p_file_list, + $p_remove_path, + $p_preserve = false + ) { + $v_result = true; + $v_nb = 0; + $v_extract_all = true; + $v_listing = false; + + $p_path = $this->_translateWinPath($p_path, false); + if ($p_path == '' || (substr($p_path, 0, 1) != '/' + && substr($p_path, 0, 3) != "../" && !strpos($p_path, ':')) + ) { + $p_path = "./" . $p_path; + } + $p_remove_path = $this->_translateWinPath($p_remove_path); + + // ----- Look for path to remove format (should end by /) + if (($p_remove_path != '') && (substr($p_remove_path, -1) != '/')) { + $p_remove_path .= '/'; + } + $p_remove_path_size = strlen($p_remove_path); - while (strlen($v_binary_data = $this->_readBlock()) != 0) - { - $v_extract_file = FALSE; - $v_extraction_stopped = 0; + switch ($p_mode) { + case "complete" : + $v_extract_all = true; + $v_listing = false; + break; + case "partial" : + $v_extract_all = false; + $v_listing = false; + break; + case "list" : + $v_extract_all = false; + $v_listing = true; + break; + default : + $this->_error('Invalid extract mode (' . $p_mode . ')'); + return false; + } - if (!$this->_readHeader($v_binary_data, $v_header)) - return false; + clearstatcache(); - if ($v_header['filename'] == '') { - continue; - } - - // ----- Look for long filename - if ($v_header['typeflag'] == 'L') { - if (!$this->_readLongHeader($v_header)) - return false; - } - - if ((!$v_extract_all) && (is_array($p_file_list))) { - // ----- By default no unzip if the file is not found - $v_extract_file = false; - - for ($i=0; $i strlen($p_file_list[$i])) - && (substr($v_header['filename'], 0, strlen($p_file_list[$i])) - == $p_file_list[$i])) { - $v_extract_file = TRUE; - break; + while (strlen($v_binary_data = $this->_readBlock()) != 0) { + $v_extract_file = false; + $v_extraction_stopped = 0; + + if (!$this->_readHeader($v_binary_data, $v_header)) { + return false; + } + + if ($v_header['filename'] == '') { + continue; } - } - - // ----- It is a file, so compare the file names - elseif ($p_file_list[$i] == $v_header['filename']) { - $v_extract_file = TRUE; - break; - } - } - } else { - $v_extract_file = TRUE; - } - - // ----- Look if this file need to be extracted - if (($v_extract_file) && (!$v_listing)) - { - if (($p_remove_path != '') - && (substr($v_header['filename'], 0, $p_remove_path_size) - == $p_remove_path)) - $v_header['filename'] = substr($v_header['filename'], - $p_remove_path_size); - if (($p_path != './') && ($p_path != '/')) { - while (substr($p_path, -1) == '/') - $p_path = substr($p_path, 0, strlen($p_path)-1); - - if (substr($v_header['filename'], 0, 1) == '/') - $v_header['filename'] = $p_path.$v_header['filename']; - else - $v_header['filename'] = $p_path.'/'.$v_header['filename']; - } - if (file_exists($v_header['filename'])) { - if ( (@is_dir($v_header['filename'])) - && ($v_header['typeflag'] == '')) { - $this->_error('File '.$v_header['filename'] - .' already exists as a directory'); - return false; - } - if ( ($this->_isArchive($v_header['filename'])) - && ($v_header['typeflag'] == "5")) { - $this->_error('Directory '.$v_header['filename'] - .' already exists as a file'); - return false; - } - if (!is_writeable($v_header['filename'])) { - $this->_error('File '.$v_header['filename'] - .' already exists and is write protected'); - return false; - } - if (filemtime($v_header['filename']) > $v_header['mtime']) { - // To be completed : An error or silent no replace ? - } - } - - // ----- Check the directory availability and create it if necessary - elseif (($v_result - = $this->_dirCheck(($v_header['typeflag'] == "5" - ?$v_header['filename'] - :dirname($v_header['filename'])))) != 1) { - $this->_error('Unable to create path for '.$v_header['filename']); - return false; - } - if ($v_extract_file) { - if ($v_header['typeflag'] == "5") { - if (!@file_exists($v_header['filename'])) { - // Drupal integration. - // Changed the code to use drupal_mkdir() instead of mkdir(). - if (!@drupal_mkdir($v_header['filename'], 0777)) { - $this->_error('Unable to create directory {' - .$v_header['filename'].'}'); + // ----- Look for long filename + if ($v_header['typeflag'] == 'L') { + if (!$this->_readLongHeader($v_header)) { return false; } } - } elseif ($v_header['typeflag'] == "2") { - if (@file_exists($v_header['filename'])) { - @drupal_unlink($v_header['filename']); - } - if (!@symlink($v_header['link'], $v_header['filename'])) { - $this->_error('Unable to extract symbolic link {' - .$v_header['filename'].'}'); - return false; - } - } else { - if (($v_dest_file = @fopen($v_header['filename'], "wb")) == 0) { - $this->_error('Error while opening {'.$v_header['filename'] - .'} in write binary mode'); - return false; - } else { - $n = floor($v_header['size']/512); - for ($i=0; $i<$n; $i++) { - $v_content = $this->_readBlock(); - fwrite($v_dest_file, $v_content, 512); - } - if (($v_header['size'] % 512) != 0) { - $v_content = $this->_readBlock(); - fwrite($v_dest_file, $v_content, ($v_header['size'] % 512)); - } - @fclose($v_dest_file); + // ignore extended / pax headers + if ($v_header['typeflag'] == 'x' || $v_header['typeflag'] == 'g') { + $this->_jumpBlock(ceil(($v_header['size'] / 512))); + continue; + } - // ----- Change the file mode, mtime - @touch($v_header['filename'], $v_header['mtime']); - if ($v_header['mode'] & 0111) { - // make file executable, obey umask - $mode = fileperms($v_header['filename']) | (~umask() & 0111); - @chmod($v_header['filename'], $mode); + if ((!$v_extract_all) && (is_array($p_file_list))) { + // ----- By default no unzip if the file is not found + $v_extract_file = false; + + for ($i = 0; $i < sizeof($p_file_list); $i++) { + // ----- Look if it is a directory + if (substr($p_file_list[$i], -1) == '/') { + // ----- Look if the directory is in the filename path + if ((strlen($v_header['filename']) > strlen($p_file_list[$i])) + && (substr($v_header['filename'], 0, strlen($p_file_list[$i])) + == $p_file_list[$i]) + ) { + $v_extract_file = true; + break; + } + } // ----- It is a file, so compare the file names + elseif ($p_file_list[$i] == $v_header['filename']) { + $v_extract_file = true; + break; + } + } + } else { + $v_extract_file = true; } - } - - // ----- Check the file size - clearstatcache(); - if (filesize($v_header['filename']) != $v_header['size']) { - $this->_error('Extracted file '.$v_header['filename'] - .' does not have the correct file size \'' - .filesize($v_header['filename']) - .'\' ('.$v_header['size'] - .' expected). Archive may be corrupted.'); - return false; - } - } - } else { - $this->_jumpBlock(ceil(($v_header['size']/512))); - } - } else { - $this->_jumpBlock(ceil(($v_header['size']/512))); - } - /* TBC : Seems to be unused ... - if ($this->_compress) - $v_end_of_file = @gzeof($this->_file); - else - $v_end_of_file = @feof($this->_file); - */ + // ----- Look if this file need to be extracted + if (($v_extract_file) && (!$v_listing)) { + if (($p_remove_path != '') + && (substr($v_header['filename'] . '/', 0, $p_remove_path_size) + == $p_remove_path) + ) { + $v_header['filename'] = substr( + $v_header['filename'], + $p_remove_path_size + ); + if ($v_header['filename'] == '') { + continue; + } + } + if (($p_path != './') && ($p_path != '/')) { + while (substr($p_path, -1) == '/') { + $p_path = substr($p_path, 0, strlen($p_path) - 1); + } - if ($v_listing || $v_extract_file || $v_extraction_stopped) { - // ----- Log extracted files - if (($v_file_dir = dirname($v_header['filename'])) - == $v_header['filename']) - $v_file_dir = ''; - if ((substr($v_header['filename'], 0, 1) == '/') && ($v_file_dir == '')) - $v_file_dir = '/'; + if (substr($v_header['filename'], 0, 1) == '/') { + $v_header['filename'] = $p_path . $v_header['filename']; + } else { + $v_header['filename'] = $p_path . '/' . $v_header['filename']; + } + } + if (file_exists($v_header['filename'])) { + if ((@is_dir($v_header['filename'])) + && ($v_header['typeflag'] == '') + ) { + $this->_error( + 'File ' . $v_header['filename'] + . ' already exists as a directory' + ); + return false; + } + if (($this->_isArchive($v_header['filename'])) + && ($v_header['typeflag'] == "5") + ) { + $this->_error( + 'Directory ' . $v_header['filename'] + . ' already exists as a file' + ); + return false; + } + if (!is_writeable($v_header['filename'])) { + $this->_error( + 'File ' . $v_header['filename'] + . ' already exists and is write protected' + ); + return false; + } + if (filemtime($v_header['filename']) > $v_header['mtime']) { + // To be completed : An error or silent no replace ? + } + } // ----- Check the directory availability and create it if necessary + elseif (($v_result + = $this->_dirCheck( + ($v_header['typeflag'] == "5" + ? $v_header['filename'] + : dirname($v_header['filename'])) + )) != 1 + ) { + $this->_error('Unable to create path for ' . $v_header['filename']); + return false; + } - $p_list_detail[$v_nb++] = $v_header; - if (is_array($p_file_list) && (count($p_list_detail) == count($p_file_list))) { - return true; + if ($v_extract_file) { + if ($v_header['typeflag'] == "5") { + if (!@file_exists($v_header['filename'])) { + if (!@mkdir($v_header['filename'], 0777)) { + $this->_error( + 'Unable to create directory {' + . $v_header['filename'] . '}' + ); + return false; + } + } + } elseif ($v_header['typeflag'] == "2") { + if (@file_exists($v_header['filename'])) { + @drupal_unlink($v_header['filename']); + } + if (!@symlink($v_header['link'], $v_header['filename'])) { + $this->_error( + 'Unable to extract symbolic link {' + . $v_header['filename'] . '}' + ); + return false; + } + } else { + if (($v_dest_file = @fopen($v_header['filename'], "wb")) == 0) { + $this->_error( + 'Error while opening {' . $v_header['filename'] + . '} in write binary mode' + ); + return false; + } else { + $n = floor($v_header['size'] / 512); + for ($i = 0; $i < $n; $i++) { + $v_content = $this->_readBlock(); + fwrite($v_dest_file, $v_content, 512); + } + if (($v_header['size'] % 512) != 0) { + $v_content = $this->_readBlock(); + fwrite($v_dest_file, $v_content, ($v_header['size'] % 512)); + } + + @fclose($v_dest_file); + + if ($p_preserve) { + @chown($v_header['filename'], $v_header['uid']); + @chgrp($v_header['filename'], $v_header['gid']); + } + + // ----- Change the file mode, mtime + @touch($v_header['filename'], $v_header['mtime']); + if ($v_header['mode'] & 0111) { + // make file executable, obey umask + $mode = fileperms($v_header['filename']) | (~umask() & 0111); + @chmod($v_header['filename'], $mode); + } + } + + // ----- Check the file size + clearstatcache(); + if (!is_file($v_header['filename'])) { + $this->_error( + 'Extracted file ' . $v_header['filename'] + . 'does not exist. Archive may be corrupted.' + ); + return false; + } + + $filesize = filesize($v_header['filename']); + if ($filesize != $v_header['size']) { + $this->_error( + 'Extracted file ' . $v_header['filename'] + . ' does not have the correct file size \'' + . $filesize + . '\' (' . $v_header['size'] + . ' expected). Archive may be corrupted.' + ); + return false; + } + } + } else { + $this->_jumpBlock(ceil(($v_header['size'] / 512))); + } + } else { + $this->_jumpBlock(ceil(($v_header['size'] / 512))); + } + + /* TBC : Seems to be unused ... + if ($this->_compress) + $v_end_of_file = @gzeof($this->_file); + else + $v_end_of_file = @feof($this->_file); + */ + + if ($v_listing || $v_extract_file || $v_extraction_stopped) { + // ----- Log extracted files + if (($v_file_dir = dirname($v_header['filename'])) + == $v_header['filename'] + ) { + $v_file_dir = ''; + } + if ((substr($v_header['filename'], 0, 1) == '/') && ($v_file_dir == '')) { + $v_file_dir = '/'; + } + + $p_list_detail[$v_nb++] = $v_header; + if (is_array($p_file_list) && (count($p_list_detail) == count($p_file_list))) { + return true; + } + } } - } - } return true; } - // }}} - // {{{ _openAppend() - function _openAppend() + /** + * @return bool + */ + public function _openAppend() { - if (filesize($this->_tarname) == 0) - return $this->_openWrite(); + if (filesize($this->_tarname) == 0) { + return $this->_openWrite(); + } if ($this->_compress) { $this->_close(); - if (!@rename($this->_tarname, $this->_tarname.".tmp")) { - $this->_error('Error while renaming \''.$this->_tarname - .'\' to temporary file \''.$this->_tarname - .'.tmp\''); + if (!@rename($this->_tarname, $this->_tarname . ".tmp")) { + $this->_error( + 'Error while renaming \'' . $this->_tarname + . '\' to temporary file \'' . $this->_tarname + . '.tmp\'' + ); return false; } - if ($this->_compress_type == 'gz') - $v_temp_tar = @gzopen($this->_tarname.".tmp", "rb"); - elseif ($this->_compress_type == 'bz2') - $v_temp_tar = @bzopen($this->_tarname.".tmp", "r"); + if ($this->_compress_type == 'gz') { + $v_temp_tar = @gzopen($this->_tarname . ".tmp", "rb"); + } elseif ($this->_compress_type == 'bz2') { + $v_temp_tar = @bzopen($this->_tarname . ".tmp", "r"); + } elseif ($this->_compress_type == 'lzma2') { + $v_temp_tar = @xzopen($this->_tarname . ".tmp", "r"); + } + if ($v_temp_tar == 0) { - $this->_error('Unable to open file \''.$this->_tarname - .'.tmp\' in binary read mode'); - @rename($this->_tarname.".tmp", $this->_tarname); + $this->_error( + 'Unable to open file \'' . $this->_tarname + . '.tmp\' in binary read mode' + ); + @rename($this->_tarname . ".tmp", $this->_tarname); return false; } if (!$this->_openWrite()) { - @rename($this->_tarname.".tmp", $this->_tarname); + @rename($this->_tarname . ".tmp", $this->_tarname); return false; } if ($this->_compress_type == 'gz') { + $end_blocks = 0; + while (!@gzeof($v_temp_tar)) { $v_buffer = @gzread($v_temp_tar, 512); - if ($v_buffer == ARCHIVE_TAR_END_BLOCK) { + if ($v_buffer == ARCHIVE_TAR_END_BLOCK || strlen($v_buffer) == 0) { + $end_blocks++; // do not copy end blocks, we will re-make them // after appending continue; + } elseif ($end_blocks > 0) { + for ($i = 0; $i < $end_blocks; $i++) { + $this->_writeBlock(ARCHIVE_TAR_END_BLOCK); + } + $end_blocks = 0; } $v_binary_data = pack("a512", $v_buffer); $this->_writeBlock($v_binary_data); } @gzclose($v_temp_tar); - } - elseif ($this->_compress_type == 'bz2') { + } elseif ($this->_compress_type == 'bz2') { + $end_blocks = 0; + while (strlen($v_buffer = @bzread($v_temp_tar, 512)) > 0) { - if ($v_buffer == ARCHIVE_TAR_END_BLOCK) { + if ($v_buffer == ARCHIVE_TAR_END_BLOCK || strlen($v_buffer) == 0) { + $end_blocks++; + // do not copy end blocks, we will re-make them + // after appending continue; + } elseif ($end_blocks > 0) { + for ($i = 0; $i < $end_blocks; $i++) { + $this->_writeBlock(ARCHIVE_TAR_END_BLOCK); + } + $end_blocks = 0; } $v_binary_data = pack("a512", $v_buffer); $this->_writeBlock($v_binary_data); } @bzclose($v_temp_tar); - } + } elseif ($this->_compress_type == 'lzma2') { + $end_blocks = 0; + + while (strlen($v_buffer = @xzread($v_temp_tar, 512)) > 0) { + if ($v_buffer == ARCHIVE_TAR_END_BLOCK || strlen($v_buffer) == 0) { + $end_blocks++; + // do not copy end blocks, we will re-make them + // after appending + continue; + } elseif ($end_blocks > 0) { + for ($i = 0; $i < $end_blocks; $i++) { + $this->_writeBlock(ARCHIVE_TAR_END_BLOCK); + } + $end_blocks = 0; + } + $v_binary_data = pack("a512", $v_buffer); + $this->_writeBlock($v_binary_data); + } - if (!@drupal_unlink($this->_tarname.".tmp")) { - $this->_error('Error while deleting temporary file \'' - .$this->_tarname.'.tmp\''); + @xzclose($v_temp_tar); } + if (!@drupal_unlink($this->_tarname . ".tmp")) { + $this->_error( + 'Error while deleting temporary file \'' + . $this->_tarname . '.tmp\'' + ); + } } else { // ----- For not compressed tar, just add files before the last - // one or two 512 bytes block - if (!$this->_openReadWrite()) - return false; + // one or two 512 bytes block + if (!$this->_openReadWrite()) { + return false; + } clearstatcache(); $v_size = filesize($this->_tarname); @@ -1760,32 +2324,34 @@ class Archive_Tar // extends PEAR fseek($this->_file, $v_size - 1024); if (fread($this->_file, 512) == ARCHIVE_TAR_END_BLOCK) { fseek($this->_file, $v_size - 1024); - } - elseif (fread($this->_file, 512) == ARCHIVE_TAR_END_BLOCK) { + } elseif (fread($this->_file, 512) == ARCHIVE_TAR_END_BLOCK) { fseek($this->_file, $v_size - 512); } } return true; } - // }}} - // {{{ _append() - function _append($p_filelist, $p_add_dir='', $p_remove_dir='') + /** + * @param $p_filelist + * @param string $p_add_dir + * @param string $p_remove_dir + * @return bool + */ + public function _append($p_filelist, $p_add_dir = '', $p_remove_dir = '') { - if (!$this->_openAppend()) + if (!$this->_openAppend()) { return false; + } - if ($this->_addList($p_filelist, $p_add_dir, $p_remove_dir)) - $this->_writeFooter(); + if ($this->_addList($p_filelist, $p_add_dir, $p_remove_dir)) { + $this->_writeFooter(); + } $this->_close(); return true; } - // }}} - - // {{{ _dirCheck() /** * Check if a directory exists and create it (including parent @@ -1793,24 +2359,25 @@ class Archive_Tar // extends PEAR * * @param string $p_dir directory to check * - * @return bool TRUE if the directory exists or was created + * @return bool true if the directory exists or was created */ - function _dirCheck($p_dir) + public function _dirCheck($p_dir) { clearstatcache(); - if ((@is_dir($p_dir)) || ($p_dir == '')) + if ((@is_dir($p_dir)) || ($p_dir == '')) { return true; + } $p_parent_dir = dirname($p_dir); if (($p_parent_dir != $p_dir) && ($p_parent_dir != '') && - (!$this->_dirCheck($p_parent_dir))) - return false; + (!$this->_dirCheck($p_parent_dir)) + ) { + return false; + } - // Drupal integration. - // Changed the code to use drupal_mkdir() instead of mkdir(). - if (!@drupal_mkdir($p_dir, 0777)) { + if (!@mkdir($p_dir, 0777)) { $this->_error("Unable to create directory '$p_dir'"); return false; } @@ -1818,10 +2385,6 @@ class Archive_Tar // extends PEAR return true; } - // }}} - - // {{{ _pathReduction() - /** * Compress path by changing for example "/dir/foo/../bar" to "/dir/bar", * rand emove double slashes. @@ -1829,11 +2392,8 @@ class Archive_Tar // extends PEAR * @param string $p_dir path to reduce * * @return string reduced path - * - * @access private - * */ - function _pathReduction($p_dir) + private function _pathReduction($p_dir) { $v_result = ''; @@ -1843,50 +2403,57 @@ class Archive_Tar // extends PEAR $v_list = explode('/', $p_dir); // ----- Study directories from last to first - for ($i=sizeof($v_list)-1; $i>=0; $i--) { + for ($i = sizeof($v_list) - 1; $i >= 0; $i--) { // ----- Look for current path if ($v_list[$i] == ".") { // ----- Ignore this directory // Should be the first $i=0, but no check is done - } - else if ($v_list[$i] == "..") { - // ----- Ignore it and ignore the $i-1 - $i--; - } - else if ( ($v_list[$i] == '') - && ($i!=(sizeof($v_list)-1)) - && ($i!=0)) { - // ----- Ignore only the double '//' in path, - // but not the first and last / } else { - $v_result = $v_list[$i].($i!=(sizeof($v_list)-1)?'/' - .$v_result:''); + if ($v_list[$i] == "..") { + // ----- Ignore it and ignore the $i-1 + $i--; + } else { + if (($v_list[$i] == '') + && ($i != (sizeof($v_list) - 1)) + && ($i != 0) + ) { + // ----- Ignore only the double '//' in path, + // but not the first and last / + } else { + $v_result = $v_list[$i] . ($i != (sizeof($v_list) - 1) ? '/' + . $v_result : ''); + } + } } } } - $v_result = strtr($v_result, '\\', '/'); + + if (defined('OS_WINDOWS') && OS_WINDOWS) { + $v_result = strtr($v_result, '\\', '/'); + } + return $v_result; } - // }}} - - // {{{ _translateWinPath() - function _translateWinPath($p_path, $p_remove_disk_letter=true) + /** + * @param $p_path + * @param bool $p_remove_disk_letter + * @return string + */ + public function _translateWinPath($p_path, $p_remove_disk_letter = true) { - if (defined('OS_WINDOWS') && OS_WINDOWS) { - // ----- Look for potential disk letter - if ( ($p_remove_disk_letter) - && (($v_position = strpos($p_path, ':')) != false)) { - $p_path = substr($p_path, $v_position+1); - } - // ----- Change potential windows directory separator - if ((strpos($p_path, '\\') > 0) || (substr($p_path, 0,1) == '\\')) { - $p_path = strtr($p_path, '\\', '/'); - } - } - return $p_path; + if (defined('OS_WINDOWS') && OS_WINDOWS) { + // ----- Look for potential disk letter + if (($p_remove_disk_letter) + && (($v_position = strpos($p_path, ':')) != false) + ) { + $p_path = substr($p_path, $v_position + 1); + } + // ----- Change potential windows directory separator + if ((strpos($p_path, '\\') > 0) || (substr($p_path, 0, 1) == '\\')) { + $p_path = strtr($p_path, '\\', '/'); + } + } + return $p_path; } - // }}} - } -?> diff --git a/docroot/modules/system/system.test b/docroot/modules/system/system.test index 2865bbb2..95b43538 100644 --- a/docroot/modules/system/system.test +++ b/docroot/modules/system/system.test @@ -905,6 +905,29 @@ class CronRunTestCase extends DrupalWebTestCase { $result = variable_get('common_test_cron'); $this->assertEqual($result, 'success', 'Cron correctly handles exceptions thrown during hook_cron() invocations.'); } + + /** + * Tests that hook_flush_caches() is not invoked on every single cron run. + * + * @see system_cron() + */ + public function testCronCacheExpiration() { + module_enable(array('system_cron_test')); + variable_del('system_cron_test_flush_caches'); + + // Invoke cron the first time: hook_flush_caches() should be called and then + // get cached. + drupal_cron_run(); + $this->assertEqual(variable_get('system_cron_test_flush_caches'), 1, 'hook_flush_caches() was invoked the first time.'); + $cache = cache_get('system_cache_tables'); + $this->assertEqual(empty($cache), FALSE, 'Cache is filled with cache table data.'); + + // Run cron again and ensure that hook_flush_caches() is not called. + variable_del('system_cron_test_flush_caches'); + drupal_cron_run(); + $this->assertNull(variable_get('system_cron_test_flush_caches'), 'hook_flush_caches() was not invoked the second time.'); + } + } /** @@ -1327,7 +1350,23 @@ class DateTimeFunctionalTest extends DrupalWebTestCase { $this->assertEqual($this->getUrl(), url('admin/config/regional/date-time/formats', array('absolute' => TRUE)), 'Correct page redirection.'); $this->assertText(t('Custom date format updated.'), 'Custom date format successfully updated.'); + // Check that ajax callback is protected by CSRF token. + $this->drupalGet('admin/config/regional/date-time/formats/lookup', array('query' => array('format' => 'Y m d'))); + $this->assertResponse(403, 'Access denied with no token'); + $this->drupalGet('admin/config/regional/date-time/formats/lookup', array('query' => array('token' => 'invalid', 'format' => 'Y m d'))); + $this->assertResponse(403, 'Access denied with invalid token'); + $this->drupalGet('admin/config/regional/date-time/formats'); + $this->clickLink(t('edit')); + $settings = $this->drupalGetSettings(); + $lookup_url = $settings['dateTime']['date-format']['lookup']; + preg_match('/token=([^&]+)/', $lookup_url, $matches); + $this->assertFalse(empty($matches[1]), 'Found token value'); + $this->drupalGet('admin/config/regional/date-time/formats/lookup', array('query' => array('token' => $matches[1], 'format' => 'Y m d'))); + $this->assertResponse(200, 'Access allowed with valid token'); + $this->assertText(format_date(time(), 'custom', 'Y m d')); + // Delete custom date format. + $this->drupalGet('admin/config/regional/date-time/formats'); $this->clickLink(t('delete')); $this->drupalPost($this->getUrl(), array(), t('Remove')); $this->assertEqual($this->getUrl(), url('admin/config/regional/date-time/formats', array('absolute' => TRUE)), 'Correct page redirection.'); diff --git a/docroot/modules/system/tests/cron_queue_test.info b/docroot/modules/system/tests/cron_queue_test.info index e832b647..0042f854 100644 --- a/docroot/modules/system/tests/cron_queue_test.info +++ b/docroot/modules/system/tests/cron_queue_test.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/system/tests/system_cron_test.info b/docroot/modules/system/tests/system_cron_test.info new file mode 100644 index 00000000..8a82231a --- /dev/null +++ b/docroot/modules/system/tests/system_cron_test.info @@ -0,0 +1,12 @@ +name = System Cron Test +description = 'Support module for testing the system_cron().' +package = Testing +version = VERSION +core = 7.x +hidden = TRUE + +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" +project = "drupal" +datestamp = "1456343506" + diff --git a/docroot/modules/system/tests/system_cron_test.module b/docroot/modules/system/tests/system_cron_test.module new file mode 100644 index 00000000..9ef80e23 --- /dev/null +++ b/docroot/modules/system/tests/system_cron_test.module @@ -0,0 +1,15 @@ +' . t('Uses') . ''; $output .= '
'; $output .= '
' . t('Creating vocabularies') . '
'; - $output .= '
' . t('Users with sufficient permissions can create vocabularies and terms through the Taxonomy page. The page listing the terms provides a drag-and-drop interface for controlling the order of the terms and sub-terms within a vocabulary, in a hierarchical fashion. A controlled vocabulary classifying music by genre with terms and sub-terms could look as follows:', array('@taxo' => url('admin/structure/taxonomy'), '@perm' => url('admin/people/permissions', array('fragment'=>'module-taxonomy')))); + $output .= '
' . t('Users with sufficient permissions can create vocabularies and terms through the Taxonomy page. The page listing the terms provides a drag-and-drop interface for controlling the order of the terms and sub-terms within a vocabulary, in a hierarchical fashion. A controlled vocabulary classifying music by genre with terms and sub-terms could look as follows:', array('@taxo' => url('admin/structure/taxonomy'), '@perm' => url('admin/people/permissions', array('fragment' => 'module-taxonomy')))); $output .= '
  • ' . t('vocabulary: Music') . '
  • '; $output .= '
    • ' . t('term: Jazz') . '
    • '; $output .= '
      • ' . t('sub-term: Swing') . '
      • '; diff --git a/docroot/modules/toolbar/toolbar.info b/docroot/modules/toolbar/toolbar.info index 7e331d57..7edd8eda 100644 --- a/docroot/modules/toolbar/toolbar.info +++ b/docroot/modules/toolbar/toolbar.info @@ -4,8 +4,8 @@ core = 7.x package = Core version = VERSION -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/tracker/tracker.info b/docroot/modules/tracker/tracker.info index 55e50af3..2917302b 100644 --- a/docroot/modules/tracker/tracker.info +++ b/docroot/modules/tracker/tracker.info @@ -6,8 +6,8 @@ version = VERSION core = 7.x files[] = tracker.test -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/translation/tests/translation_test.info b/docroot/modules/translation/tests/translation_test.info index 08c9f7c6..692b4ad8 100644 --- a/docroot/modules/translation/tests/translation_test.info +++ b/docroot/modules/translation/tests/translation_test.info @@ -5,8 +5,8 @@ package = Testing version = VERSION hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/translation/translation.info b/docroot/modules/translation/translation.info index 98121968..2f38d2ba 100644 --- a/docroot/modules/translation/translation.info +++ b/docroot/modules/translation/translation.info @@ -6,8 +6,8 @@ version = VERSION core = 7.x files[] = translation.test -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/trigger/tests/trigger_test.info b/docroot/modules/trigger/tests/trigger_test.info index 3ef7cdea..0fe583a3 100644 --- a/docroot/modules/trigger/tests/trigger_test.info +++ b/docroot/modules/trigger/tests/trigger_test.info @@ -4,8 +4,8 @@ package = Testing core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/trigger/trigger.info b/docroot/modules/trigger/trigger.info index 02fe3f34..85175379 100644 --- a/docroot/modules/trigger/trigger.info +++ b/docroot/modules/trigger/trigger.info @@ -6,8 +6,8 @@ core = 7.x files[] = trigger.test configure = admin/structure/trigger -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/update/tests/aaa_update_test.info b/docroot/modules/update/tests/aaa_update_test.info index 55a1de4f..23756e02 100644 --- a/docroot/modules/update/tests/aaa_update_test.info +++ b/docroot/modules/update/tests/aaa_update_test.info @@ -4,8 +4,8 @@ package = Testing core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/update/tests/bbb_update_test.info b/docroot/modules/update/tests/bbb_update_test.info index 5eb2a24c..3fa1422d 100644 --- a/docroot/modules/update/tests/bbb_update_test.info +++ b/docroot/modules/update/tests/bbb_update_test.info @@ -4,8 +4,8 @@ package = Testing core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/update/tests/ccc_update_test.info b/docroot/modules/update/tests/ccc_update_test.info index 255793a5..50327549 100644 --- a/docroot/modules/update/tests/ccc_update_test.info +++ b/docroot/modules/update/tests/ccc_update_test.info @@ -4,8 +4,8 @@ package = Testing core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/update/tests/themes/update_test_basetheme/update_test_basetheme.info b/docroot/modules/update/tests/themes/update_test_basetheme/update_test_basetheme.info index c4f3df35..427e9e33 100644 --- a/docroot/modules/update/tests/themes/update_test_basetheme/update_test_basetheme.info +++ b/docroot/modules/update/tests/themes/update_test_basetheme/update_test_basetheme.info @@ -3,8 +3,8 @@ description = Test theme which acts as a base theme for other test subthemes. core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/update/tests/themes/update_test_subtheme/update_test_subtheme.info b/docroot/modules/update/tests/themes/update_test_subtheme/update_test_subtheme.info index 90602b88..3e6b0ba3 100644 --- a/docroot/modules/update/tests/themes/update_test_subtheme/update_test_subtheme.info +++ b/docroot/modules/update/tests/themes/update_test_subtheme/update_test_subtheme.info @@ -4,8 +4,8 @@ core = 7.x base theme = update_test_basetheme hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/update/tests/update_test.info b/docroot/modules/update/tests/update_test.info index f3fb32a0..1c868d13 100644 --- a/docroot/modules/update/tests/update_test.info +++ b/docroot/modules/update/tests/update_test.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/update/update.info b/docroot/modules/update/update.info index 761dc68d..f55538f7 100644 --- a/docroot/modules/update/update.info +++ b/docroot/modules/update/update.info @@ -6,8 +6,8 @@ core = 7.x files[] = update.test configure = admin/reports/updates/settings -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/user/tests/user_form_test.info b/docroot/modules/user/tests/user_form_test.info index b344f464..3f4862d8 100644 --- a/docroot/modules/user/tests/user_form_test.info +++ b/docroot/modules/user/tests/user_form_test.info @@ -5,8 +5,8 @@ version = VERSION core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/user/user.info b/docroot/modules/user/user.info index e9038a67..03be9cd5 100644 --- a/docroot/modules/user/user.info +++ b/docroot/modules/user/user.info @@ -9,8 +9,8 @@ required = TRUE configure = admin/config/people stylesheets[all][] = user.css -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/modules/user/user.module b/docroot/modules/user/user.module index 62322d94..52d7ca22 100644 --- a/docroot/modules/user/user.module +++ b/docroot/modules/user/user.module @@ -958,6 +958,8 @@ function user_search_access() { */ function user_search_execute($keys = NULL, $conditions = NULL) { $find = array(); + // Escape for LIKE matching. + $keys = db_like($keys); // Replace wildcards with MySQL/PostgreSQL wildcards. $keys = preg_replace('!\*+!', '%', $keys); $query = db_select('users')->extend('PagerDefault'); @@ -967,13 +969,13 @@ function user_search_execute($keys = NULL, $conditions = NULL) { // and they don't need to be restricted to only active users. $query->fields('users', array('mail')); $query->condition(db_or()-> - condition('name', '%' . db_like($keys) . '%', 'LIKE')-> - condition('mail', '%' . db_like($keys) . '%', 'LIKE')); + condition('name', '%' . $keys . '%', 'LIKE')-> + condition('mail', '%' . $keys . '%', 'LIKE')); } else { // Regular users can only search via usernames, and we do not show them // blocked accounts. - $query->condition('name', '%' . db_like($keys) . '%', 'LIKE') + $query->condition('name', '%' . $keys . '%', 'LIKE') ->condition('status', 1); } $uids = $query @@ -1306,10 +1308,12 @@ function user_user_presave(&$edit, $account, $category) { elseif (!empty($edit['picture_delete'])) { $edit['picture'] = NULL; } - // Prepare user roles. - if (isset($edit['roles'])) { - $edit['roles'] = array_filter($edit['roles']); - } + } + + // Filter out roles with empty values to avoid granting extra roles when + // processing custom form submissions. + if (isset($edit['roles'])) { + $edit['roles'] = array_filter($edit['roles']); } // Move account cancellation information into $user->data. @@ -2225,7 +2229,11 @@ function user_login_final_validate($form, &$form_state) { } } else { - form_set_error('name', t('Sorry, unrecognized username or password. Have you forgotten your password?', array('@password' => url('user/password', array('query' => array('name' => $form_state['values']['name'])))))); + // Use $form_state['input']['name'] here to guarantee that we send + // exactly what the user typed in. $form_state['values']['name'] may have + // been modified by validation handlers that ran earlier than this one. + $query = isset($form_state['input']['name']) ? array('name' => $form_state['input']['name']) : array(); + form_set_error('name', t('Sorry, unrecognized username or password. Have you forgotten your password?', array('@password' => url('user/password', array('query' => $query))))); watchdog('user', 'Login attempt failed for %user.', array('%user' => $form_state['values']['name'])); } } @@ -3663,12 +3671,7 @@ function user_form_process_password_confirm($element) { ); $element['#attached']['js'][] = drupal_get_path('module', 'user') . '/user.js'; - // Ensure settings are only added once per page. - static $already_added = FALSE; - if (!$already_added) { - $already_added = TRUE; - $element['#attached']['js'][] = array('data' => $js_settings, 'type' => 'setting'); - } + $element['#attached']['js'][] = array('data' => $js_settings, 'type' => 'setting'); return $element; } diff --git a/docroot/modules/user/user.test b/docroot/modules/user/user.test index 97d23b44..b9729c50 100644 --- a/docroot/modules/user/user.test +++ b/docroot/modules/user/user.test @@ -2230,6 +2230,20 @@ class UserUserSearchTestCase extends DrupalWebTestCase { $this->drupalPost('search/user/', $edit, t('Search')); $this->assertText($keys); + // Verify that wildcard search works. + $keys = $user1->name; + $keys = substr($keys, 0, 2) . '*' . substr($keys, 4, 2); + $edit = array('keys' => $keys); + $this->drupalPost('search/user/', $edit, t('Search')); + $this->assertText($user1->name, 'Search for username wildcard resulted in user name on page for administrative user.'); + + // Verify that wildcard search works for email. + $keys = $user1->mail; + $keys = substr($keys, 0, 2) . '*' . substr($keys, 4, 2); + $edit = array('keys' => $keys); + $this->drupalPost('search/user/', $edit, t('Search')); + $this->assertText($user1->name, 'Search for email wildcard resulted in user name on page for administrative user.'); + // Create a blocked user. $blocked_user = $this->drupalCreateUser(); $edit = array('status' => 0); diff --git a/docroot/profiles/minimal/minimal.info b/docroot/profiles/minimal/minimal.info index 6818e2bc..f52b0f96 100644 --- a/docroot/profiles/minimal/minimal.info +++ b/docroot/profiles/minimal/minimal.info @@ -5,8 +5,8 @@ core = 7.x dependencies[] = block dependencies[] = dblog -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/profiles/standard/standard.info b/docroot/profiles/standard/standard.info index 0297c71b..9840da32 100644 --- a/docroot/profiles/standard/standard.info +++ b/docroot/profiles/standard/standard.info @@ -24,8 +24,8 @@ dependencies[] = field_ui dependencies[] = file dependencies[] = rdf -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/profiles/testing/modules/drupal_system_listing_compatible_test/drupal_system_listing_compatible_test.info b/docroot/profiles/testing/modules/drupal_system_listing_compatible_test/drupal_system_listing_compatible_test.info index 4c70d768..1a6c0083 100644 --- a/docroot/profiles/testing/modules/drupal_system_listing_compatible_test/drupal_system_listing_compatible_test.info +++ b/docroot/profiles/testing/modules/drupal_system_listing_compatible_test/drupal_system_listing_compatible_test.info @@ -6,8 +6,8 @@ core = 7.x hidden = TRUE files[] = drupal_system_listing_compatible_test.test -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/profiles/testing/modules/drupal_system_listing_incompatible_test/drupal_system_listing_incompatible_test.info b/docroot/profiles/testing/modules/drupal_system_listing_incompatible_test/drupal_system_listing_incompatible_test.info index 5c3960e5..d6353f5d 100644 --- a/docroot/profiles/testing/modules/drupal_system_listing_incompatible_test/drupal_system_listing_incompatible_test.info +++ b/docroot/profiles/testing/modules/drupal_system_listing_incompatible_test/drupal_system_listing_incompatible_test.info @@ -8,8 +8,8 @@ version = VERSION core = 6.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/profiles/testing/testing.info b/docroot/profiles/testing/testing.info index d667e41a..4342ddab 100644 --- a/docroot/profiles/testing/testing.info +++ b/docroot/profiles/testing/testing.info @@ -4,8 +4,8 @@ version = VERSION core = 7.x hidden = TRUE -; Information added by Drupal.org packaging script on 2015-10-21 -version = "7.41" +; Information added by Drupal.org packaging script on 2016-02-24 +version = "7.43" project = "drupal" -datestamp = "1445457729" +datestamp = "1456343506" diff --git a/docroot/scripts/code-clean.sh b/docroot/scripts/code-clean.sh new file mode 100644 index 00000000..3338b6ad --- /dev/null +++ b/docroot/scripts/code-clean.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +find . -name "*~" -type f | xargs rm -f +find . -name ".#*" -type f | xargs rm -f +find . -name "*.rej" -type f | xargs rm -f +find . -name "*.orig" -type f | xargs rm -f +find . -name "DEADJOE" -type f | xargs rm -f +find . -type f | grep -v ".psp" | grep -v ".gif" | grep -v ".jpg" | grep -v ".png" | grep -v ".tgz" | grep -v ".ico" | grep -v "druplicon" | xargs perl -wi -pe 's/\s+$/\n/' +find . -type f | grep -v ".psp" | grep -v ".gif" | grep -v ".jpg" | grep -v ".png" | grep -v ".tgz" | grep -v ".ico" | grep -v "druplicon" | xargs perl -wi -pe 's/\t/ /g' diff --git a/docroot/scripts/cron-curl.sh b/docroot/scripts/cron-curl.sh new file mode 100644 index 00000000..9b168ab3 --- /dev/null +++ b/docroot/scripts/cron-curl.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +curl --silent --compressed http://example.com/cron.php diff --git a/docroot/scripts/cron-lynx.sh b/docroot/scripts/cron-lynx.sh new file mode 100644 index 00000000..904667ac --- /dev/null +++ b/docroot/scripts/cron-lynx.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +/usr/bin/lynx -source http://example.com/cron.php > /dev/null 2>&1 diff --git a/docroot/scripts/drupal.sh b/docroot/scripts/drupal.sh new file mode 100755 index 00000000..76bd750f --- /dev/null +++ b/docroot/scripts/drupal.sh @@ -0,0 +1,144 @@ +#!/usr/bin/env php +" +Example: {$script} "http://mysite.org/node" + +All arguments are long options. + + --help This page. + + --root Set the working directory for the script to the specified path. + To execute Drupal this has to be the root directory of your + Drupal installation, f.e. /home/www/foo/drupal (assuming Drupal + running on Unix). Current directory is not required. + Use surrounding quotation marks on Windows. + + --verbose This option displays the options as they are set, but will + produce errors from setting the session. + + URI The URI to execute, i.e. http://default/foo/bar for executing + the path '/foo/bar' in your site 'default'. URI has to be + enclosed by quotation marks if there are ampersands in it + (f.e. index.php?q=node&foo=bar). Prefix 'http://' is required, + and the domain must exist in Drupal's sites-directory. + + If the given path and file exists it will be executed directly, + i.e. if URI is set to http://default/bar/foo.php + and bar/foo.php exists, this script will be executed without + bootstrapping Drupal. To execute Drupal's cron.php, specify + http://default/cron.php as the URI. + + +To run this script without --root argument invoke it from the root directory +of your Drupal installation with + + ./scripts/{$script} +\n +EOF; + exit; +} + +// define default settings +$cmd = 'index.php'; +$_SERVER['HTTP_HOST'] = 'default'; +$_SERVER['PHP_SELF'] = '/index.php'; +$_SERVER['REMOTE_ADDR'] = '127.0.0.1'; +$_SERVER['SERVER_SOFTWARE'] = NULL; +$_SERVER['REQUEST_METHOD'] = 'GET'; +$_SERVER['QUERY_STRING'] = ''; +$_SERVER['PHP_SELF'] = $_SERVER['REQUEST_URI'] = '/'; +$_SERVER['HTTP_USER_AGENT'] = 'console'; + +// toggle verbose mode +if (in_array('--verbose', $_SERVER['argv'])) { + $_verbose_mode = true; +} +else { + $_verbose_mode = false; +} + +// parse invocation arguments +while ($param = array_shift($_SERVER['argv'])) { + switch ($param) { + case '--root': + // change working directory + $path = array_shift($_SERVER['argv']); + if (is_dir($path)) { + chdir($path); + if ($_verbose_mode) { + echo "cwd changed to: {$path}\n"; + } + } + else { + echo "\nERROR: {$path} not found.\n\n"; + } + break; + + default: + if (substr($param, 0, 2) == '--') { + // ignore unknown options + break; + } + else { + // parse the URI + $path = parse_url($param); + + // set site name + if (isset($path['host'])) { + $_SERVER['HTTP_HOST'] = $path['host']; + } + + // set query string + if (isset($path['query'])) { + $_SERVER['QUERY_STRING'] = $path['query']; + parse_str($path['query'], $_GET); + $_REQUEST = $_GET; + } + + // set file to execute or Drupal path (clean URLs enabled) + if (isset($path['path']) && file_exists(substr($path['path'], 1))) { + $_SERVER['PHP_SELF'] = $_SERVER['REQUEST_URI'] = $path['path']; + $cmd = substr($path['path'], 1); + } + elseif (isset($path['path'])) { + if (!isset($_GET['q'])) { + $_REQUEST['q'] = $_GET['q'] = $path['path']; + } + } + + // display setup in verbose mode + if ($_verbose_mode) { + echo "Hostname set to: {$_SERVER['HTTP_HOST']}\n"; + echo "Script name set to: {$cmd}\n"; + echo "Path set to: {$_GET['q']}\n"; + } + } + break; + } +} + +if (file_exists($cmd)) { + include $cmd; +} +else { + echo "\nERROR: {$cmd} not found.\n\n"; +} +exit(); diff --git a/docroot/scripts/dump-database-d6.sh b/docroot/scripts/dump-database-d6.sh new file mode 100644 index 00000000..41146b07 --- /dev/null +++ b/docroot/scripts/dump-database-d6.sh @@ -0,0 +1,101 @@ +#!/usr/bin/env php + $data) { + // Remove descriptions to save time and code. + unset($data['description']); + foreach ($data['fields'] as &$field) { + unset($field['description']); + } + + // Dump the table structure. + $output .= "db_create_table('" . $table . "', " . drupal_var_export($data) . ");\n"; + + // Don't output values for those tables. + if (substr($table, 0, 5) == 'cache' || $table == 'sessions' || $table == 'watchdog') { + $output .= "\n"; + continue; + } + + // Prepare the export of values. + $result = db_query('SELECT * FROM {'. $table .'}'); + $insert = ''; + while ($record = db_fetch_array($result)) { + // users.uid is a serial and inserting 0 into a serial can break MySQL. + // So record uid + 1 instead of uid for every uid and once all records + // are in place, fix them up. + if ($table == 'users') { + $record['uid']++; + } + $insert .= '->values('. drupal_var_export($record) .")\n"; + } + + // Dump the values if there are some. + if ($insert) { + $output .= "db_insert('". $table . "')->fields(". drupal_var_export(array_keys($data['fields'])) .")\n"; + $output .= $insert; + $output .= "->execute();\n"; + } + + // Add the statement fixing the serial in the user table. + if ($table == 'users') { + $output .= "db_query('UPDATE {users} SET uid = uid - 1');\n"; + } + + $output .= "\n"; +} + +print $output; diff --git a/docroot/scripts/dump-database-d7.sh b/docroot/scripts/dump-database-d7.sh new file mode 100644 index 00000000..7692c40d --- /dev/null +++ b/docroot/scripts/dump-database-d7.sh @@ -0,0 +1,90 @@ +#!/usr/bin/env php + $data) { + // Remove descriptions to save time and code. + unset($data['description']); + foreach ($data['fields'] as &$field) { + unset($field['description']); + } + + // Dump the table structure. + $output .= "db_create_table('" . $table . "', " . drupal_var_export($data) . ");\n"; + + // Don't output values for those tables. + if (substr($table, 0, 5) == 'cache' || $table == 'sessions' || $table == 'watchdog') { + $output .= "\n"; + continue; + } + + // Prepare the export of values. + $result = db_query('SELECT * FROM {'. $table .'}', array(), array('fetch' => PDO::FETCH_ASSOC)); + $insert = ''; + foreach ($result as $record) { + $insert .= '->values('. drupal_var_export($record) .")\n"; + } + + // Dump the values if there are some. + if ($insert) { + $output .= "db_insert('". $table . "')->fields(". drupal_var_export(array_keys($data['fields'])) .")\n"; + $output .= $insert; + $output .= "->execute();\n"; + } + + $output .= "\n"; +} + +print $output; diff --git a/docroot/scripts/generate-d6-content.sh b/docroot/scripts/generate-d6-content.sh new file mode 100644 index 00000000..fc4c68f9 --- /dev/null +++ b/docroot/scripts/generate-d6-content.sh @@ -0,0 +1,206 @@ +#!/usr/bin/env php + 11 ? array('page' => TRUE) : array(); + $vocabulary['multiple'] = $multiple[$i % 12]; + $vocabulary['required'] = $required[$i % 12]; + $vocabulary['relations'] = 1; + $vocabulary['hierarchy'] = $hierarchy[$i % 12]; + $vocabulary['weight'] = $i; + taxonomy_save_vocabulary($vocabulary); + $parents = array(); + // Vocabularies without hierarchy get one term, single parent vocabularies get + // one parent and one child term. Multiple parent vocabularies get three + // terms: t0, t1, t2 where t0 is a parent of both t1 and t2. + for ($j = 0; $j < $vocabulary['hierarchy'] + 1; $j++) { + $term = array(); + $term['vid'] = $vocabulary['vid']; + // For multiple parent vocabularies, omit the t0-t1 relation, otherwise + // every parent in the vocabulary is a parent. + $term['parent'] = $vocabulary['hierarchy'] == 2 && i == 1 ? array() : $parents; + ++$term_id; + $term['name'] = "term $term_id of vocabulary $voc_id (j=$j)"; + $term['description'] = 'description of ' . $term['name']; + $term['weight'] = $i * 3 + $j; + taxonomy_save_term($term); + $terms[] = $term['tid']; + $parents[] = $term['tid']; + } +} + +$node_id = 0; +$revision_id = 0; +module_load_include('inc', 'node', 'node.pages'); +for ($i = 0; $i < 24; $i++) { + $uid = intval($i / 8) + 3; + $user = user_load($uid); + $node = new stdClass(); + $node->uid = $uid; + $node->type = $i < 12 ? 'page' : 'story'; + $node->sticky = 0; + ++$node_id; + ++$revision_id; + $node->title = "node title $node_id rev $revision_id (i=$i)"; + $type = node_get_types('type', $node->type); + if ($type->has_body) { + $node->body = str_repeat("node body ($node->type) - $i", 100); + $node->teaser = node_teaser($node->body); + $node->filter = variable_get('filter_default_format', 1); + $node->format = FILTER_FORMAT_DEFAULT; + } + $node->status = intval($i / 4) % 2; + $node->language = ''; + $node->revision = $i < 12; + $node->promote = $i % 2; + $node->created = $now + $i * 86400; + $node->log = "added $i node"; + // Make every term association different a little. For nodes with revisions, + // make the initial revision have a different set of terms than the + // newest revision. + $node_terms = $terms; + unset($node_terms[$i], $node_terms[47 - $i]); + if ($node->revision) { + $node->taxonomy = array($i => $terms[$i], 47-$i => $terms[47 - $i]); + } + else { + $node->taxonomy = $node_terms; + } + node_save($node); + path_set_alias("node/$node->nid", "content/$node->created"); + if ($node->revision) { + $user = user_load($uid + 3); + ++$revision_id; + $node->title .= " rev2 $revision_id"; + $node->body = str_repeat("node revision body ($node->type) - $i", 100); + $node->log = "added $i revision"; + $node->taxonomy = $node_terms; + node_save($node); + } +} + +// Create poll content +for ($i = 0; $i < 12; $i++) { + $uid = intval($i / 4) + 3; + $user = user_load($uid); + $node = new stdClass(); + $node->uid = $uid; + $node->type = 'poll'; + $node->sticky = 0; + $node->title = "poll title $i"; + $type = node_get_types('type', $node->type); + if ($type->has_body) { + $node->body = str_repeat("node body ($node->type) - $i", 100); + $node->teaser = node_teaser($node->body); + $node->filter = variable_get('filter_default_format', 1); + $node->format = FILTER_FORMAT_DEFAULT; + } + $node->status = intval($i / 2) % 2; + $node->language = ''; + $node->revision = 1; + $node->promote = $i % 2; + $node->created = $now + $i * 43200; + $node->log = "added $i poll"; + + $nbchoices = ($i % 4) + 2; + for ($c = 0; $c < $nbchoices; $c++) { + $node->choice[] = array('chtext' => "Choice $c for poll $i"); + } + node_save($node); + path_set_alias("node/$node->nid", "content/poll/$i"); + path_set_alias("node/$node->nid/results", "content/poll/$i/results"); + + // Add some votes + for ($v = 0; $v < ($i % 4) + 5; $v++) { + $c = $v % $nbchoices; + $form_state = array(); + $form_state['values']['choice'] = $c; + $form_state['values']['op'] = t('Vote'); + drupal_execute('poll_view_voting', $form_state, $node); + } +} + +$uid = 6; +$user = user_load($uid); +$node = new stdClass(); +$node->uid = $uid; +$node->type = 'broken'; +$node->sticky = 0; +$node->title = "node title 24"; +$node->body = str_repeat("node body ($node->type) - 37", 100); +$node->teaser = node_teaser($node->body); +$node->filter = variable_get('filter_default_format', 1); +$node->format = FILTER_FORMAT_DEFAULT; +$node->status = 1; +$node->language = ''; +$node->revision = 0; +$node->promote = 0; +$node->created = 1263769200; +$node->log = "added $i node"; +node_save($node); +path_set_alias("node/$node->nid", "content/1263769200"); diff --git a/docroot/scripts/generate-d7-content.sh b/docroot/scripts/generate-d7-content.sh new file mode 100644 index 00000000..1e1d13fa --- /dev/null +++ b/docroot/scripts/generate-d7-content.sh @@ -0,0 +1,320 @@ +#!/usr/bin/env php +fields(array('uid', 'name', 'pass', 'mail', 'status', 'created', 'access')); +for ($i = 0; $i < 6; $i++) { + $name = "test user $i"; + $pass = md5("test PassW0rd $i !(.)"); + $mail = "test$i@example.com"; + $now = mktime(0, 0, 0, 1, $i + 1, 2010); + $query->values(array(db_next_id(), $name, user_hash_password($pass), $mail, 1, $now, $now)); +} +$query->execute(); + +// Create vocabularies and terms. + +if (module_exists('taxonomy')) { + $terms = array(); + + // All possible combinations of these vocabulary properties. + $hierarchy = array(0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2); + $multiple = array(0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1); + $required = array(0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1); + + $voc_id = 0; + $term_id = 0; + for ($i = 0; $i < 24; $i++) { + $vocabulary = new stdClass; + ++$voc_id; + $vocabulary->name = "vocabulary $voc_id (i=$i)"; + $vocabulary->machine_name = 'vocabulary_' . $voc_id . '_' . $i; + $vocabulary->description = "description of ". $vocabulary->name; + $vocabulary->multiple = $multiple[$i % 12]; + $vocabulary->required = $required[$i % 12]; + $vocabulary->relations = 1; + $vocabulary->hierarchy = $hierarchy[$i % 12]; + $vocabulary->weight = $i; + taxonomy_vocabulary_save($vocabulary); + $field = array( + 'field_name' => 'taxonomy_'. $vocabulary->machine_name, + 'module' => 'taxonomy', + 'type' => 'taxonomy_term_reference', + 'cardinality' => $vocabulary->multiple || $vocabulary->tags ? FIELD_CARDINALITY_UNLIMITED : 1, + 'settings' => array( + 'required' => $vocabulary->required ? TRUE : FALSE, + 'allowed_values' => array( + array( + 'vocabulary' => $vocabulary->machine_name, + 'parent' => 0, + ), + ), + ), + ); + field_create_field($field); + $node_types = $i > 11 ? array('page') : array_keys(node_type_get_types()); + foreach ($node_types as $bundle) { + $instance = array( + 'label' => $vocabulary->name, + 'field_name' => $field['field_name'], + 'bundle' => $bundle, + 'entity_type' => 'node', + 'settings' => array(), + 'description' => $vocabulary->help, + 'required' => $vocabulary->required, + 'widget' => array(), + 'display' => array( + 'default' => array( + 'type' => 'taxonomy_term_reference_link', + 'weight' => 10, + ), + 'teaser' => array( + 'type' => 'taxonomy_term_reference_link', + 'weight' => 10, + ), + ), + ); + if ($vocabulary->tags) { + $instance['widget'] = array( + 'type' => 'taxonomy_autocomplete', + 'module' => 'taxonomy', + 'settings' => array( + 'size' => 60, + 'autocomplete_path' => 'taxonomy/autocomplete', + ), + ); + } + else { + $instance['widget'] = array( + 'type' => 'options_select', + 'settings' => array(), + ); + } + field_create_instance($instance); + } + $parents = array(); + // Vocabularies without hierarchy get one term; single parent vocabularies + // get one parent and one child term. Multiple parent vocabularies get + // three terms: t0, t1, t2 where t0 is a parent of both t1 and t2. + for ($j = 0; $j < $vocabulary->hierarchy + 1; $j++) { + $term = new stdClass; + $term->vocabulary_machine_name = $vocabulary->machine_name; + // For multiple parent vocabularies, omit the t0-t1 relation, otherwise + // every parent in the vocabulary is a parent. + $term->parent = $vocabulary->hierarchy == 2 && i == 1 ? array() : $parents; + ++$term_id; + $term->name = "term $term_id of vocabulary $voc_id (j=$j)"; + $term->description = 'description of ' . $term->name; + $term->format = 'filtered_html'; + $term->weight = $i * 3 + $j; + taxonomy_term_save($term); + $terms[] = $term->tid; + $term_vocabs[$term->tid] = 'taxonomy_' . $vocabulary->machine_name; + $parents[] = $term->tid; + } + } +} + +$node_id = 0; +$revision_id = 0; +module_load_include('inc', 'node', 'node.pages'); +for ($i = 0; $i < 24; $i++) { + $uid = intval($i / 8) + 3; + $user = user_load($uid); + $node = new stdClass(); + $node->uid = $uid; + $node->type = $i < 12 ? 'page' : 'story'; + $node->sticky = 0; + ++$node_id; + ++$revision_id; + $node->title = "node title $node_id rev $revision_id (i=$i)"; + $node->language = LANGUAGE_NONE; + $body_text = str_repeat("node body ($node->type) - $i", 100); + $node->body[$node->language][0]['value'] = $body_text; + $node->body[$node->language][0]['summary'] = text_summary($body_text); + $node->body[$node->language][0]['format'] = 'filtered_html'; + $node->status = intval($i / 4) % 2; + $node->revision = $i < 12; + $node->promote = $i % 2; + $node->created = $now + $i * 86400; + $node->log = "added $i node"; + // Make every term association different a little. For nodes with revisions, + // make the initial revision have a different set of terms than the + // newest revision. + $items = array(); + if (module_exists('taxonomy')) { + if ($node->revision) { + $node_terms = array($terms[$i], $terms[47-$i]); + } + else { + $node_terms = $terms; + unset($node_terms[$i], $node_terms[47 - $i]); + } + foreach ($node_terms as $tid) { + $field_name = $term_vocabs[$tid]; + $node->{$field_name}[LANGUAGE_NONE][] = array('tid' => $tid); + } + } + $node->path = array('alias' => "content/$node->created"); + node_save($node); + if ($node->revision) { + $user = user_load($uid + 3); + ++$revision_id; + $node->title .= " rev2 $revision_id"; + $body_text = str_repeat("node revision body ($node->type) - $i", 100); + $node->body[$node->language][0]['value'] = $body_text; + $node->body[$node->language][0]['summary'] = text_summary($body_text); + $node->body[$node->language][0]['format'] = 'filtered_html'; + $node->log = "added $i revision"; + $node_terms = $terms; + unset($node_terms[$i], $node_terms[47 - $i]); + foreach ($node_terms as $tid) { + $field_name = $term_vocabs[$tid]; + $node->{$field_name}[LANGUAGE_NONE][] = array('tid' => $tid); + } + node_save($node); + } +} + +if (module_exists('poll')) { + // Create poll content. + for ($i = 0; $i < 12; $i++) { + $uid = intval($i / 4) + 3; + $user = user_load($uid); + $node = new stdClass(); + $node->uid = $uid; + $node->type = 'poll'; + $node->sticky = 0; + $node->title = "poll title $i"; + $node->language = LANGUAGE_NONE; + $node->status = intval($i / 2) % 2; + $node->revision = 1; + $node->promote = $i % 2; + $node->created = REQUEST_TIME + $i * 43200; + $node->runtime = 0; + $node->active = 1; + $node->log = "added $i poll"; + $node->path = array('alias' => "content/poll/$i"); + + $nbchoices = ($i % 4) + 2; + for ($c = 0; $c < $nbchoices; $c++) { + $node->choice[] = array('chtext' => "Choice $c for poll $i", 'chvotes' => 0, 'weight' => 0); + } + node_save($node); + $path = array( + 'alias' => "content/poll/$i/results", + 'source' => "node/$node->nid/results", + ); + path_save($path); + + // Add some votes. + $node = node_load($node->nid); + $choices = array_keys($node->choice); + $original_user = $GLOBALS['user']; + for ($v = 0; $v < ($i % 4); $v++) { + drupal_static_reset('ip_address'); + $_SERVER['REMOTE_ADDR'] = "127.0.$v.1"; + $GLOBALS['user'] = drupal_anonymous_user();// We should have already allowed anon to vote. + $c = $v % $nbchoices; + $form_state = array(); + $form_state['values']['choice'] = $choices[$c]; + $form_state['values']['op'] = t('Vote'); + drupal_form_submit('poll_view_voting', $form_state, $node); + } + } +} + +// Test that upgrade works even on a bundle whose parent module was disabled. +// This is simulated by creating an existing content type and changing the +// bundle to another type through direct database update queries. +$node_type = 'broken'; +$uid = 6; +$user = user_load($uid); +$node = new stdClass(); +$node->uid = $uid; +$node->type = 'article'; +$body_text = str_repeat("node body ($node_type) - 37", 100); +$node->sticky = 0; +$node->title = "node title 24"; +$node->language = LANGUAGE_NONE; +$node->body[$node->language][0]['value'] = $body_text; +$node->body[$node->language][0]['summary'] = text_summary($body_text); +$node->body[$node->language][0]['format'] = 'filtered_html'; +$node->status = 1; +$node->revision = 0; +$node->promote = 0; +$node->created = 1263769200; +$node->log = "added a broken node"; +$node->path = array('alias' => "content/1263769200"); +node_save($node); +db_update('node') + ->fields(array( + 'type' => $node_type, + )) + ->condition('nid', $node->nid) + ->execute(); +if (db_table_exists('field_data_body')) { + db_update('field_data_body') + ->fields(array( + 'bundle' => $node_type, + )) + ->condition('entity_id', $node->nid) + ->condition('entity_type', 'node') + ->execute(); + db_update('field_revision_body') + ->fields(array( + 'bundle' => $node_type, + )) + ->condition('entity_id', $node->nid) + ->condition('entity_type', 'node') + ->execute(); +} +db_update('field_config_instance') + ->fields(array( + 'bundle' => $node_type, + )) + ->condition('bundle', 'article') + ->execute(); diff --git a/docroot/scripts/password-hash.sh b/docroot/scripts/password-hash.sh new file mode 100755 index 00000000..1afe4387 --- /dev/null +++ b/docroot/scripts/password-hash.sh @@ -0,0 +1,90 @@ +#!/usr/bin/env php +" +Example: {$script} "mynewpassword" + +All arguments are long options. + + --help Print this page. + + --root + + Set the working directory for the script to the specified path. + To execute this script this has to be the root directory of your + Drupal installation, e.g. /home/www/foo/drupal (assuming Drupal + running on Unix). Use surrounding quotation marks on Windows. + + "" ["" ["" ...]] + + One or more plan-text passwords enclosed by double quotes. The + output hash may be manually entered into the {users}.pass field to + change a password via SQL to a known value. + +To run this script without the --root argument invoke it from the root directory +of your Drupal installation as + + ./scripts/{$script} +\n +EOF; + exit; +} + +$passwords = array(); + +// Parse invocation arguments. +while ($param = array_shift($_SERVER['argv'])) { + switch ($param) { + case '--root': + // Change the working directory. + $path = array_shift($_SERVER['argv']); + if (is_dir($path)) { + chdir($path); + } + break; + default: + // Add a password to the list to be processed. + $passwords[] = $param; + break; + } +} + +define('DRUPAL_ROOT', getcwd()); + +include_once DRUPAL_ROOT . '/includes/password.inc'; +include_once DRUPAL_ROOT . '/includes/bootstrap.inc'; + +foreach ($passwords as $password) { + print("\npassword: $password \t\thash: ". user_hash_password($password) ."\n"); +} +print("\n"); + diff --git a/docroot/scripts/run-tests.sh b/docroot/scripts/run-tests.sh new file mode 100755 index 00000000..9078168a --- /dev/null +++ b/docroot/scripts/run-tests.sh @@ -0,0 +1,724 @@ + $tests) { + $all_tests = array_merge($all_tests, array_keys($tests)); +} +$test_list = array(); + +if ($args['list']) { + // Display all available tests. + echo "\nAvailable test groups & classes\n"; + echo "-------------------------------\n\n"; + foreach ($groups as $group => $tests) { + echo $group . "\n"; + foreach ($tests as $class => $info) { + echo " - " . $info['name'] . ' (' . $class . ')' . "\n"; + } + } + exit; +} + +$test_list = simpletest_script_get_test_list(); + +// Try to allocate unlimited time to run the tests. +drupal_set_time_limit(0); + +simpletest_script_reporter_init(); + +// Setup database for test results. +$test_id = db_insert('simpletest_test_id')->useDefaults(array('test_id'))->execute(); + +// Execute tests. +simpletest_script_execute_batch($test_id, simpletest_script_get_test_list()); + +// Retrieve the last database prefix used for testing and the last test class +// that was run from. Use the information to read the lgo file in case any +// fatal errors caused the test to crash. +list($last_prefix, $last_test_class) = simpletest_last_test_get($test_id); +simpletest_log_read($test_id, $last_prefix, $last_test_class); + +// Stop the timer. +simpletest_script_reporter_timer_stop(); + +// Display results before database is cleared. +simpletest_script_reporter_display_results(); + +if ($args['xml']) { + simpletest_script_reporter_write_xml_results(); +} + +// Cleanup our test results. +simpletest_clean_results_table($test_id); + +// Test complete, exit. +exit; + +/** + * Print help text. + */ +function simpletest_script_help() { + global $args; + + echo << +Example: {$args['script']} Profile + +All arguments are long options. + + --help Print this page. + + --list Display all available test groups. + + --clean Cleans up database tables or directories from previous, failed, + tests and then exits (no tests are run). + + --url Immediately precedes a URL to set the host and path. You will + need this parameter if Drupal is in a subdirectory on your + localhost and you have not set \$base_url in settings.php. Tests + can be run under SSL by including https:// in the URL. + + --php The absolute path to the PHP executable. Usually not needed. + + --concurrency [num] + + Run tests in parallel, up to [num] tests at a time. + + --all Run all available tests. + + --class Run tests identified by specific class names, instead of group names. + + --file Run tests identified by specific file names, instead of group names. + Specify the path and the extension (i.e. 'modules/user/user.test'). + + --xml + + If provided, test results will be written as xml files to this path. + + --color Output text format results with color highlighting. + + --verbose Output detailed assertion messages in addition to summary. + + [,[, ...]] + + One or more tests to be run. By default, these are interpreted + as the names of test groups as shown at + ?q=admin/config/development/testing. + These group names typically correspond to module names like "User" + or "Profile" or "System", but there is also a group "XML-RPC". + If --class is specified then these are interpreted as the names of + specific test classes whose test methods will be run. Tests must + be separated by commas. Ignored if --all is specified. + +To run this script you will normally invoke it from the root directory of your +Drupal installation as the webserver user (differs per configuration), or root: + +sudo -u [wwwrun|www-data|etc] php ./scripts/{$args['script']} + --url http://example.com/ --all +sudo -u [wwwrun|www-data|etc] php ./scripts/{$args['script']} + --url http://example.com/ --class BlockTestCase +\n +EOF; +} + +/** + * Parse execution argument and ensure that all are valid. + * + * @return The list of arguments. + */ +function simpletest_script_parse_args() { + // Set default values. + $args = array( + 'script' => '', + 'help' => FALSE, + 'list' => FALSE, + 'clean' => FALSE, + 'url' => '', + 'php' => '', + 'concurrency' => 1, + 'all' => FALSE, + 'class' => FALSE, + 'file' => FALSE, + 'color' => FALSE, + 'verbose' => FALSE, + 'test_names' => array(), + // Used internally. + 'test-id' => 0, + 'execute-test' => '', + 'xml' => '', + ); + + // Override with set values. + $args['script'] = basename(array_shift($_SERVER['argv'])); + + $count = 0; + while ($arg = array_shift($_SERVER['argv'])) { + if (preg_match('/--(\S+)/', $arg, $matches)) { + // Argument found. + if (array_key_exists($matches[1], $args)) { + // Argument found in list. + $previous_arg = $matches[1]; + if (is_bool($args[$previous_arg])) { + $args[$matches[1]] = TRUE; + } + else { + $args[$matches[1]] = array_shift($_SERVER['argv']); + } + // Clear extraneous values. + $args['test_names'] = array(); + $count++; + } + else { + // Argument not found in list. + simpletest_script_print_error("Unknown argument '$arg'."); + exit; + } + } + else { + // Values found without an argument should be test names. + $args['test_names'] += explode(',', $arg); + $count++; + } + } + + // Validate the concurrency argument + if (!is_numeric($args['concurrency']) || $args['concurrency'] <= 0) { + simpletest_script_print_error("--concurrency must be a strictly positive integer."); + exit; + } + + return array($args, $count); +} + +/** + * Initialize script variables and perform general setup requirements. + */ +function simpletest_script_init($server_software) { + global $args, $php; + + $host = 'localhost'; + $path = ''; + // Determine location of php command automatically, unless a command line argument is supplied. + if (!empty($args['php'])) { + $php = $args['php']; + } + elseif ($php_env = getenv('_')) { + // '_' is an environment variable set by the shell. It contains the command that was executed. + $php = $php_env; + } + elseif ($sudo = getenv('SUDO_COMMAND')) { + // 'SUDO_COMMAND' is an environment variable set by the sudo program. + // Extract only the PHP interpreter, not the rest of the command. + list($php, ) = explode(' ', $sudo, 2); + } + else { + simpletest_script_print_error('Unable to automatically determine the path to the PHP interpreter. Supply the --php command line argument.'); + simpletest_script_help(); + exit(); + } + + // Get URL from arguments. + if (!empty($args['url'])) { + $parsed_url = parse_url($args['url']); + $host = $parsed_url['host'] . (isset($parsed_url['port']) ? ':' . $parsed_url['port'] : ''); + $path = isset($parsed_url['path']) ? $parsed_url['path'] : ''; + + // If the passed URL schema is 'https' then setup the $_SERVER variables + // properly so that testing will run under HTTPS. + if ($parsed_url['scheme'] == 'https') { + $_SERVER['HTTPS'] = 'on'; + } + } + + $_SERVER['HTTP_HOST'] = $host; + $_SERVER['REMOTE_ADDR'] = '127.0.0.1'; + $_SERVER['SERVER_ADDR'] = '127.0.0.1'; + $_SERVER['SERVER_SOFTWARE'] = $server_software; + $_SERVER['SERVER_NAME'] = 'localhost'; + $_SERVER['REQUEST_URI'] = $path .'/'; + $_SERVER['REQUEST_METHOD'] = 'GET'; + $_SERVER['SCRIPT_NAME'] = $path .'/index.php'; + $_SERVER['PHP_SELF'] = $path .'/index.php'; + $_SERVER['HTTP_USER_AGENT'] = 'Drupal command line'; + + if (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') { + // Ensure that any and all environment variables are changed to https://. + foreach ($_SERVER as $key => $value) { + $_SERVER[$key] = str_replace('http://', 'https://', $_SERVER[$key]); + } + } + + chdir(realpath(dirname(__FILE__) . '/..')); + define('DRUPAL_ROOT', getcwd()); + require_once DRUPAL_ROOT . '/includes/bootstrap.inc'; +} + +/** + * Execute a batch of tests. + */ +function simpletest_script_execute_batch($test_id, $test_classes) { + global $args; + + // Multi-process execution. + $children = array(); + while (!empty($test_classes) || !empty($children)) { + while (count($children) < $args['concurrency']) { + if (empty($test_classes)) { + break; + } + + // Fork a child process. + $test_class = array_shift($test_classes); + $command = simpletest_script_command($test_id, $test_class); + $process = proc_open($command, array(), $pipes, NULL, NULL, array('bypass_shell' => TRUE)); + + if (!is_resource($process)) { + echo "Unable to fork test process. Aborting.\n"; + exit; + } + + // Register our new child. + $children[] = array( + 'process' => $process, + 'class' => $test_class, + 'pipes' => $pipes, + ); + } + + // Wait for children every 200ms. + usleep(200000); + + // Check if some children finished. + foreach ($children as $cid => $child) { + $status = proc_get_status($child['process']); + if (empty($status['running'])) { + // The child exited, unregister it. + proc_close($child['process']); + if ($status['exitcode']) { + echo 'FATAL ' . $test_class . ': test runner returned a non-zero error code (' . $status['exitcode'] . ').' . "\n"; + } + unset($children[$cid]); + } + } + } +} + +/** + * Bootstrap Drupal and run a single test. + */ +function simpletest_script_run_one_test($test_id, $test_class) { + try { + // Bootstrap Drupal. + drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); + + simpletest_classloader_register(); + + $test = new $test_class($test_id); + $test->run(); + $info = $test->getInfo(); + + $had_fails = (isset($test->results['#fail']) && $test->results['#fail'] > 0); + $had_exceptions = (isset($test->results['#exception']) && $test->results['#exception'] > 0); + $status = ($had_fails || $had_exceptions ? 'fail' : 'pass'); + simpletest_script_print($info['name'] . ' ' . _simpletest_format_summary_line($test->results) . "\n", simpletest_script_color_code($status)); + + // Finished, kill this runner. + exit(0); + } + catch (Exception $e) { + echo (string) $e; + exit(1); + } +} + +/** + * Return a command used to run a test in a separate process. + * + * @param $test_id + * The current test ID. + * @param $test_class + * The name of the test class to run. + */ +function simpletest_script_command($test_id, $test_class) { + global $args, $php; + + $command = escapeshellarg($php) . ' ' . escapeshellarg('./scripts/' . $args['script']) . ' --url ' . escapeshellarg($args['url']); + if ($args['color']) { + $command .= ' --color'; + } + $command .= " --php " . escapeshellarg($php) . " --test-id $test_id --execute-test " . escapeshellarg($test_class); + return $command; +} + +/** + * Get list of tests based on arguments. If --all specified then + * returns all available tests, otherwise reads list of tests. + * + * Will print error and exit if no valid tests were found. + * + * @return List of tests. + */ +function simpletest_script_get_test_list() { + global $args, $all_tests, $groups; + + $test_list = array(); + if ($args['all']) { + $test_list = $all_tests; + } + else { + if ($args['class']) { + // Check for valid class names. + $test_list = array(); + foreach ($args['test_names'] as $test_class) { + if (class_exists($test_class)) { + $test_list[] = $test_class; + } + else { + $groups = simpletest_test_get_all(); + $all_classes = array(); + foreach ($groups as $group) { + $all_classes = array_merge($all_classes, array_keys($group)); + } + simpletest_script_print_error('Test class not found: ' . $test_class); + simpletest_script_print_alternatives($test_class, $all_classes, 6); + exit(1); + } + } + } + elseif ($args['file']) { + $files = array(); + foreach ($args['test_names'] as $file) { + $files[drupal_realpath($file)] = 1; + } + + // Check for valid class names. + foreach ($all_tests as $class_name) { + $refclass = new ReflectionClass($class_name); + $file = $refclass->getFileName(); + if (isset($files[$file])) { + $test_list[] = $class_name; + } + } + } + else { + // Check for valid group names and get all valid classes in group. + foreach ($args['test_names'] as $group_name) { + if (isset($groups[$group_name])) { + $test_list = array_merge($test_list, array_keys($groups[$group_name])); + } + else { + simpletest_script_print_error('Test group not found: ' . $group_name); + simpletest_script_print_alternatives($group_name, array_keys($groups)); + exit(1); + } + } + } + } + + if (empty($test_list)) { + simpletest_script_print_error('No valid tests were specified.'); + exit; + } + return $test_list; +} + +/** + * Initialize the reporter. + */ +function simpletest_script_reporter_init() { + global $args, $all_tests, $test_list, $results_map; + + $results_map = array( + 'pass' => 'Pass', + 'fail' => 'Fail', + 'exception' => 'Exception' + ); + + echo "\n"; + echo "Drupal test run\n"; + echo "---------------\n"; + echo "\n"; + + // Tell the user about what tests are to be run. + if ($args['all']) { + echo "All tests will run.\n\n"; + } + else { + echo "Tests to be run:\n"; + foreach ($test_list as $class_name) { + $info = call_user_func(array($class_name, 'getInfo')); + echo " - " . $info['name'] . ' (' . $class_name . ')' . "\n"; + } + echo "\n"; + } + + echo "Test run started:\n"; + echo " " . format_date($_SERVER['REQUEST_TIME'], 'long') . "\n"; + timer_start('run-tests'); + echo "\n"; + + echo "Test summary\n"; + echo "------------\n"; + echo "\n"; +} + +/** + * Display jUnit XML test results. + */ +function simpletest_script_reporter_write_xml_results() { + global $args, $test_id, $results_map; + + $results = db_query("SELECT * FROM {simpletest} WHERE test_id = :test_id ORDER BY test_class, message_id", array(':test_id' => $test_id)); + + $test_class = ''; + $xml_files = array(); + + foreach ($results as $result) { + if (isset($results_map[$result->status])) { + if ($result->test_class != $test_class) { + // We've moved onto a new class, so write the last classes results to a file: + if (isset($xml_files[$test_class])) { + file_put_contents($args['xml'] . '/' . $test_class . '.xml', $xml_files[$test_class]['doc']->saveXML()); + unset($xml_files[$test_class]); + } + $test_class = $result->test_class; + if (!isset($xml_files[$test_class])) { + $doc = new DomDocument('1.0'); + $root = $doc->createElement('testsuite'); + $root = $doc->appendChild($root); + $xml_files[$test_class] = array('doc' => $doc, 'suite' => $root); + } + } + + // For convenience: + $dom_document = &$xml_files[$test_class]['doc']; + + // Create the XML element for this test case: + $case = $dom_document->createElement('testcase'); + $case->setAttribute('classname', $test_class); + list($class, $name) = explode('->', $result->function, 2); + $case->setAttribute('name', $name); + + // Passes get no further attention, but failures and exceptions get to add more detail: + if ($result->status == 'fail') { + $fail = $dom_document->createElement('failure'); + $fail->setAttribute('type', 'failure'); + $fail->setAttribute('message', $result->message_group); + $text = $dom_document->createTextNode($result->message); + $fail->appendChild($text); + $case->appendChild($fail); + } + elseif ($result->status == 'exception') { + // In the case of an exception the $result->function may not be a class + // method so we record the full function name: + $case->setAttribute('name', $result->function); + + $fail = $dom_document->createElement('error'); + $fail->setAttribute('type', 'exception'); + $fail->setAttribute('message', $result->message_group); + $full_message = $result->message . "\n\nline: " . $result->line . "\nfile: " . $result->file; + $text = $dom_document->createTextNode($full_message); + $fail->appendChild($text); + $case->appendChild($fail); + } + // Append the test case XML to the test suite: + $xml_files[$test_class]['suite']->appendChild($case); + } + } + // The last test case hasn't been saved to a file yet, so do that now: + if (isset($xml_files[$test_class])) { + file_put_contents($args['xml'] . '/' . $test_class . '.xml', $xml_files[$test_class]['doc']->saveXML()); + unset($xml_files[$test_class]); + } +} + +/** + * Stop the test timer. + */ +function simpletest_script_reporter_timer_stop() { + echo "\n"; + $end = timer_stop('run-tests'); + echo "Test run duration: " . format_interval($end['time'] / 1000); + echo "\n\n"; +} + +/** + * Display test results. + */ +function simpletest_script_reporter_display_results() { + global $args, $test_id, $results_map; + + if ($args['verbose']) { + // Report results. + echo "Detailed test results\n"; + echo "---------------------\n"; + + $results = db_query("SELECT * FROM {simpletest} WHERE test_id = :test_id ORDER BY test_class, message_id", array(':test_id' => $test_id)); + $test_class = ''; + foreach ($results as $result) { + if (isset($results_map[$result->status])) { + if ($result->test_class != $test_class) { + // Display test class every time results are for new test class. + echo "\n\n---- $result->test_class ----\n\n\n"; + $test_class = $result->test_class; + + // Print table header. + echo "Status Group Filename Line Function \n"; + echo "--------------------------------------------------------------------------------\n"; + } + + simpletest_script_format_result($result); + } + } + } +} + +/** + * Format the result so that it fits within the default 80 character + * terminal size. + * + * @param $result The result object to format. + */ +function simpletest_script_format_result($result) { + global $results_map, $color; + + $summary = sprintf("%-9.9s %-10.10s %-17.17s %4.4s %-35.35s\n", + $results_map[$result->status], $result->message_group, basename($result->file), $result->line, $result->function); + + simpletest_script_print($summary, simpletest_script_color_code($result->status)); + + $lines = explode("\n", wordwrap(trim(strip_tags($result->message)), 76)); + foreach ($lines as $line) { + echo " $line\n"; + } +} + +/** + * Print error message prefixed with " ERROR: " and displayed in fail color + * if color output is enabled. + * + * @param $message The message to print. + */ +function simpletest_script_print_error($message) { + simpletest_script_print(" ERROR: $message\n", SIMPLETEST_SCRIPT_COLOR_FAIL); +} + +/** + * Print a message to the console, if color is enabled then the specified + * color code will be used. + * + * @param $message The message to print. + * @param $color_code The color code to use for coloring. + */ +function simpletest_script_print($message, $color_code) { + global $args; + if ($args['color']) { + echo "\033[" . $color_code . "m" . $message . "\033[0m"; + } + else { + echo $message; + } +} + +/** + * Get the color code associated with the specified status. + * + * @param $status The status string to get code for. + * @return Color code. + */ +function simpletest_script_color_code($status) { + switch ($status) { + case 'pass': + return SIMPLETEST_SCRIPT_COLOR_PASS; + case 'fail': + return SIMPLETEST_SCRIPT_COLOR_FAIL; + case 'exception': + return SIMPLETEST_SCRIPT_COLOR_EXCEPTION; + } + return 0; // Default formatting. +} + +/** + * Prints alternative test names. + * + * Searches the provided array of string values for close matches based on the + * Levenshtein algorithm. + * + * @see http://php.net/manual/en/function.levenshtein.php + * + * @param string $string + * A string to test. + * @param array $array + * A list of strings to search. + * @param int $degree + * The matching strictness. Higher values return fewer matches. A value of + * 4 means that the function will return strings from $array if the candidate + * string in $array would be identical to $string by changing 1/4 or fewer of + * its characters. + */ +function simpletest_script_print_alternatives($string, $array, $degree = 4) { + $alternatives = array(); + foreach ($array as $item) { + $lev = levenshtein($string, $item); + if ($lev <= strlen($item) / $degree || FALSE !== strpos($string, $item)) { + $alternatives[] = $item; + } + } + if (!empty($alternatives)) { + simpletest_script_print(" Did you mean?\n", SIMPLETEST_SCRIPT_COLOR_FAIL); + foreach ($alternatives as $alternative) { + simpletest_script_print(" - $alternative\n", SIMPLETEST_SCRIPT_COLOR_FAIL); + } + } +} diff --git a/docroot/scripts/test.script b/docroot/scripts/test.script new file mode 100644 index 00000000..a45f3f0c --- /dev/null +++ b/docroot/scripts/test.script @@ -0,0 +1,4 @@ +This file is for testing purposes only. + +It is used to test the functionality of drupal_get_filename(). See +BootstrapGetFilenameTestCase::testDrupalGetFilename() for more information. diff --git a/docroot/sites/all/libraries/datatables/Readme.txt b/docroot/sites/all/libraries/datatables/Readme.txt new file mode 100644 index 00000000..96a47cbd --- /dev/null +++ b/docroot/sites/all/libraries/datatables/Readme.txt @@ -0,0 +1,11 @@ +This DataTables plugin (v1.9.x) for jQuery was developed out of the desire to allow highly configurable access to HTML tables with advanced access features. + +For detailed installation, usage and API instructions, please refer to the DataTables web-pages: http://www.datatables.net + +Questions, feature requests and bug reports (etc) can all be asked on the DataTables forums: http://www.datatables.net/forums/ + +The DataTables source can be found in the media/js/ directory of this archive. + +DataTables is released with dual licensing, using the GPL v2 (license-gpl2.txt) and an BSD style license (license-bsd.txt). You may select which of the two licenses you wish to use DataTables under. Please see the corresponding license file for details of these licenses. You are free to use, modify and distribute this software, but all copyright information must remain. + +If you discover any bugs in DataTables, have any suggestions for improvements or even if you just like using it, please free to get in touch with me: www.datatables.net/contact \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/component.json b/docroot/sites/all/libraries/datatables/component.json new file mode 100644 index 00000000..b292dc32 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/component.json @@ -0,0 +1,11 @@ +{ + "name": "DataTables", + "version": "1.9.4", + "main": [ + "./media/js/jquery.dataTables.js", + "./media/css/jquery.dataTables.css", + ], + "dependencies": { + "jquery": "~1.8.0" + } +} diff --git a/docroot/sites/all/libraries/datatables/docs/34cdb56b2c.html b/docroot/sites/all/libraries/datatables/docs/34cdb56b2c.html new file mode 100644 index 00000000..093eb7b6 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/docs/34cdb56b2c.html @@ -0,0 +1,1972 @@ + + + + + Namespace: oApi - documentation + + + + + + + + + +
        + + +
        +

        Namespace: oApi

        +

        Ancestry: DataTable# » oApi

        +
        + DataTables v1.9.4 documentation +
        +
        + + + +
        +

        Navigation

        + +
        + + Hiding private elements + (toggle) + +
        +
        + + Showing extended elements + (toggle) + +
        +
        + +
        + +
        + +

        Reference to internal functions for use by plug-in developers. Note that these +methods are references to internal functions and are considered to be private. +If you use these methods, be aware that they are liable to change between versions +(check the upgrade notes).

        + +
        + +
        + + +
        + +

        Summary

        + +

        Properties - static

        + +
        +
        <static> _fnJsonString

        JSON stringify. If JSON.stringify it provided by the browser, json2.js or any other +library, then we use that as it is fast, safe and accurate. If the function isn't +available then we need to built it ourselves - the inspiration for this function comes +from Craig Buckler ( http://www.sitepoint.com/javascript-json-serialization/ ). It is +not perfect and absolutely should not be used as a replacement to json2.js - but it does +do what we need, without requiring a dependency for DataTables.

        +

        Methods - static

        + +
        +
        <static> _fnAddColumn(oSettings, nTh)

        Add a column to the list used for the table with default values

        <static> _fnAddData(oSettings, aData) → {int}

        Add a data array to the table, creating DOM node etc. This is the parallel to +_fnGatherData, but for adding rows from a Javascript source, rather than a +DOM source.

        <static> _fnAddOptionsHtml(oSettings)

        Add the options to the page HTML for the table

        <static> _fnAdjustColumnSizing(oSettings)

        Adjust the table column widths for new data. Note: you would probably want to +do a redraw after calling this function!

        <static> _fnAjaxParameters(oSettings) → {bool}

        Build up the parameters in an object needed for a server-side processing request

        <static> _fnAjaxUpdate(oSettings) → {boolean}

        Update the table using an Ajax call

        <static> _fnAjaxUpdateDraw(oSettings, json)

        Data the data from the server (nuking the old) and redraw the table

        <static> _fnApplyColumnDefs(oSettings, aoColDefs, aoCols, fn)

        Take the column definitions and static columns arrays and calculate how +they relate to column indexes. The callback function will then apply the +definition found for a column to a suitable configuration object.

        <static> _fnApplyToChildren(fn, array, array)

        Apply a given function to the display child nodes of an element array (typically +TD children of TR rows

        <static> _fnBindAction(n, oData, fn)

        Bind an event handers to allow a click or return key to activate the callback. +This is good for accessibility since a return on the keyboard will have the +same effect as a click, if the element has focus.

        <static> _fnBrowserDetect(oSettings)

        From some browsers (specifically IE6/7) we need special handling to work around browser +bugs - this function is used to detect when these workarounds are needed.

        <static> _fnBuildHead(oSettings)

        Create the HTML header for the table

        <static> _fnBuildSearchArray(oSettings, iMaster)

        Create an array which can be quickly search through

        <static> _fnBuildSearchRow(oSettings, aData)

        Create a searchable string from a single data row

        <static> _fnCalculateColumnWidths(oSettings)

        Calculate the width of columns for the table

        <static> _fnCalculateEnd(oSettings)

        Recalculate the end point based on the start point

        <static> _fnCallbackFire(oSettings, sStore, sTrigger, aArgs)

        Fire callback functions and trigger events. Note that the loop over the callback +array store is done backwards! Further note that you do not want to fire off triggers +in time sensitive applications (for example cell creation) as its slow.

        <static> _fnCallbackReg(oSettings, sStore, fn, sName)

        Register a callback function. Easily allows a callback function to be added to +an array store of callback functions that can then all be called together.

        <static> _fnClearTable(oSettings)

        Nuke the table

        <static> _fnColumnIndexToVisible(iMatch, oSettings) → {int}

        Covert the index of an index in the data array and convert it to the visible + column index (take account of hidden columns)

        <static> _fnColumnOptions(oSettings, iCol, oOptions)

        Apply options for a column

        <static> _fnColumnOrdering(oSettings) → {string}

        Get the column ordering that DataTables expects

        <static> _fnConvertToWidth(sWidth, nParent) → {int}

        Convert a CSS unit width to pixels (e.g. 2em)

        <static> _fnCreateCookie(sName, sValue, iSecs, sBaseName, fnCallback)

        Create a new cookie with a value to store the state of a table

        <static> _fnCreateTr(oSettings, iRow)

        Create a new TR element (and it's TD children) for a row

        <static> _fnDataToSearch(sData, sType) → {string}

        Convert raw data into something that the user can search on

        <static> _fnDeleteIndex(a, iTarget)

        Take an array of integers (index array) and remove a target integer (value - not +the key!)

        <static> _fnDetectHeader(array, nThead)

        Use the DOM source to create up an array of header cells. The idea here is to +create a layout grid (array) of rows x columns, which contains a reference +to the cell that that point in the grid (regardless of col/rowspan), such that +any column / row could be removed and the new grid constructed

        <static> _fnDetectType(sData) → {string}

        Get the sort type based on an input string

        <static> _fnDraw(oSettings)

        Insert the required TR nodes into the table for display

        <static> _fnDrawHead(oSettings, array, bIncludeHidden)

        Draw the header (or footer) element based on the column visibility states. The +methodology here is to use the layout array from _fnDetectHeader, modified for +the instantaneous column visibility, to construct the new layout. The grid is +traversed over cell at a time in a rows x columns grid fashion, although each +cell insert can cover multiple elements in the grid - which is tracks using the +aApplied array. Cell inserts in the grid will only occur where there isn't +already a cell in that position.

        <static> _fnEscapeRegex(sVal) → {string}

        scape a string such that it can be used in a regular expression

        <static> _fnExtend(oOut, oExtender) → {object}

        Extend objects - very similar to jQuery.extend, but deep copy objects, and shallow +copy arrays. The reason we need to do this, is that we don't want to deep copy array +init values (such as aaSorting) since the dev wouldn't be able to override them, but +we do want to deep copy arrays.

        <static> _fnExternApiFunc(sFunc) → {function}

        Create a wrapper function for exporting an internal functions to an external API.

        <static> _fnFeatureHtmlFilter(oSettings) → {node}

        Generate the node required for filtering text

        <static> _fnFeatureHtmlInfo(oSettings) → {node}

        Generate the node required for the info display

        <static> _fnFeatureHtmlLength(oSettings) → {node}

        Generate the node required for user display length changing

        <static> _fnFeatureHtmlPaginate(oSettings) → {node}

        Generate the node required for default pagination

        <static> _fnFeatureHtmlProcessing(oSettings) → {node}

        Generate the node required for the processing node

        <static> _fnFeatureHtmlTable(oSettings) → {node}

        Add any control elements for the table - specifically scrolling

        <static> _fnFilter(oSettings, sInput, iForce, bRegex, bSmart, bCaseInsensitive)

        Filter the data table based on user input and draw the table

        <static> _fnFilterColumn(oSettings, sInput, iColumn, bRegex, bSmart, bCaseInsensitive)

        Filter the table on a per-column basis

        <static> _fnFilterComplete(oSettings, oSearch, iForce)

        Filter the table using both the global filter and column based filtering

        <static> _fnFilterCreateSearch(sSearch, bRegex, bSmart, bCaseInsensitive) → {RegExp}

        Build a regular expression object suitable for searching a table

        <static> _fnFilterCustom(oSettings)

        Apply custom filtering functions

        <static> _fnGatherData(oSettings)

        Read in the data from the target table from the DOM

        <static> _fnGetCellData(oSettings, iRow, iCol, sSpecific) → {*}

        Get the data for a given cell from the internal cache, taking into account data mapping

        <static> _fnGetColumns(oSettings, sParam) → {array}

        Get an array of column indexes that match a given property

        <static> _fnGetDataMaster(oSettings)

        Return an array with the full table data

        <static> _fnGetMaxLenString(oSettings, iCol) → {string}

        Get the maximum strlen for each data column

        <static> _fnGetObjectDataFn(mSource) → {function}

        Return a function that can be used to get data from a source object, taking +into account the ability to use nested objects as a source

        <static> _fnGetRowData(oSettings, iRow, sSpecific, aiColumns) → {array}

        Get an array of data for a given row from the internal data cache

        <static> _fnGetTdNodes(oSettings, iIndividualRow) → {array}

        Return an flat array with all TD nodes for the table, or row

        <static> _fnGetTrNodes(oSettings) → {array}

        Return an array with the TR nodes for the table

        <static> _fnGetUniqueThs(oSettings, nHeader, aLayout)

        Get an array of unique th elements, one for each column

        <static> _fnGetWidestNode(oSettings, iCol) → {node}

        Get the widest node

        <static> _fnInitComplete(oSettings, json)

        Draw the table for the first time, adding all required features

        <static> _fnInitialise(oSettings)

        Draw the table for the first time, adding all required features

        <static> _fnLanguageCompat(oSettings)

        Language compatibility - when certain options are given, and others aren't, we +need to duplicate the values over, in order to provide backwards compatibility +with older language files.

        <static> _fnLoadState(oSettings, oInit)

        Attempt to load a saved table state from a cookie

        <static> _fnLog(oSettings, iLevel, sMesg)

        Log an error message

        <static> _fnMap(oRet, oSrc, sName, sMappedName)

        See if a property is defined on one object, if so assign it to the other object

        <static> _fnNodeToColumnIndex(oSettings, iRow, n) → {int}

        Take a TD element and convert it into a column data index (not the visible index)

        <static> _fnNodeToDataIndex(oSettings, n) → {int}

        Take a TR element and convert it to an index in aoData

        <static> _fnPageChange(oSettings, mAction) → {bool}

        Alter the display settings to change the page

        <static> _fnProcessingDisplay(oSettings, bShow)

        Display or hide the processing indicator

        <static> _fnReadCookie(sName) → {string}

        Read an old cookie to get a cookie with an old table state

        <static> _fnReDraw(oSettings)

        Redraw the table - taking account of the various features which are enabled

        <static> _fnRender(oSettings, iRow, iCol) → {*}

        Call the developer defined fnRender function for a given cell (row/column) with +the required parameters and return the result.

        <static> _fnReOrderIndex(oSettings)

        Figure out how to reorder a display list

        <static> _fnSaveState(oSettings)

        Save the state of a table in a cookie such that the page can be reloaded

        <static> _fnScrollBarWidth() → {int}

        Get the width of a scroll bar in this browser being used

        <static> _fnScrollDraw(o) → {node}

        Update the various tables for resizing. It's a bit of a pig this function, but +basically the idea to: + 1. Re-create the table inside the scrolling div + 2. Take live measurements from the DOM + 3. Apply the measurements + 4. Clean up

        <static> _fnScrollingWidthAdjust(oSettings, n)

        Adjust a table's width to take account of scrolling

        <static> _fnServerParams(oSettings, array)

        Add Ajax parameters from plug-ins

        <static> _fnSetCellData(oSettings, iRow, iCol, val)

        Set the value for a specific cell, into the internal data cache

        <static> _fnSetObjectDataFn(mSource) → {function}

        Return a function that can be used to set data from a source object, taking +into account the ability to use nested objects as a source

        <static> _fnSettingsFromNode(nTable) → {object}

        Return the settings object for a particular table

        <static> _fnSort(oSettings, bApplyClasses)

        Change the order of the table

        <static> _fnSortAttachListener(oSettings, nNode, iDataIndex, fnCallback)

        Attach a sort handler (click) to a node

        <static> _fnSortingClasses(oSettings)

        Set the sorting classes on the header, Note: it is safe to call this function +when bSort and bSortClasses are false

        <static> _fnStringToCss(aArray1, aArray2) → {int}

        Append a CSS unit (only if required) to a string

        <static> _fnUpdateInfo(oSettings)

        Update the information elements in the display

        <static> _fnVisbleColumns(oSettings) → {int}

        Get the number of visible columns

        <static> _fnVisibleToColumnIndex(oSettings, iMatch) → {int}

        Covert the index of a visible column to the index in the data array (take account +of hidden columns)

        +
        +
        +
        + + + + +
        + +

        Details

        +

        Properties - static

        +
        +
        <static> _fnJsonString

        JSON stringify. If JSON.stringify it provided by the browser, json2.js or any other +library, then we use that as it is fast, safe and accurate. If the function isn't +available then we need to built it ourselves - the inspiration for this function comes +from Craig Buckler ( http://www.sitepoint.com/javascript-json-serialization/ ). It is +not perfect and absolutely should not be used as a replacement to json2.js - but it does +do what we need, without requiring a dependency for DataTables.

        + +
        +
        +

        Methods - static

        +
        +
        <static> _fnAddColumn(oSettings, nTh)

        Add a column to the list used for the table with default values

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        2
        nThnode

        The th element for this column

        +
        <static> _fnAddData(oSettings, aData) → {int}

        Add a data array to the table, creating DOM node etc. This is the parallel to +_fnGatherData, but for adding rows from a Javascript source, rather than a +DOM source.

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        2
        aDataarray

        data array to be added

        Returns:

        +

        =0 if successful (index of new aoData entry), -1 if failed

        +

        +
        <static> _fnAddOptionsHtml(oSettings)

        Add the options to the page HTML for the table

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        +
        <static> _fnAdjustColumnSizing(oSettings)

        Adjust the table column widths for new data. Note: you would probably want to +do a redraw after calling this function!

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        +
        <static> _fnAjaxParameters(oSettings) → {bool}

        Build up the parameters in an object needed for a server-side processing request

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        Returns:

        block the table drawing or not

        +
        <static> _fnAjaxUpdate(oSettings) → {boolean}

        Update the table using an Ajax call

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        Returns:

        Block the table drawing or not

        +
        <static> _fnAjaxUpdateDraw(oSettings, json)

        Data the data from the server (nuking the old) and redraw the table

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        2
        jsonobject

        json data return from the server.

        json.sEchostring

        Tracking flag for DataTables to match requests

        json.iTotalRecordsint

        Number of records in the data set, not accounting for filtering

        json.iTotalDisplayRecordsint

        Number of records in the data set, accounting for filtering

        json.aaDataarray

        The data to display on this page

        json.sColumnsstring<optional>

        Column ordering (sName, comma separated)

        +
        <static> _fnApplyColumnDefs(oSettings, aoColDefs, aoCols, fn)

        Take the column definitions and static columns arrays and calculate how +they relate to column indexes. The callback function will then apply the +definition found for a column to a suitable configuration object.

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        2
        aoColDefsarray

        The aoColumnDefs array that is to be applied

        3
        aoColsarray

        The aoColumns array that defines columns individually

        4
        fnfunction

        Callback function - takes two parameters, the calculated + column index and the definition for that column.

        +
        <static> _fnApplyToChildren(fn, array, array)

        Apply a given function to the display child nodes of an element array (typically +TD children of TR rows

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        fnfunction

        Method to apply to the objects

        2
        array

        {nodes} an1 List of elements to look through for display children

        3
        array

        {nodes} an2 Another list (identical structure to the first) - optional

        +
        <static> _fnBindAction(n, oData, fn)

        Bind an event handers to allow a click or return key to activate the callback. +This is good for accessibility since a return on the keyboard will have the +same effect as a click, if the element has focus.

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        nelement

        Element to bind the action to

        2
        oDataobject

        Data object to pass to the triggered function

        3
        fnfunction

        Callback function for when the event is triggered

        +
        <static> _fnBrowserDetect(oSettings)

        From some browsers (specifically IE6/7) we need special handling to work around browser +bugs - this function is used to detect when these workarounds are needed.

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        +
        <static> _fnBuildHead(oSettings)

        Create the HTML header for the table

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        +
        <static> _fnBuildSearchArray(oSettings, iMaster)

        Create an array which can be quickly search through

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        2
        iMasterint

        use the master data array - optional

        +
        <static> _fnBuildSearchRow(oSettings, aData)

        Create a searchable string from a single data row

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        2
        aDataarray

        Row data array to use for the data to search

        +
        <static> _fnCalculateColumnWidths(oSettings)

        Calculate the width of columns for the table

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        +
        <static> _fnCalculateEnd(oSettings)

        Recalculate the end point based on the start point

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        +
        <static> _fnCallbackFire(oSettings, sStore, sTrigger, aArgs)

        Fire callback functions and trigger events. Note that the loop over the callback +array store is done backwards! Further note that you do not want to fire off triggers +in time sensitive applications (for example cell creation) as its slow.

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        2
        sStorestring

        Name of the array storage for the callbacks in oSettings

        3
        sTriggerstring

        Name of the jQuery custom event to trigger. If null no trigger + is fired

        4
        aArgsarray

        Array of arguments to pass to the callback function / trigger

        +
        <static> _fnCallbackReg(oSettings, sStore, fn, sName)

        Register a callback function. Easily allows a callback function to be added to +an array store of callback functions that can then all be called together.

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        2
        sStorestring

        Name of the array storage for the callbacks in oSettings

        3
        fnfunction

        Function to be called back

        4
        sNamestring

        Identifying name for the callback (i.e. a label)

        +
        <static> _fnClearTable(oSettings)

        Nuke the table

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        +
        <static> _fnColumnIndexToVisible(iMatch, oSettings) → {int}

        Covert the index of an index in the data array and convert it to the visible + column index (take account of hidden columns)

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        iMatchint

        Column index to lookup

        2
        oSettingsobject

        dataTables settings object

        Returns:

        i the data index

        +
        <static> _fnColumnOptions(oSettings, iCol, oOptions)

        Apply options for a column

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        2
        iColint

        column index to consider

        3
        oOptionsobject

        object with sType, bVisible and bSearchable etc

        +
        <static> _fnColumnOrdering(oSettings) → {string}

        Get the column ordering that DataTables expects

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        Returns:

        comma separated list of names

        +
        <static> _fnConvertToWidth(sWidth, nParent) → {int}

        Convert a CSS unit width to pixels (e.g. 2em)

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        sWidthstring

        width to be converted

        2
        nParentnode

        parent to get the with for (required for relative widths) - optional

        Returns:

        iWidth width in pixels

        +
        <static> _fnCreateCookie(sName, sValue, iSecs, sBaseName, fnCallback)

        Create a new cookie with a value to store the state of a table

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        sNamestring

        name of the cookie to create

        2
        sValuestring

        the value the cookie should take

        3
        iSecsint

        duration of the cookie

        4
        sBaseNamestring

        sName is made up of the base + file name - this is the base

        5
        fnCallbackfunction

        User definable function to modify the cookie

        +
        <static> _fnCreateTr(oSettings, iRow)

        Create a new TR element (and it's TD children) for a row

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        2
        iRowint

        Row to consider

        +
        <static> _fnDataToSearch(sData, sType) → {string}

        Convert raw data into something that the user can search on

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        sDatastring

        data to be modified

        2
        sTypestring

        data type

        Returns:

        search string

        +
        <static> _fnDeleteIndex(a, iTarget)

        Take an array of integers (index array) and remove a target integer (value - not +the key!)

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        aarray

        Index array to target

        2
        iTargetint

        value to find

        +
        <static> _fnDetectHeader(array, nThead)

        Use the DOM source to create up an array of header cells. The idea here is to +create a layout grid (array) of rows x columns, which contains a reference +to the cell that that point in the grid (regardless of col/rowspan), such that +any column / row could be removed and the new grid constructed

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        array

        {object} aLayout Array to store the calculated layout in

        2
        nTheadnode

        The header/footer element for the table

        +
        <static> _fnDetectType(sData) → {string}

        Get the sort type based on an input string

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        sDatastring

        data we wish to know the type of

        Returns:

        type (defaults to 'string' if no type can be detected)

        +
        <static> _fnDraw(oSettings)

        Insert the required TR nodes into the table for display

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        +
        <static> _fnDrawHead(oSettings, array, bIncludeHidden)

        Draw the header (or footer) element based on the column visibility states. The +methodology here is to use the layout array from _fnDetectHeader, modified for +the instantaneous column visibility, to construct the new layout. The grid is +traversed over cell at a time in a rows x columns grid fashion, although each +cell insert can cover multiple elements in the grid - which is tracks using the +aApplied array. Cell inserts in the grid will only occur where there isn't +already a cell in that position.

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        2
        array

        {objects} aoSource Layout array from _fnDetectHeader

        3
        bIncludeHiddenbooleanOptionalfalse

        If true then include the hidden columns in the calc,

        +
        <static> _fnEscapeRegex(sVal) → {string}

        scape a string such that it can be used in a regular expression

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        sValstring

        string to escape

        Returns:

        escaped string

        +
        <static> _fnExtend(oOut, oExtender) → {object}

        Extend objects - very similar to jQuery.extend, but deep copy objects, and shallow +copy arrays. The reason we need to do this, is that we don't want to deep copy array +init values (such as aaSorting) since the dev wouldn't be able to override them, but +we do want to deep copy arrays.

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oOutobject

        Object to extend

        2
        oExtenderobject

        Object from which the properties will be applied to oOut

        Returns:

        oOut Reference, just for convenience - oOut === the return.

        +
        <static> _fnExternApiFunc(sFunc) → {function}

        Create a wrapper function for exporting an internal functions to an external API.

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        sFuncstring

        API function name

        Returns:

        wrapped function

        +
        <static> _fnFeatureHtmlFilter(oSettings) → {node}

        Generate the node required for filtering text

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        Returns:

        Filter control element

        +
        <static> _fnFeatureHtmlInfo(oSettings) → {node}

        Generate the node required for the info display

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        Returns:

        Information element

        +
        <static> _fnFeatureHtmlLength(oSettings) → {node}

        Generate the node required for user display length changing

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        Returns:

        Display length feature node

        +
        <static> _fnFeatureHtmlPaginate(oSettings) → {node}

        Generate the node required for default pagination

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        Returns:

        Pagination feature node

        +
        <static> _fnFeatureHtmlProcessing(oSettings) → {node}

        Generate the node required for the processing node

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        Returns:

        Processing element

        +
        <static> _fnFeatureHtmlTable(oSettings) → {node}

        Add any control elements for the table - specifically scrolling

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        Returns:

        Node to add to the DOM

        +
        <static> _fnFilter(oSettings, sInput, iForce, bRegex, bSmart, bCaseInsensitive)

        Filter the data table based on user input and draw the table

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        2
        sInputstring

        string to filter on

        3
        iForceint

        optional - force a research of the master array (1) or not (undefined or 0)

        4
        bRegexbool

        treat as a regular expression or not

        5
        bSmartbool

        perform smart filtering or not

        6
        bCaseInsensitivebool

        Do case insenstive matching or not

        +
        <static> _fnFilterColumn(oSettings, sInput, iColumn, bRegex, bSmart, bCaseInsensitive)

        Filter the table on a per-column basis

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        2
        sInputstring

        string to filter on

        3
        iColumnint

        column to filter

        4
        bRegexbool

        treat search string as a regular expression or not

        5
        bSmartbool

        use smart filtering or not

        6
        bCaseInsensitivebool

        Do case insenstive matching or not

        +
        <static> _fnFilterComplete(oSettings, oSearch, iForce)

        Filter the table using both the global filter and column based filtering

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        2
        oSearchobject

        search information

        3
        iForceintOptional

        force a research of the master array (1) or not (undefined or 0)

        +
        <static> _fnFilterCreateSearch(sSearch, bRegex, bSmart, bCaseInsensitive) → {RegExp}

        Build a regular expression object suitable for searching a table

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        sSearchstring

        string to search for

        2
        bRegexbool

        treat as a regular expression or not

        3
        bSmartbool

        perform smart filtering or not

        4
        bCaseInsensitivebool

        Do case insensitive matching or not

        Returns:

        constructed object

        +
        <static> _fnFilterCustom(oSettings)

        Apply custom filtering functions

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        +
        <static> _fnGatherData(oSettings)

        Read in the data from the target table from the DOM

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        +
        <static> _fnGetCellData(oSettings, iRow, iCol, sSpecific) → {*}

        Get the data for a given cell from the internal cache, taking into account data mapping

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        2
        iRowint

        aoData row id

        3
        iColint

        Column index

        4
        sSpecificstring

        data get type ('display', 'type' 'filter' 'sort')

        Returns:

        Cell data

        +
        <static> _fnGetColumns(oSettings, sParam) → {array}

        Get an array of column indexes that match a given property

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        2
        sParamstring

        Parameter in aoColumns to look for - typically + bVisible or bSearchable

        Returns:

        Array of indexes with matched properties

        +
        <static> _fnGetDataMaster(oSettings)

        Return an array with the full table data

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        Returns:

        array {array} aData Master data array

        +
        <static> _fnGetMaxLenString(oSettings, iCol) → {string}

        Get the maximum strlen for each data column

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        2
        iColint

        column of interest

        Returns:

        max string length for each column

        +
        <static> _fnGetObjectDataFn(mSource) → {function}

        Return a function that can be used to get data from a source object, taking +into account the ability to use nested objects as a source

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        mSourcestring | int | function

        The data source for the object

        Returns:

        Data get function

        +
        <static> _fnGetRowData(oSettings, iRow, sSpecific, aiColumns) → {array}

        Get an array of data for a given row from the internal data cache

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        2
        iRowint

        aoData row id

        3
        sSpecificstring

        data get type ('type' 'filter' 'sort')

        4
        aiColumnsarray

        Array of column indexes to get data from

        Returns:

        Data array

        +
        <static> _fnGetTdNodes(oSettings, iIndividualRow) → {array}

        Return an flat array with all TD nodes for the table, or row

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        2
        iIndividualRowintOptional

        aoData index to get the nodes for - optional + if not given then the return array will contain all nodes for the table

        Returns:

        TD array

        +
        <static> _fnGetTrNodes(oSettings) → {array}

        Return an array with the TR nodes for the table

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        Returns:

        TR array

        +
        <static> _fnGetUniqueThs(oSettings, nHeader, aLayout)

        Get an array of unique th elements, one for each column

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        2
        nHeadernode

        automatically detect the layout from this node - optional

        3
        aLayoutarray

        thead/tfoot layout from _fnDetectHeader - optional

        Returns:

        array {node} aReturn list of unique th's

        +
        <static> _fnGetWidestNode(oSettings, iCol) → {node}

        Get the widest node

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        2
        iColint

        column of interest

        Returns:

        widest table node

        +
        <static> _fnInitComplete(oSettings, json)

        Draw the table for the first time, adding all required features

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        2
        jsonobjectOptional

        JSON from the server that completed the table, if using Ajax source + with client-side processing (optional)

        +
        <static> _fnInitialise(oSettings)

        Draw the table for the first time, adding all required features

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        +
        <static> _fnLanguageCompat(oSettings)

        Language compatibility - when certain options are given, and others aren't, we +need to duplicate the values over, in order to provide backwards compatibility +with older language files.

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        +
        <static> _fnLoadState(oSettings, oInit)

        Attempt to load a saved table state from a cookie

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        2
        oInitobject

        DataTables init object so we can override settings

        +
        <static> _fnLog(oSettings, iLevel, sMesg)

        Log an error message

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        2
        iLevelint

        log error messages, or display them to the user

        3
        sMesgstring

        error message

        +
        <static> _fnMap(oRet, oSrc, sName, sMappedName)

        See if a property is defined on one object, if so assign it to the other object

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oRetobject

        target object

        2
        oSrcobject

        source object

        3
        sNamestring

        property

        4
        sMappedNamestringOptional

        name to map too - optional, sName used if not given

        +
        <static> _fnNodeToColumnIndex(oSettings, iRow, n) → {int}

        Take a TD element and convert it into a column data index (not the visible index)

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        2
        iRowint

        The row number the TD/TH can be found in

        3
        nnode

        The TD/TH element to find

        Returns:

        index if the node is found, -1 if not

        +
        <static> _fnNodeToDataIndex(oSettings, n) → {int}

        Take a TR element and convert it to an index in aoData

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        2
        nnode

        the TR element to find

        Returns:

        index if the node is found, null if not

        +
        <static> _fnPageChange(oSettings, mAction) → {bool}

        Alter the display settings to change the page

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        2
        mActionstring | int

        Paging action to take: "first", "previous", "next" or "last" + or page number to jump to (integer)

        Returns:

        true page has changed, false - no change (no effect) eg 'first' on page 1

        +
        <static> _fnProcessingDisplay(oSettings, bShow)

        Display or hide the processing indicator

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        2
        bShowbool

        Show the processing indicator (true) or not (false)

        +
        <static> _fnReadCookie(sName) → {string}

        Read an old cookie to get a cookie with an old table state

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        sNamestring

        name of the cookie to read

        Returns:

        contents of the cookie - or null if no cookie with that name found

        +
        <static> _fnReDraw(oSettings)

        Redraw the table - taking account of the various features which are enabled

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        +
        <static> _fnRender(oSettings, iRow, iCol) → {*}

        Call the developer defined fnRender function for a given cell (row/column) with +the required parameters and return the result.

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        2
        iRowint

        aoData index for the row

        3
        iColint

        aoColumns index for the column

        Returns:

        Return of the developer's fnRender function

        +
        <static> _fnReOrderIndex(oSettings)

        Figure out how to reorder a display list

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        Returns:

        array {int} aiReturn index list for reordering

        +
        <static> _fnSaveState(oSettings)

        Save the state of a table in a cookie such that the page can be reloaded

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        +
        <static> _fnScrollBarWidth() → {int}

        Get the width of a scroll bar in this browser being used

        + +
        +
        Returns:

        width in pixels

        +
        <static> _fnScrollDraw(o) → {node}

        Update the various tables for resizing. It's a bit of a pig this function, but +basically the idea to: + 1. Re-create the table inside the scrolling div + 2. Take live measurements from the DOM + 3. Apply the measurements + 4. Clean up

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oobject

        dataTables settings object

        Returns:

        Node to add to the DOM

        +
        <static> _fnScrollingWidthAdjust(oSettings, n)

        Adjust a table's width to take account of scrolling

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        2
        nnode

        table node

        +
        <static> _fnServerParams(oSettings, array)

        Add Ajax parameters from plug-ins

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        2
        array

        {objects} aoData name/value pairs to send to the server

        +
        <static> _fnSetCellData(oSettings, iRow, iCol, val)

        Set the value for a specific cell, into the internal data cache

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        2
        iRowint

        aoData row id

        3
        iColint

        Column index

        4
        val*

        Value to set

        +
        <static> _fnSetObjectDataFn(mSource) → {function}

        Return a function that can be used to set data from a source object, taking +into account the ability to use nested objects as a source

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        mSourcestring | int | function

        The data source for the object

        Returns:

        Data set function

        +
        <static> _fnSettingsFromNode(nTable) → {object}

        Return the settings object for a particular table

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        nTablenode

        table we are using as a dataTable

        Returns:

        Settings object - or null if not found

        +
        <static> _fnSort(oSettings, bApplyClasses)

        Change the order of the table

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        2
        bApplyClassesbool

        optional - should we apply classes or not

        +
        <static> _fnSortAttachListener(oSettings, nNode, iDataIndex, fnCallback)

        Attach a sort handler (click) to a node

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        2
        nNodenode

        node to attach the handler to

        3
        iDataIndexint

        column sorting index

        4
        fnCallbackfunctionOptional

        callback function

        +
        <static> _fnSortingClasses(oSettings)

        Set the sorting classes on the header, Note: it is safe to call this function +when bSort and bSortClasses are false

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        +
        <static> _fnStringToCss(aArray1, aArray2) → {int}

        Append a CSS unit (only if required) to a string

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        aArray1array

        first array

        2
        aArray2array

        second array

        Returns:

        0 if match, 1 if length is different, 2 if no match

        +
        <static> _fnUpdateInfo(oSettings)

        Update the information elements in the display

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        +
        <static> _fnVisbleColumns(oSettings) → {int}

        Get the number of visible columns

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        Returns:

        i the number of visible columns

        +
        <static> _fnVisibleToColumnIndex(oSettings, iMatch) → {int}

        Covert the index of a visible column to the index in the data array (take account +of hidden columns)

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        dataTables settings object

        2
        iMatchint

        Visible column index to lookup

        Returns:

        i the data index

        + +
        +
        +
        + +
        + + + + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/docs/DataTable.defaults.columns.html b/docroot/sites/all/libraries/datatables/docs/DataTable.defaults.columns.html new file mode 100644 index 00000000..a19a3763 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/docs/DataTable.defaults.columns.html @@ -0,0 +1,912 @@ + + + + + Namespace: columns - documentation + + + + + + + + + +
        + + +
        +

        Namespace: columns

        +

        Ancestry: DataTable » .defaults. » columns

        +
        + DataTables v1.9.4 documentation +
        +
        + + + +
        +

        Navigation

        + +
        + + Hiding private elements + (toggle) + +
        +
        + + Showing extended elements + (toggle) + +
        +
        + +
        + +
        + +

        Column options that can be given to DataTables at initialisation time.

        + +
        + +
        + + +
        + +

        Summary

        + +

        Properties - static

        + +
        +
        <static> aDataSort :array

        Allows a column's sorting to take multiple columns into account when +doing a sort. For example first name / last name columns make sense to +do a multi-column sort over the two columns.

        <static> asSorting :array

        You can control the default sorting direction, and even alter the behaviour +of the sort handler (i.e. only allow ascending sorting etc) using this +parameter.

        <static> bSearchable :boolean

        Enable or disable filtering on the data in this column.

        <static> bSortable :boolean

        Enable or disable sorting on this column.

        <static> bUseRendered :boolean

        Deprecated When using fnRender() for a column, you may wish +to use the original data (before rendering) for sorting and filtering +(the default is to used the rendered data that the user can see). This +may be useful for dates etc. [...]

        <static> bVisible :boolean

        Enable or disable the display of this column.

        <static> fnCreatedCell :function

        Developer definable function that is called whenever a cell is created (Ajax source, +etc) or processed for input (DOM source). This can be used as a compliment to mRender +allowing you to modify the DOM element (add background colour for example) when the +element is available.

        <static> fnRender :function

        Deprecated Custom display function that will be called for the +display of each cell in this column. [...]

        <static> iDataSort :int

        The column index (starting from 0!) that you wish a sort to be performed +upon when this column is selected for sorting. This can be used for sorting +on hidden columns for example.

        <static> mData :string|int|function|null

        This property can be used to read data from any JSON data source property, +including deeply nested objects / properties. mData can be given in a +number of different ways which effect its behaviour: +

          +
        • integer - treated as an array index for the data source. This is the + default that DataTables uses (incrementally increased for each column).
        • +
        • string - read an object property from the data source. Note that you can + use Javascript dotted notation to read deep properties / arrays from the + data source.
        • +
        • null - the sDefaultContent option will be used for the cell (null + by default, so you will need to specify the default content you want - + typically an empty string). This can be useful on generated columns such + as edit / delete action columns.
        • +
        • function - the function given will be executed whenever DataTables + needs to set or get the data for a cell in the column. The function + takes three parameters: +
            +
          • {array|object} The data source for the row
          • +
          • {string} The type call data requested - this will be 'set' when + setting data or 'filter', 'display', 'type', 'sort' or undefined when + gathering data. Note that when undefined is given for the type + DataTables expects to get the raw data for the object back
          • +
          • {*} Data to set when the second parameter is 'set'.
          • +
          + The return value from the function is not required when 'set' is the type + of call, but otherwise the return is what will be used for the data + requested.
        • +
        [...]

        <static> mDataProp

        This parameter has been replaced by mData in DataTables to ensure naming +consistency. mDataProp can still be used, as there is backwards compatibility +in DataTables for this option, but it is strongly recommended that you use +mData in preference to mDataProp.

        <static> mRender :string|int|function|null

        This property is the rendering partner to mData and it is suggested that +when you want to manipulate data for display (including filtering, sorting etc) +but not altering the underlying data for the table, use this property. mData +can actually do everything this property can and more, but this parameter is +easier to use since there is no 'set' option. Like mData is can be given +in a number of different ways to effect its behaviour, with the addition of +supporting array syntax for easy outputting of arrays (including arrays of +objects): +

          +
        • integer - treated as an array index for the data source. This is the + default that DataTables uses (incrementally increased for each column).
        • +
        • string - read an object property from the data source. Note that you can + use Javascript dotted notation to read deep properties / arrays from the + data source and also array brackets to indicate that the data reader should + loop over the data source array. When characters are given between the array + brackets, these characters are used to join the data source array together. + For example: "accounts[, ].name" would result in a comma separated list with + the 'name' value from the 'accounts' array of objects.
        • +
        • function - the function given will be executed whenever DataTables + needs to set or get the data for a cell in the column. The function + takes three parameters: +
            +
          • {array|object} The data source for the row (based on mData)
          • +
          • {string} The type call data requested - this will be 'filter', 'display', + 'type' or 'sort'.
          • +
          • {array|object} The full data source for the row (not based on mData)
          • +
          + The return value from the function is what will be used for the data + requested.
        • +

        <static> sCellType :string

        Change the cell type created for the column - either TD cells or TH cells. This +can be useful as TH cells have semantic meaning in the table body, allowing them +to act as a header for a row (you may wish to add scope='row' to the TH elements).

        <static> sClass :string

        Class to give to each cell in this column.

        <static> sContentPadding :string

        When DataTables calculates the column widths to assign to each column, +it finds the longest string in each column and then constructs a +temporary table and reads the widths from that. The problem with this +is that "mmm" is much wider then "iiii", but the latter is a longer +string - thus the calculation can go wrong (doing it properly and putting +it into an DOM object and measuring that is horribly(!) slow). Thus as +a "work around" we provide this option. It will append its value to the +text that is found to be the longest string for the column - i.e. padding. +Generally you shouldn't need this, and it is not documented on the +general DataTables.net documentation

        <static> sDefaultContent :string

        Allows a default value to be given for a column's data, and will be used +whenever a null data source is encountered (this can be because mData +is set to null, or because the data source itself is null).

        <static> sName :string

        This parameter is only used in DataTables' server-side processing. It can +be exceptionally useful to know what columns are being displayed on the +client side, and to map these to database fields. When defined, the names +also allow DataTables to reorder information from the server if it comes +back in an unexpected order (i.e. if you switch your columns around on the +client-side, your server-side code does not also need updating).

        <static> sSortDataType :string

        Defines a data source type for the sorting which can be used to read +real-time information from the table (updating the internally cached +version) prior to sorting. This allows sorting to occur on user editable +elements such as form inputs.

        <static> sTitle :string

        The title of this column.

        <static> sType :string

        The type allows you to specify how the data for this column will be sorted. +Four types (string, numeric, date and html (which will strip HTML tags +before sorting)) are currently available. Note that only date formats +understood by Javascript's Date() object will be accepted as type date. For +example: "Mar 26, 2008 5:03 PM". May take the values: 'string', 'numeric', +'date' or 'html' (by default). Further types can be adding through +plug-ins.

        <static> sWidth :string

        Defining the width of the column, this parameter may take any CSS value +(3em, 20px etc). DataTables apples 'smart' widths to columns which have not +been given a specific width through this interface ensuring that the table +remains readable.

        +
        +
        + + + + +
        + +

        Details

        +

        Properties - static

        +
        +
        <static> aDataSort :array

        Allows a column's sorting to take multiple columns into account when +doing a sort. For example first name / last name columns make sense to +do a multi-column sort over the two columns.

        + +
        +
        Examples
        +
        +
           // Using aoColumnDefs
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "aoColumnDefs": [
        +         { "aDataSort": [ 0, 1 ], "aTargets": [ 0 ] },
        +         { "aDataSort": [ 1, 0 ], "aTargets": [ 1 ] },
        +         { "aDataSort": [ 2, 3, 4 ], "aTargets": [ 2 ] }
        +       ]
        +     } );
        +   } );
        +   
        + 
        +
        + +
        +
           // Using aoColumns
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "aoColumns": [
        +         { "aDataSort": [ 0, 1 ] },
        +         { "aDataSort": [ 1, 0 ] },
        +         { "aDataSort": [ 2, 3, 4 ] },
        +         null,
        +         null
        +       ]
        +     } );
        +   } );
        +
        +
        <static> asSorting :array

        You can control the default sorting direction, and even alter the behaviour +of the sort handler (i.e. only allow ascending sorting etc) using this +parameter.

        + +
        +
        Examples
        +
        +
           // Using aoColumnDefs
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "aoColumnDefs": [
        +         { "asSorting": [ "asc" ], "aTargets": [ 1 ] },
        +         { "asSorting": [ "desc", "asc", "asc" ], "aTargets": [ 2 ] },
        +         { "asSorting": [ "desc" ], "aTargets": [ 3 ] }
        +       ]
        +     } );
        +   } );
        +   
        + 
        +
        + +
        +
           // Using aoColumns
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "aoColumns": [
        +         null,
        +         { "asSorting": [ "asc" ] },
        +         { "asSorting": [ "desc", "asc", "asc" ] },
        +         { "asSorting": [ "desc" ] },
        +         null
        +       ]
        +     } );
        +   } );
        +
        +
        <static> bSearchable :boolean

        Enable or disable filtering on the data in this column.

        + +
        +
        Examples
        +
        +
           // Using aoColumnDefs
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "aoColumnDefs": [ 
        +         { "bSearchable": false, "aTargets": [ 0 ] }
        +       ] } );
        +   } );
        +   
        + 
        +
        + +
        +
           // Using aoColumns
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "aoColumns": [ 
        +         { "bSearchable": false },
        +         null,
        +         null,
        +         null,
        +         null
        +       ] } );
        +   } );
        +
        +
        <static> bSortable :boolean

        Enable or disable sorting on this column.

        + +
        +
        Examples
        +
        +
           // Using aoColumnDefs
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "aoColumnDefs": [ 
        +         { "bSortable": false, "aTargets": [ 0 ] }
        +       ] } );
        +   } );
        +   
        + 
        +
        + +
        +
           // Using aoColumns
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "aoColumns": [ 
        +         { "bSortable": false },
        +         null,
        +         null,
        +         null,
        +         null
        +       ] } );
        +   } );
        +
        +
        <static> bUseRendered :boolean

        Deprecated When using fnRender() for a column, you may wish +to use the original data (before rendering) for sorting and filtering +(the default is to used the rendered data that the user can see). This +may be useful for dates etc.

        + +

        Please note that this option has now been deprecated and will be removed +in the next version of DataTables. Please use mRender / mData rather than +fnRender.

        +
        Deprecated
        Yes
        +
        +
        <static> bVisible :boolean

        Enable or disable the display of this column.

        + +
        +
        Examples
        +
        +
           // Using aoColumnDefs
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "aoColumnDefs": [ 
        +         { "bVisible": false, "aTargets": [ 0 ] }
        +       ] } );
        +   } );
        +   
        + 
        +
        + +
        +
           // Using aoColumns
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "aoColumns": [ 
        +         { "bVisible": false },
        +         null,
        +         null,
        +         null,
        +         null
        +       ] } );
        +   } );
        +
        +
        <static> fnCreatedCell :function

        Developer definable function that is called whenever a cell is created (Ajax source, +etc) or processed for input (DOM source). This can be used as a compliment to mRender +allowing you to modify the DOM element (add background colour for example) when the +element is available.

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        nTdelement

        The TD node that has been created

        2
        sData*

        The Data for the cell

        3
        oDataarray | object

        The data for the whole row

        4
        iRowint

        The row index for the aoData data store

        5
        iColint

        The column index for aoColumns

        Example:
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "aoColumnDefs": [ {
        +         "aTargets": [3],
        +         "fnCreatedCell": function (nTd, sData, oData, iRow, iCol) {
        +           if ( sData == "1.7" ) {
        +             $(nTd).css('color', 'blue')
        +           }
        +         }
        +       } ]
        +     });
        +   } );
        +
        +
        +
        <static> fnRender :function

        Deprecated Custom display function that will be called for the +display of each cell in this column.

        + +

        Please note that this option has now been deprecated and will be removed +in the next version of DataTables. Please use mRender / mData rather than +fnRender.

        +
        Deprecated
        Yes
        +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oobject

        Object with the following parameters:

        o.iDataRowint

        The row in aoData

        o.iDataColumnint

        The column in question

        o.aDataarray

        The data for the row in question

        o.oSettingsobject

        The settings object for this DataTables instance

        o.mDataPropobject

        The data property used for this column

        7
        val*

        The current cell value

        Returns:

        The string you which to use in the display

        +
        <static> iDataSort :int

        The column index (starting from 0!) that you wish a sort to be performed +upon when this column is selected for sorting. This can be used for sorting +on hidden columns for example.

        + +
        +
        Examples
        +
        +
           // Using aoColumnDefs
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "aoColumnDefs": [ 
        +         { "iDataSort": 1, "aTargets": [ 0 ] }
        +       ]
        +     } );
        +   } );
        +   
        + 
        +
        + +
        +
           // Using aoColumns
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "aoColumns": [ 
        +         { "iDataSort": 1 },
        +         null,
        +         null,
        +         null,
        +         null
        +       ]
        +     } );
        +   } );
        +
        +
        <static> mData :string|int|function|null

        This property can be used to read data from any JSON data source property, +including deeply nested objects / properties. mData can be given in a +number of different ways which effect its behaviour: +

          +
        • integer - treated as an array index for the data source. This is the + default that DataTables uses (incrementally increased for each column).
        • +
        • string - read an object property from the data source. Note that you can + use Javascript dotted notation to read deep properties / arrays from the + data source.
        • +
        • null - the sDefaultContent option will be used for the cell (null + by default, so you will need to specify the default content you want - + typically an empty string). This can be useful on generated columns such + as edit / delete action columns.
        • +
        • function - the function given will be executed whenever DataTables + needs to set or get the data for a cell in the column. The function + takes three parameters: +
            +
          • {array|object} The data source for the row
          • +
          • {string} The type call data requested - this will be 'set' when + setting data or 'filter', 'display', 'type', 'sort' or undefined when + gathering data. Note that when undefined is given for the type + DataTables expects to get the raw data for the object back
          • +
          • {*} Data to set when the second parameter is 'set'.
          • +
          + The return value from the function is not required when 'set' is the type + of call, but otherwise the return is what will be used for the data + requested.
        • +

        + +

        Note that prior to DataTables 1.9.2 mData was called mDataProp. The name change +reflects the flexibility of this property and is consistent with the naming of +mRender. If 'mDataProp' is given, then it will still be used by DataTables, as +it automatically maps the old name to the new if required.

        + +
        +
        Examples
        +
        +
           // Read table data from objects
        +   $(document).ready( function() {
        +     var oTable = $('#example').dataTable( {
        +       "sAjaxSource": "sources/deep.txt",
        +       "aoColumns": [
        +         { "mData": "engine" },
        +         { "mData": "browser" },
        +         { "mData": "platform.inner" },
        +         { "mData": "platform.details.0" },
        +         { "mData": "platform.details.1" }
        +       ]
        +     } );
        +   } );
        +
        + 
        +
        + +
        +
           // Using mData as a function to provide different information for
        +   // sorting, filtering and display. In this case, currency (price)
        +   $(document).ready( function() {
        +     var oTable = $('#example').dataTable( {
        +       "aoColumnDefs": [ {
        +         "aTargets": [ 0 ],
        +         "mData": function ( source, type, val ) {
        +           if (type === 'set') {
        +             source.price = val;
        +             // Store the computed dislay and filter values for efficiency
        +             source.price_display = val=="" ? "" : "$"+numberFormat(val);
        +             source.price_filter  = val=="" ? "" : "$"+numberFormat(val)+" "+val;
        +             return;
        +           }
        +           else if (type === 'display') {
        +             return source.price_display;
        +           }
        +           else if (type === 'filter') {
        +             return source.price_filter;
        +           }
        +           // 'sort', 'type' and undefined all just use the integer
        +           return source.price;
        +         }
        +       } ]
        +     } );
        +   } );
        +
        +
        <static> mDataProp

        This parameter has been replaced by mData in DataTables to ensure naming +consistency. mDataProp can still be used, as there is backwards compatibility +in DataTables for this option, but it is strongly recommended that you use +mData in preference to mDataProp.

        + +
        +
        <static> mRender :string|int|function|null

        This property is the rendering partner to mData and it is suggested that +when you want to manipulate data for display (including filtering, sorting etc) +but not altering the underlying data for the table, use this property. mData +can actually do everything this property can and more, but this parameter is +easier to use since there is no 'set' option. Like mData is can be given +in a number of different ways to effect its behaviour, with the addition of +supporting array syntax for easy outputting of arrays (including arrays of +objects): +

          +
        • integer - treated as an array index for the data source. This is the + default that DataTables uses (incrementally increased for each column).
        • +
        • string - read an object property from the data source. Note that you can + use Javascript dotted notation to read deep properties / arrays from the + data source and also array brackets to indicate that the data reader should + loop over the data source array. When characters are given between the array + brackets, these characters are used to join the data source array together. + For example: "accounts[, ].name" would result in a comma separated list with + the 'name' value from the 'accounts' array of objects.
        • +
        • function - the function given will be executed whenever DataTables + needs to set or get the data for a cell in the column. The function + takes three parameters: +
            +
          • {array|object} The data source for the row (based on mData)
          • +
          • {string} The type call data requested - this will be 'filter', 'display', + 'type' or 'sort'.
          • +
          • {array|object} The full data source for the row (not based on mData)
          • +
          + The return value from the function is what will be used for the data + requested.
        • +

        + +
        +
        Examples
        +
        +
           // Create a comma separated list from an array of objects
        +   $(document).ready( function() {
        +     var oTable = $('#example').dataTable( {
        +       "sAjaxSource": "sources/deep.txt",
        +       "aoColumns": [
        +         { "mData": "engine" },
        +         { "mData": "browser" },
        +         {
        +           "mData": "platform",
        +           "mRender": "[, ].name"
        +         }
        +       ]
        +     } );
        +   } );
        +
        + 
        +
        + +
        +
           // Use as a function to create a link from the data source
        +   $(document).ready( function() {
        +     var oTable = $('#example').dataTable( {
        +       "aoColumnDefs": [
        +       {
        +         "aTargets": [ 0 ],
        +         "mData": "download_link",
        +         "mRender": function ( data, type, full ) {
        +           return 'Download';
        +         }
        +       ]
        +     } );
        +   } );
        +
        +
        <static> sCellType :string

        Change the cell type created for the column - either TD cells or TH cells. This +can be useful as TH cells have semantic meaning in the table body, allowing them +to act as a header for a row (you may wish to add scope='row' to the TH elements).

        + +
        +
        Example
        +
        +
           // Make the first column use TH cells
        +   $(document).ready( function() {
        +     var oTable = $('#example').dataTable( {
        +       "aoColumnDefs": [ {
        +         "aTargets": [ 0 ],
        +         "sCellType": "th"
        +       } ]
        +     } );
        +   } );
        +
        +
        <static> sClass :string

        Class to give to each cell in this column.

        + +
        +
        Examples
        +
        +
           // Using aoColumnDefs
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "aoColumnDefs": [ 
        +         { "sClass": "my_class", "aTargets": [ 0 ] }
        +       ]
        +     } );
        +   } );
        +   
        + 
        +
        + +
        +
           // Using aoColumns
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "aoColumns": [ 
        +         { "sClass": "my_class" },
        +         null,
        +         null,
        +         null,
        +         null
        +       ]
        +     } );
        +   } );
        +
        +
        <static> sContentPadding :string

        When DataTables calculates the column widths to assign to each column, +it finds the longest string in each column and then constructs a +temporary table and reads the widths from that. The problem with this +is that "mmm" is much wider then "iiii", but the latter is a longer +string - thus the calculation can go wrong (doing it properly and putting +it into an DOM object and measuring that is horribly(!) slow). Thus as +a "work around" we provide this option. It will append its value to the +text that is found to be the longest string for the column - i.e. padding. +Generally you shouldn't need this, and it is not documented on the +general DataTables.net documentation

        + +
        +
        Example
        +
        +
           // Using aoColumns
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "aoColumns": [ 
        +         null,
        +         null,
        +         null,
        +         {
        +           "sContentPadding": "mmm"
        +         }
        +       ]
        +     } );
        +   } );
        +
        +
        <static> sDefaultContent :string

        Allows a default value to be given for a column's data, and will be used +whenever a null data source is encountered (this can be because mData +is set to null, or because the data source itself is null).

        + +
        +
        Examples
        +
        +
           // Using aoColumnDefs
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "aoColumnDefs": [ 
        +         {
        +           "mData": null,
        +           "sDefaultContent": "Edit",
        +           "aTargets": [ -1 ]
        +         }
        +       ]
        +     } );
        +   } );
        +   
        + 
        +
        + +
        +
           // Using aoColumns
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "aoColumns": [ 
        +         null,
        +         null,
        +         null,
        +         {
        +           "mData": null,
        +           "sDefaultContent": "Edit"
        +         }
        +       ]
        +     } );
        +   } );
        +
        +
        <static> sName :string

        This parameter is only used in DataTables' server-side processing. It can +be exceptionally useful to know what columns are being displayed on the +client side, and to map these to database fields. When defined, the names +also allow DataTables to reorder information from the server if it comes +back in an unexpected order (i.e. if you switch your columns around on the +client-side, your server-side code does not also need updating).

        + +
        +
        Examples
        +
        +
           // Using aoColumnDefs
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "aoColumnDefs": [ 
        +         { "sName": "engine", "aTargets": [ 0 ] },
        +         { "sName": "browser", "aTargets": [ 1 ] },
        +         { "sName": "platform", "aTargets": [ 2 ] },
        +         { "sName": "version", "aTargets": [ 3 ] },
        +         { "sName": "grade", "aTargets": [ 4 ] }
        +       ]
        +     } );
        +   } );
        +   
        + 
        +
        + +
        +
           // Using aoColumns
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "aoColumns": [ 
        +         { "sName": "engine" },
        +         { "sName": "browser" },
        +         { "sName": "platform" },
        +         { "sName": "version" },
        +         { "sName": "grade" }
        +       ]
        +     } );
        +   } );
        +
        +
        <static> sSortDataType :string

        Defines a data source type for the sorting which can be used to read +real-time information from the table (updating the internally cached +version) prior to sorting. This allows sorting to occur on user editable +elements such as form inputs.

        + +
        +
        Examples
        +
        +
           // Using aoColumnDefs
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "aoColumnDefs": [
        +         { "sSortDataType": "dom-text", "aTargets": [ 2, 3 ] },
        +         { "sType": "numeric", "aTargets": [ 3 ] },
        +         { "sSortDataType": "dom-select", "aTargets": [ 4 ] },
        +         { "sSortDataType": "dom-checkbox", "aTargets": [ 5 ] }
        +       ]
        +     } );
        +   } );
        +   
        + 
        +
        + +
        +
           // Using aoColumns
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "aoColumns": [
        +         null,
        +         null,
        +         { "sSortDataType": "dom-text" },
        +         { "sSortDataType": "dom-text", "sType": "numeric" },
        +         { "sSortDataType": "dom-select" },
        +         { "sSortDataType": "dom-checkbox" }
        +       ]
        +     } );
        +   } );
        +
        +
        <static> sTitle :string

        The title of this column.

        + +
        +
        Examples
        +
        +
           // Using aoColumnDefs
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "aoColumnDefs": [ 
        +         { "sTitle": "My column title", "aTargets": [ 0 ] }
        +       ]
        +     } );
        +   } );
        +   
        + 
        +
        + +
        +
           // Using aoColumns
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "aoColumns": [ 
        +         { "sTitle": "My column title" },
        +         null,
        +         null,
        +         null,
        +         null
        +       ]
        +     } );
        +   } );
        +
        +
        <static> sType :string

        The type allows you to specify how the data for this column will be sorted. +Four types (string, numeric, date and html (which will strip HTML tags +before sorting)) are currently available. Note that only date formats +understood by Javascript's Date() object will be accepted as type date. For +example: "Mar 26, 2008 5:03 PM". May take the values: 'string', 'numeric', +'date' or 'html' (by default). Further types can be adding through +plug-ins.

        + +
        +
        Examples
        +
        +
           // Using aoColumnDefs
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "aoColumnDefs": [ 
        +         { "sType": "html", "aTargets": [ 0 ] }
        +       ]
        +     } );
        +   } );
        +   
        + 
        +
        + +
        +
           // Using aoColumns
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "aoColumns": [ 
        +         { "sType": "html" },
        +         null,
        +         null,
        +         null,
        +         null
        +       ]
        +     } );
        +   } );
        +
        +
        <static> sWidth :string

        Defining the width of the column, this parameter may take any CSS value +(3em, 20px etc). DataTables apples 'smart' widths to columns which have not +been given a specific width through this interface ensuring that the table +remains readable.

        + +
        +
        Examples
        +
        +
           // Using aoColumnDefs
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "aoColumnDefs": [ 
        +         { "sWidth": "20%", "aTargets": [ 0 ] }
        +       ]
        +     } );
        +   } );
        +   
        + 
        +
        + +
        +
           // Using aoColumns
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "aoColumns": [ 
        +         { "sWidth": "20%" },
        +         null,
        +         null,
        +         null,
        +         null
        +       ]
        +     } );
        +   } );
        +
        +
        +
        +
        + +
        + + + + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/docs/DataTable.defaults.html b/docroot/sites/all/libraries/datatables/docs/DataTable.defaults.html new file mode 100644 index 00000000..d86664a7 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/docs/DataTable.defaults.html @@ -0,0 +1,1752 @@ + + + + + Namespace: defaults - documentation + + + + + + + + + +
        + + +
        +

        Namespace: defaults

        +

        Ancestry: DataTable. » defaults

        +
        + DataTables v1.9.4 documentation +
        +
        + + + +
        +

        Navigation

        + +
        + + Hiding private elements + (toggle) + +
        +
        + + Showing extended elements + (toggle) + +
        +
        + +
        + +
        + +

        Initialisation options that can be given to DataTables at initialisation +time.

        + +
        + +
        + + +
        + +

        Summary

        + +

        Namespaces

        +
        +
        columns

        Column options that can be given to DataTables at initialisation time.

        oLanguage

        All strings that DataTables uses in the user interface that it creates +are defined in this object, allowing you to modified them individually or +completely replace them all as required.

        oSearch

        This parameter allows you to have define the global filtering state at +initialisation time. As an object the "sSearch" parameter must be +defined, but all other parameters are optional. When "bRegex" is true, +the search string will be treated as a regular expression, when false +(default) it will be treated as a straight string. When "bSmart" +DataTables will use it's smart filtering methods (to word match at +any point in the data), when false this will not be done.

        +

        Properties - static

        + +
        +
        <static> aaData :array

        An array of data to use for the table, passed in at initialisation which +will be used in preference to any data which is already in the DOM. This is +particularly useful for constructing tables purely in Javascript, for +example with a custom Ajax call.

        <static> aaSorting :array

        If sorting is enabled, then DataTables will perform a first pass sort on +initialisation. You can define which column(s) the sort is performed upon, +and the sorting direction, with this variable. The aaSorting array should +contain an array for each column to be sorted initially containing the +column's index and a direction string ('asc' or 'desc').

        <static> aaSortingFixed :array

        This parameter is basically identical to the aaSorting parameter, but +cannot be overridden by user interaction with the table. What this means +is that you could have a column (visible or hidden) which the sorting will +always be forced on first - any sorting after that (from the user) will +then be performed as required. This can be useful for grouping rows +together.

        <static> aLengthMenu :array

        This parameter allows you to readily specify the entries in the length drop +down menu that DataTables shows when pagination is enabled. It can be +either a 1D array of options which will be used for both the displayed +option and the value, or a 2D array which will use the array in the first +position as the value, and the array in the second position as the +displayed options (useful for language strings such as 'All').

        <static> aoColumnDefs

        Very similar to aoColumns, aoColumnDefs allows you to target a specific +column, multiple columns, or all columns, using the aTargets property of +each object in the array. This allows great flexibility when creating +tables, as the aoColumnDefs arrays can be of any length, targeting the +columns you specifically want. aoColumnDefs may use any of the column +options available: DataTable.defaults.columns, but it must +have aTargets defined in each object in the array. Values in the aTargets +array may be: +

          +
        • a string - class name will be matched on the TH for the column
        • +
        • 0 or a positive integer - column index counting from the left
        • +
        • a negative integer - column index counting from the right
        • +
        • the string "_all" - all columns (i.e. assign a default)
        • +

        <static> aoColumns

        The aoColumns option in the initialisation parameter allows you to define +details about the way individual columns behave. For a full list of +column options that can be set, please see +DataTable.defaults.columns. Note that if you use aoColumns to +define your columns, you must have an entry in the array for every single +column that you have in your table (these can be null if you don't which +to specify any options).

        <static> aoSearchCols :array

        Basically the same as oSearch, this parameter defines the individual column +filtering state at initialisation time. The array must be of the same size +as the number of columns, and each element be an object with the parameters +"sSearch" and "bEscapeRegex" (the latter is optional). 'null' is also +accepted and the default will be used.

        <static> asStripeClasses :array

        An array of CSS classes that should be applied to displayed rows. This +array may be of any length, and DataTables will apply each class +sequentially, looping when required.

        <static> bAutoWidth :boolean

        Enable or disable automatic column width calculation. This can be disabled +as an optimisation (it takes some time to calculate the widths) if the +tables widths are passed in using aoColumns.

        <static> bDeferRender :boolean

        Deferred rendering can provide DataTables with a huge speed boost when you +are using an Ajax or JS data source for the table. This option, when set to +true, will cause DataTables to defer the creation of the table elements for +each row until they are needed for a draw - saving a significant amount of +time.

        <static> bDestroy :boolean

        Replace a DataTable which matches the given selector and replace it with +one which has the properties of the new initialisation object passed. If no +table matches the selector, then the new DataTable will be constructed as +per normal.

        <static> bFilter :boolean

        Enable or disable filtering of data. Filtering in DataTables is "smart" in +that it allows the end user to input multiple words (space separated) and +will match a row containing those words, even if not in the order that was +specified (this allow matching across multiple columns). Note that if you +wish to use filtering in DataTables this must remain 'true' - to remove the +default filtering input box and retain filtering abilities, please use +DataTable.defaults.sDom.

        <static> bInfo :boolean

        Enable or disable the table information display. This shows information +about the data that is currently visible on the page, including information +about filtered data if that action is being performed.

        <static> bJQueryUI :boolean

        Enable jQuery UI ThemeRoller support (required as ThemeRoller requires some +slightly different and additional mark-up from what DataTables has +traditionally used).

        <static> bLengthChange :boolean

        Allows the end user to select the size of a formatted page from a select +menu (sizes are 10, 25, 50 and 100). Requires pagination (bPaginate).

        <static> bPaginate :boolean

        Enable or disable pagination.

        <static> bProcessing :boolean

        Enable or disable the display of a 'processing' indicator when the table is +being processed (e.g. a sort). This is particularly useful for tables with +large amounts of data where it can take a noticeable amount of time to sort +the entries.

        <static> bRetrieve :boolean

        Retrieve the DataTables object for the given selector. Note that if the +table has already been initialised, this parameter will cause DataTables +to simply return the object that has already been set up - it will not take +account of any changes you might have made to the initialisation object +passed to DataTables (setting this parameter to true is an acknowledgement +that you understand this). bDestroy can be used to reinitialise a table if +you need.

        <static> bScrollAutoCss :boolean

        Indicate if DataTables should be allowed to set the padding / margin +etc for the scrolling header elements or not. Typically you will want +this.

        <static> bScrollCollapse :boolean

        When vertical (y) scrolling is enabled, DataTables will force the height of +the table's viewport to the given height at all times (useful for layout). +However, this can look odd when filtering data down to a small data set, +and the footer is left "floating" further down. This parameter (when +enabled) will cause DataTables to collapse the table's viewport down when +the result set will fit within the given Y height.

        <static> bScrollInfinite :boolean

        Enable infinite scrolling for DataTables (to be used in combination with +sScrollY). Infinite scrolling means that DataTables will continually load +data as a user scrolls through a table, which is very useful for large +dataset. This cannot be used with pagination, which is automatically +disabled. Note - the Scroller extra for DataTables is recommended in +in preference to this option.

        <static> bServerSide :boolean

        Configure DataTables to use server-side processing. Note that the +sAjaxSource parameter must also be given in order to give DataTables a +source to obtain the required data for each draw.

        <static> bSort :boolean

        Enable or disable sorting of columns. Sorting of individual columns can be +disabled by the "bSortable" option for each column.

        <static> bSortCellsTop :boolean

        Allows control over whether DataTables should use the top (true) unique +cell that is found for a single column, or the bottom (false - default). +This is useful when using complex headers.

        <static> bSortClasses :boolean

        Enable or disable the addition of the classes 'sorting_1', 'sorting_2' and +'sorting_3' to the columns which are currently being sorted on. This is +presented as a feature switch as it can increase processing time (while +classes are removed and added) so for large data sets you might want to +turn this off.

        <static> bStateSave :boolean

        Enable or disable state saving. When enabled a cookie will be used to save +table display information such as pagination information, display length, +filtering and sorting. As such when the end user reloads the page the +display display will match what thy had previously set up.

        <static> fnCookieCallback :function

        Customise the cookie and / or the parameters being stored when using +DataTables with state saving enabled. This function is called whenever +the cookie is modified, and it expects a fully formed cookie string to be +returned. Note that the data object passed in is a Javascript object which +must be converted to a string (JSON.stringify for example).

        <static> fnCreatedRow :function

        This function is called when a TR element is created (and all TD child +elements have been inserted), or registered if using a DOM source, allowing +manipulation of the TR element (adding classes etc).

        <static> fnDrawCallback :function

        This function is called on every 'draw' event, and allows you to +dynamically modify any aspect you want about the created DOM.

        <static> fnFooterCallback :function

        Identical to fnHeaderCallback() but for the table footer this function +allows you to modify the table footer on every 'draw' even.

        <static> fnFormatNumber :function

        When rendering large numbers in the information element for the table +(i.e. "Showing 1 to 10 of 57 entries") DataTables will render large numbers +to have a comma separator for the 'thousands' units (e.g. 1 million is +rendered as "1,000,000") to help readability for the end user. This +function will override the default method DataTables uses.

        <static> fnHeaderCallback :function

        This function is called on every 'draw' event, and allows you to +dynamically modify the header row. This can be used to calculate and +display useful information about the table.

        <static> fnInfoCallback :function

        The information element can be used to convey information about the current +state of the table. Although the internationalisation options presented by +DataTables are quite capable of dealing with most customisations, there may +be times where you wish to customise the string further. This callback +allows you to do exactly that.

        <static> fnInitComplete :function

        Called when the table has been initialised. Normally DataTables will +initialise sequentially and there will be no need for this function, +however, this does not hold true when using external language information +since that is obtained using an async XHR call.

        <static> fnPreDrawCallback :function

        Called at the very start of each table draw and can be used to cancel the +draw by returning false, any other return (including undefined) results in +the full draw occurring).

        <static> fnRowCallback :function

        This function allows you to 'post process' each row after it have been +generated for each table draw, but before it is rendered on screen. This +function might be used for setting the row class name etc.

        <static> fnServerData :function

        This parameter allows you to override the default function which obtains +the data from the server ($.getJSON) so something more suitable for your +application. For example you could use POST data, or pull information from +a Gears or AIR database.

        <static> fnServerParams :function

        It is often useful to send extra data to the server when making an Ajax +request - for example custom filtering information, and this callback +function makes it trivial to send extra information to the server. The +passed in parameter is the data set that has been constructed by +DataTables, and you can add to this or modify it as you require.

        <static> fnStateLoad :function

        Load the table state. With this function you can define from where, and how, the +state of a table is loaded. By default DataTables will load from its state saving +cookie, but you might wish to use local storage (HTML5) or a server-side database.

        <static> fnStateLoaded :function

        Callback that is called when the state has been loaded from the state saving method +and the DataTables settings object has been modified as a result of the loaded state.

        <static> fnStateLoadParams :function

        Callback which allows modification of the saved state prior to loading that state. +This callback is called when the table is loading state from the stored data, but +prior to the settings object being modified by the saved state. Note that for +plug-in authors, you should use the 'stateLoadParams' event to load parameters for +a plug-in.

        <static> fnStateSave :function

        Save the table state. This function allows you to define where and how the state +information for the table is stored - by default it will use a cookie, but you +might want to use local storage (HTML5) or a server-side database.

        <static> fnStateSaveParams :function

        Callback which allows modification of the state to be saved. Called when the table +has changed state a new state save is required. This method allows modification of +the state saving object prior to actually doing the save, including addition or +other state properties or modification. Note that for plug-in authors, you should +use the 'stateSaveParams' event to save parameters for a plug-in.

        <static> iCookieDuration :int

        Duration of the cookie which is used for storing session information. This +value is given in seconds.

        <static> iDeferLoading :int|array

        When enabled DataTables will not make a request to the server for the first +page draw - rather it will use the data already on the page (no sorting etc +will be applied to it), thus saving on an XHR at load time. iDeferLoading +is used to indicate that deferred loading is required, but it is also used +to tell DataTables how many records there are in the full table (allowing +the information element and pagination to be displayed correctly). In the case +where a filtering is applied to the table on initial load, this can be +indicated by giving the parameter as an array, where the first element is +the number of records available after filtering and the second element is the +number of records without filtering (allowing the table information element +to be shown correctly).

        <static> iDisplayLength :int

        Number of rows to display on a single page when using pagination. If +feature enabled (bLengthChange) then the end user will be able to override +this to a custom setting using a pop-up menu.

        <static> iDisplayStart :int

        Define the starting point for data display when using DataTables with +pagination. Note that this parameter is the number of records, rather than +the page number, so if you have 10 records per page and want to start on +the third page, it should be "20".

        <static> iScrollLoadGap :int

        The scroll gap is the amount of scrolling that is left to go before +DataTables will load the next 'page' of data automatically. You typically +want a gap which is big enough that the scrolling will be smooth for the +user, while not so large that it will load more data than need.

        <static> iTabIndex :int

        By default DataTables allows keyboard navigation of the table (sorting, paging, +and filtering) by adding a tabindex attribute to the required elements. This +allows you to tab through the controls and press the enter key to activate them. +The tabindex is default 0, meaning that the tab follows the flow of the document. +You can overrule this using this parameter if you wish. Use a value of -1 to +disable built-in keyboard navigation.

        <static> sAjaxDataProp :string

        By default DataTables will look for the property 'aaData' when obtaining +data from an Ajax source or for server-side processing - this parameter +allows that property to be changed. You can use Javascript dotted object +notation to get a data source for multiple levels of nesting.

        <static> sAjaxSource :string

        You can instruct DataTables to load data from an external source using this +parameter (use aData if you want to pass data in you already have). Simply +provide a url a JSON object can be obtained from. This object must include +the parameter 'aaData' which is the data source for the table.

        <static> sCookiePrefix :string

        This parameter can be used to override the default prefix that DataTables +assigns to a cookie when state saving is enabled.

        <static> sDom :string

        This initialisation variable allows you to specify exactly where in the +DOM you want DataTables to inject the various controls it adds to the page +(for example you might want the pagination controls at the top of the +table). DIV elements (with or without a custom class) can also be added to +aid styling. The follow syntax is used: +

          +
        • The following options are allowed:
          +
            +
          • 'l' - Length changing
          • 'f' - Filtering input +
          • 't' - The table!
          • +
          • 'i' - Information
          • +
          • 'p' - Pagination
          • +
          • 'r' - pRocessing
          • +
          +
        • +
        • The following constants are allowed: +
            +
          • 'H' - jQueryUI theme "header" classes ('fg-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix')
          • +
          • 'F' - jQueryUI theme "footer" classes ('fg-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix')
          • +
          +
        • +
        • The following syntax is expected: +
            +
          • '<' and '>' - div elements
          • +
          • '<"class" and '>' - div with a class
          • +
          • '<"#id" and '>' - div with an ID
          • +
          +
        • +
        • Examples: +
            +
          • '<"wrapper"flipt>'
          • +
          • '<lf<t>ip>'
          • +
          +
        • +

        <static> sPaginationType :string

        DataTables features two different built-in pagination interaction methods +('two_button' or 'full_numbers') which present different page controls to +the end user. Further methods can be added using the API (see below).

        <static> sScrollX :string

        Enable horizontal scrolling. When a table is too wide to fit into a certain +layout, or you have a large number of columns in the table, you can enable +x-scrolling to show the table in a viewport, which can be scrolled. This +property can be any CSS unit, or a number (in which case it will be treated +as a pixel measurement).

        <static> sScrollXInner :string

        This property can be used to force a DataTable to use more width than it +might otherwise do when x-scrolling is enabled. For example if you have a +table which requires to be well spaced, this parameter is useful for +"over-sizing" the table, and thus forcing scrolling. This property can by +any CSS unit, or a number (in which case it will be treated as a pixel +measurement).

        <static> sScrollY :string

        Enable vertical scrolling. Vertical scrolling will constrain the DataTable +to the given height, and enable scrolling for any data which overflows the +current viewport. This can be used as an alternative to paging to display +a lot of data in a small area (although paging and scrolling can both be +enabled at the same time). This property can be any CSS unit, or a number +(in which case it will be treated as a pixel measurement).

        <static> sServerMethod :string

        Set the HTTP method that is used to make the Ajax call for server-side +processing or Ajax sourced data.

        +
        +
        + + + + +
        + +

        Details

        +

        Properties - static

        +
        +
        <static> aaData :array

        An array of data to use for the table, passed in at initialisation which +will be used in preference to any data which is already in the DOM. This is +particularly useful for constructing tables purely in Javascript, for +example with a custom Ajax call.

        + +
        +
        Examples
        +
        +
           // Using a 2D array data source
        +   $(document).ready( function () {
        +     $('#example').dataTable( {
        +       "aaData": [
        +         ['Trident', 'Internet Explorer 4.0', 'Win 95+', 4, 'X'],
        +         ['Trident', 'Internet Explorer 5.0', 'Win 95+', 5, 'C'],
        +       ],
        +       "aoColumns": [
        +         { "sTitle": "Engine" },
        +         { "sTitle": "Browser" },
        +         { "sTitle": "Platform" },
        +         { "sTitle": "Version" },
        +         { "sTitle": "Grade" }
        +       ]
        +     } );
        +   } );
        +   
        + 
        +
        + +
        +
           // Using an array of objects as a data source (mData)
        +   $(document).ready( function () {
        +     $('#example').dataTable( {
        +       "aaData": [
        +         {
        +           "engine":   "Trident",
        +           "browser":  "Internet Explorer 4.0",
        +           "platform": "Win 95+",
        +           "version":  4,
        +           "grade":    "X"
        +         },
        +         {
        +           "engine":   "Trident",
        +           "browser":  "Internet Explorer 5.0",
        +           "platform": "Win 95+",
        +           "version":  5,
        +           "grade":    "C"
        +         }
        +       ],
        +       "aoColumns": [
        +         { "sTitle": "Engine",   "mData": "engine" },
        +         { "sTitle": "Browser",  "mData": "browser" },
        +         { "sTitle": "Platform", "mData": "platform" },
        +         { "sTitle": "Version",  "mData": "version" },
        +         { "sTitle": "Grade",    "mData": "grade" }
        +       ]
        +     } );
        +   } );
        +
        +
        <static> aaSorting :array

        If sorting is enabled, then DataTables will perform a first pass sort on +initialisation. You can define which column(s) the sort is performed upon, +and the sorting direction, with this variable. The aaSorting array should +contain an array for each column to be sorted initially containing the +column's index and a direction string ('asc' or 'desc').

        + +
        +
        Example
        +
        +
           // Sort by 3rd column first, and then 4th column
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "aaSorting": [[2,'asc'], [3,'desc']]
        +     } );
        +   } );
        +   
        +   // No initial sorting
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "aaSorting": []
        +     } );
        +   } );
        +
        +
        <static> aaSortingFixed :array

        This parameter is basically identical to the aaSorting parameter, but +cannot be overridden by user interaction with the table. What this means +is that you could have a column (visible or hidden) which the sorting will +always be forced on first - any sorting after that (from the user) will +then be performed as required. This can be useful for grouping rows +together.

        + +
        +
        Example
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "aaSortingFixed": [[0,'asc']]
        +     } );
        +   } )
        +
        +
        <static> aLengthMenu :array

        This parameter allows you to readily specify the entries in the length drop +down menu that DataTables shows when pagination is enabled. It can be +either a 1D array of options which will be used for both the displayed +option and the value, or a 2D array which will use the array in the first +position as the value, and the array in the second position as the +displayed options (useful for language strings such as 'All').

        + +
        +
        Examples
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "aLengthMenu": [[10, 25, 50, -1], [10, 25, 50, "All"]]
        +     } );
        +   } );
        + 
        + 
        +
        + +
        +
           // Setting the default display length as well as length menu
        +   // This is likely to be wanted if you remove the '10' option which
        +   // is the iDisplayLength default.
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "iDisplayLength": 25,
        +       "aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]]
        +     } );
        +   } );
        +
        +
        <static> aoColumnDefs

        Very similar to aoColumns, aoColumnDefs allows you to target a specific +column, multiple columns, or all columns, using the aTargets property of +each object in the array. This allows great flexibility when creating +tables, as the aoColumnDefs arrays can be of any length, targeting the +columns you specifically want. aoColumnDefs may use any of the column +options available: DataTable.defaults.columns, but it must +have aTargets defined in each object in the array. Values in the aTargets +array may be: +

          +
        • a string - class name will be matched on the TH for the column
        • +
        • 0 or a positive integer - column index counting from the left
        • +
        • a negative integer - column index counting from the right
        • +
        • the string "_all" - all columns (i.e. assign a default)
        • +

        + +
        +
        <static> aoColumns

        The aoColumns option in the initialisation parameter allows you to define +details about the way individual columns behave. For a full list of +column options that can be set, please see +DataTable.defaults.columns. Note that if you use aoColumns to +define your columns, you must have an entry in the array for every single +column that you have in your table (these can be null if you don't which +to specify any options).

        + +
        +
        <static> aoSearchCols :array

        Basically the same as oSearch, this parameter defines the individual column +filtering state at initialisation time. The array must be of the same size +as the number of columns, and each element be an object with the parameters +"sSearch" and "bEscapeRegex" (the latter is optional). 'null' is also +accepted and the default will be used.

        + +
        +
        Example
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "aoSearchCols": [
        +         null,
        +         { "sSearch": "My filter" },
        +         null,
        +         { "sSearch": "^[0-9]", "bEscapeRegex": false }
        +       ]
        +     } );
        +   } )
        +
        +
        <static> asStripeClasses :array

        An array of CSS classes that should be applied to displayed rows. This +array may be of any length, and DataTables will apply each class +sequentially, looping when required.

        + +
        +
        Example
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "asStripeClasses": [ 'strip1', 'strip2', 'strip3' ]
        +     } );
        +   } )
        +
        +
        <static> bAutoWidth :boolean

        Enable or disable automatic column width calculation. This can be disabled +as an optimisation (it takes some time to calculate the widths) if the +tables widths are passed in using aoColumns.

        + +
        +
        Example
        +
        +
           $(document).ready( function () {
        +     $('#example').dataTable( {
        +       "bAutoWidth": false
        +     } );
        +   } );
        +
        +
        <static> bDeferRender :boolean

        Deferred rendering can provide DataTables with a huge speed boost when you +are using an Ajax or JS data source for the table. This option, when set to +true, will cause DataTables to defer the creation of the table elements for +each row until they are needed for a draw - saving a significant amount of +time.

        + +
        +
        Example
        +
        +
           $(document).ready( function() {
        +     var oTable = $('#example').dataTable( {
        +       "sAjaxSource": "sources/arrays.txt",
        +       "bDeferRender": true
        +     } );
        +   } );
        +
        +
        <static> bDestroy :boolean

        Replace a DataTable which matches the given selector and replace it with +one which has the properties of the new initialisation object passed. If no +table matches the selector, then the new DataTable will be constructed as +per normal.

        + +
        +
        Example
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "sScrollY": "200px",
        +       "bPaginate": false
        +     } );
        +     
        +     // Some time later....
        +     $('#example').dataTable( {
        +       "bFilter": false,
        +       "bDestroy": true
        +     } );
        +   } );
        +
        +
        <static> bFilter :boolean

        Enable or disable filtering of data. Filtering in DataTables is "smart" in +that it allows the end user to input multiple words (space separated) and +will match a row containing those words, even if not in the order that was +specified (this allow matching across multiple columns). Note that if you +wish to use filtering in DataTables this must remain 'true' - to remove the +default filtering input box and retain filtering abilities, please use +DataTable.defaults.sDom.

        + +
        +
        Example
        +
        +
           $(document).ready( function () {
        +     $('#example').dataTable( {
        +       "bFilter": false
        +     } );
        +   } );
        +
        +
        <static> bInfo :boolean

        Enable or disable the table information display. This shows information +about the data that is currently visible on the page, including information +about filtered data if that action is being performed.

        + +
        +
        Example
        +
        +
           $(document).ready( function () {
        +     $('#example').dataTable( {
        +       "bInfo": false
        +     } );
        +   } );
        +
        +
        <static> bJQueryUI :boolean

        Enable jQuery UI ThemeRoller support (required as ThemeRoller requires some +slightly different and additional mark-up from what DataTables has +traditionally used).

        + +
        +
        Example
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "bJQueryUI": true
        +     } );
        +   } );
        +
        +
        <static> bLengthChange :boolean

        Allows the end user to select the size of a formatted page from a select +menu (sizes are 10, 25, 50 and 100). Requires pagination (bPaginate).

        + +
        +
        Example
        +
        +
           $(document).ready( function () {
        +     $('#example').dataTable( {
        +       "bLengthChange": false
        +     } );
        +   } );
        +
        +
        <static> bPaginate :boolean

        Enable or disable pagination.

        + +
        +
        Example
        +
        +
           $(document).ready( function () {
        +     $('#example').dataTable( {
        +       "bPaginate": false
        +     } );
        +   } );
        +
        +
        <static> bProcessing :boolean

        Enable or disable the display of a 'processing' indicator when the table is +being processed (e.g. a sort). This is particularly useful for tables with +large amounts of data where it can take a noticeable amount of time to sort +the entries.

        + +
        +
        Example
        +
        +
           $(document).ready( function () {
        +     $('#example').dataTable( {
        +       "bProcessing": true
        +     } );
        +   } );
        +
        +
        <static> bRetrieve :boolean

        Retrieve the DataTables object for the given selector. Note that if the +table has already been initialised, this parameter will cause DataTables +to simply return the object that has already been set up - it will not take +account of any changes you might have made to the initialisation object +passed to DataTables (setting this parameter to true is an acknowledgement +that you understand this). bDestroy can be used to reinitialise a table if +you need.

        + +
        +
        Example
        +
        +
           $(document).ready( function() {
        +     initTable();
        +     tableActions();
        +   } );
        +   
        +   function initTable ()
        +   {
        +     return $('#example').dataTable( {
        +       "sScrollY": "200px",
        +       "bPaginate": false,
        +       "bRetrieve": true
        +     } );
        +   }
        +   
        +   function tableActions ()
        +   {
        +     var oTable = initTable();
        +     // perform API operations with oTable 
        +   }
        +
        +
        <static> bScrollAutoCss :boolean

        Indicate if DataTables should be allowed to set the padding / margin +etc for the scrolling header elements or not. Typically you will want +this.

        + +
        +
        Example
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "bScrollAutoCss": false,
        +       "sScrollY": "200px"
        +     } );
        +   } );
        +
        +
        <static> bScrollCollapse :boolean

        When vertical (y) scrolling is enabled, DataTables will force the height of +the table's viewport to the given height at all times (useful for layout). +However, this can look odd when filtering data down to a small data set, +and the footer is left "floating" further down. This parameter (when +enabled) will cause DataTables to collapse the table's viewport down when +the result set will fit within the given Y height.

        + +
        +
        Example
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "sScrollY": "200",
        +       "bScrollCollapse": true
        +     } );
        +   } );
        +
        +
        <static> bScrollInfinite :boolean

        Enable infinite scrolling for DataTables (to be used in combination with +sScrollY). Infinite scrolling means that DataTables will continually load +data as a user scrolls through a table, which is very useful for large +dataset. This cannot be used with pagination, which is automatically +disabled. Note - the Scroller extra for DataTables is recommended in +in preference to this option.

        + +
        +
        Example
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "bScrollInfinite": true,
        +       "bScrollCollapse": true,
        +       "sScrollY": "200px"
        +     } );
        +   } );
        +
        +
        <static> bServerSide :boolean

        Configure DataTables to use server-side processing. Note that the +sAjaxSource parameter must also be given in order to give DataTables a +source to obtain the required data for each draw.

        + +
        +
        Example
        +
        +
           $(document).ready( function () {
        +     $('#example').dataTable( {
        +       "bServerSide": true,
        +       "sAjaxSource": "xhr.php"
        +     } );
        +   } );
        +
        +
        <static> bSort :boolean

        Enable or disable sorting of columns. Sorting of individual columns can be +disabled by the "bSortable" option for each column.

        + +
        +
        Example
        +
        +
           $(document).ready( function () {
        +     $('#example').dataTable( {
        +       "bSort": false
        +     } );
        +   } );
        +
        +
        <static> bSortCellsTop :boolean

        Allows control over whether DataTables should use the top (true) unique +cell that is found for a single column, or the bottom (false - default). +This is useful when using complex headers.

        + +
        +
        Example
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "bSortCellsTop": true
        +     } );
        +   } );
        +
        +
        <static> bSortClasses :boolean

        Enable or disable the addition of the classes 'sorting_1', 'sorting_2' and +'sorting_3' to the columns which are currently being sorted on. This is +presented as a feature switch as it can increase processing time (while +classes are removed and added) so for large data sets you might want to +turn this off.

        + +
        +
        Example
        +
        +
           $(document).ready( function () {
        +     $('#example').dataTable( {
        +       "bSortClasses": false
        +     } );
        +   } );
        +
        +
        <static> bStateSave :boolean

        Enable or disable state saving. When enabled a cookie will be used to save +table display information such as pagination information, display length, +filtering and sorting. As such when the end user reloads the page the +display display will match what thy had previously set up.

        + +
        +
        Example
        +
        +
           $(document).ready( function () {
        +     $('#example').dataTable( {
        +       "bStateSave": true
        +     } );
        +   } );
        +
        +
        <static> fnCookieCallback :function

        Customise the cookie and / or the parameters being stored when using +DataTables with state saving enabled. This function is called whenever +the cookie is modified, and it expects a fully formed cookie string to be +returned. Note that the data object passed in is a Javascript object which +must be converted to a string (JSON.stringify for example).

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        sNamestring

        Name of the cookie defined by DataTables

        2
        oDataobject

        Data to be stored in the cookie

        3
        sExpiresstring

        Cookie expires string

        4
        sPathstring

        Path of the cookie to set

        Returns:

        Cookie formatted string (which should be encoded by + using encodeURIComponent())

        Example:
        +
        +
           $(document).ready( function () {
        +     $('#example').dataTable( {
        +       "fnCookieCallback": function (sName, oData, sExpires, sPath) {
        +         // Customise oData or sName or whatever else here
        +         return sName + "="+JSON.stringify(oData)+"; expires=" + sExpires +"; path=" + sPath;
        +       }
        +     } );
        +   } );
        +
        +
        +
        <static> fnCreatedRow :function

        This function is called when a TR element is created (and all TD child +elements have been inserted), or registered if using a DOM source, allowing +manipulation of the TR element (adding classes etc).

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        nRownode

        "TR" element for the current row

        2
        aDataarray

        Raw data array for this row

        3
        iDataIndexint

        The index of this row in aoData

        Example:
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "fnCreatedRow": function( nRow, aData, iDataIndex ) {
        +         // Bold the grade for all 'A' grade browsers
        +         if ( aData[4] == "A" )
        +         {
        +           $('td:eq(4)', nRow).html( 'A' );
        +         }
        +       }
        +     } );
        +   } );
        +
        +
        +
        <static> fnDrawCallback :function

        This function is called on every 'draw' event, and allows you to +dynamically modify any aspect you want about the created DOM.

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        DataTables settings object

        Example:
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "fnDrawCallback": function( oSettings ) {
        +         alert( 'DataTables has redrawn the table' );
        +       }
        +     } );
        +   } );
        +
        +
        +
        <static> fnFooterCallback :function

        Identical to fnHeaderCallback() but for the table footer this function +allows you to modify the table footer on every 'draw' even.

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        nFootnode

        "TR" element for the footer

        2
        aDataarray

        Full table data (as derived from the original HTML)

        3
        iStartint

        Index for the current display starting point in the + display array

        4
        iEndint

        Index for the current display ending point in the + display array

        5
        aiDisplayarray int

        Index array to translate the visual position + to the full data array

        Example:
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "fnFooterCallback": function( nFoot, aData, iStart, iEnd, aiDisplay ) {
        +         nFoot.getElementsByTagName('th')[0].innerHTML = "Starting index is "+iStart;
        +       }
        +     } );
        +   } )
        +
        +
        +
        <static> fnFormatNumber :function

        When rendering large numbers in the information element for the table +(i.e. "Showing 1 to 10 of 57 entries") DataTables will render large numbers +to have a comma separator for the 'thousands' units (e.g. 1 million is +rendered as "1,000,000") to help readability for the end user. This +function will override the default method DataTables uses.

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        iInint

        number to be formatted

        Returns:

        formatted string for DataTables to show the number

        Example:
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "fnFormatNumber": function ( iIn ) {
        +         if ( iIn < 1000 ) {
        +           return iIn;
        +         } else {
        +           var 
        +             s=(iIn+""), 
        +             a=s.split(""), out="", 
        +             iLen=s.length;
        +           
        +           for ( var i=0 ; i<iLen ; i++ ) {
        +             if ( i%3 === 0 && i !== 0 ) {
        +               out = "'"+out;
        +             }
        +             out = a[iLen-i-1]+out;
        +           }
        +         }
        +         return out;
        +       };
        +     } );
        +   } );
        +
        +
        +
        <static> fnHeaderCallback :function

        This function is called on every 'draw' event, and allows you to +dynamically modify the header row. This can be used to calculate and +display useful information about the table.

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        nHeadnode

        "TR" element for the header

        2
        aDataarray

        Full table data (as derived from the original HTML)

        3
        iStartint

        Index for the current display starting point in the + display array

        4
        iEndint

        Index for the current display ending point in the + display array

        5
        aiDisplayarray int

        Index array to translate the visual position + to the full data array

        Example:
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "fnHeaderCallback": function( nHead, aData, iStart, iEnd, aiDisplay ) {
        +         nHead.getElementsByTagName('th')[0].innerHTML = "Displaying "+(iEnd-iStart)+" records";
        +       }
        +     } );
        +   } )
        +
        +
        +
        <static> fnInfoCallback :function

        The information element can be used to convey information about the current +state of the table. Although the internationalisation options presented by +DataTables are quite capable of dealing with most customisations, there may +be times where you wish to customise the string further. This callback +allows you to do exactly that.

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        DataTables settings object

        2
        iStartint

        Starting position in data for the draw

        3
        iEndint

        End position in data for the draw

        4
        iMaxint

        Total number of rows in the table (regardless of + filtering)

        5
        iTotalint

        Total number of rows in the data set, after filtering

        6
        sPrestring

        The string that DataTables has formatted using it's + own rules

        Returns:

        The string to be displayed in the information element.

        Example:
        +
        +
           $('#example').dataTable( {
        +     "fnInfoCallback": function( oSettings, iStart, iEnd, iMax, iTotal, sPre ) {
        +       return iStart +" to "+ iEnd;
        +     }
        +   } );
        +
        +
        +
        <static> fnInitComplete :function

        Called when the table has been initialised. Normally DataTables will +initialise sequentially and there will be no need for this function, +however, this does not hold true when using external language information +since that is obtained using an async XHR call.

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        DataTables settings object

        2
        jsonobject

        The JSON object request from the server - only + present if client-side Ajax sourced data is used

        Example:
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "fnInitComplete": function(oSettings, json) {
        +         alert( 'DataTables has finished its initialisation.' );
        +       }
        +     } );
        +   } )
        +
        +
        +
        <static> fnPreDrawCallback :function

        Called at the very start of each table draw and can be used to cancel the +draw by returning false, any other return (including undefined) results in +the full draw occurring).

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        DataTables settings object

        Returns:

        False will cancel the draw, anything else (including no + return) will allow it to complete.

        Example:
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "fnPreDrawCallback": function( oSettings ) {
        +         if ( $('#test').val() == 1 ) {
        +           return false;
        +         }
        +       }
        +     } );
        +   } );
        +
        +
        +
        <static> fnRowCallback :function

        This function allows you to 'post process' each row after it have been +generated for each table draw, but before it is rendered on screen. This +function might be used for setting the row class name etc.

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        nRownode

        "TR" element for the current row

        2
        aDataarray

        Raw data array for this row

        3
        iDisplayIndexint

        The display index for the current table draw

        4
        iDisplayIndexFullint

        The index of the data in the full list of + rows (after filtering)

        Example:
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "fnRowCallback": function( nRow, aData, iDisplayIndex, iDisplayIndexFull ) {
        +         // Bold the grade for all 'A' grade browsers
        +         if ( aData[4] == "A" )
        +         {
        +           $('td:eq(4)', nRow).html( 'A' );
        +         }
        +       }
        +     } );
        +   } );
        +
        +
        +
        <static> fnServerData :function

        This parameter allows you to override the default function which obtains +the data from the server ($.getJSON) so something more suitable for your +application. For example you could use POST data, or pull information from +a Gears or AIR database.

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        sSourcestring

        HTTP source to obtain the data from (sAjaxSource)

        2
        aoDataarray

        A key/value pair object containing the data to send + to the server

        3
        fnCallbackfunction

        to be called on completion of the data get + process that will draw the data on the page.

        4
        oSettingsobject

        DataTables settings object

        Example:
        +
        +
           // POST data to server
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "bProcessing": true,
        +       "bServerSide": true,
        +       "sAjaxSource": "xhr.php",
        +       "fnServerData": function ( sSource, aoData, fnCallback, oSettings ) {
        +         oSettings.jqXHR = $.ajax( {
        +           "dataType": 'json', 
        +           "type": "POST", 
        +           "url": sSource, 
        +           "data": aoData, 
        +           "success": fnCallback
        +         } );
        +       }
        +     } );
        +   } );
        +
        +
        +
        <static> fnServerParams :function

        It is often useful to send extra data to the server when making an Ajax +request - for example custom filtering information, and this callback +function makes it trivial to send extra information to the server. The +passed in parameter is the data set that has been constructed by +DataTables, and you can add to this or modify it as you require.

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        aoDataarray

        Data array (array of objects which are name/value + pairs) that has been constructed by DataTables and will be sent to the + server. In the case of Ajax sourced data with server-side processing + this will be an empty array, for server-side processing there will be a + significant number of parameters!

        Returns:

        Ensure that you modify the aoData array passed in, + as this is passed by reference.

        Example:
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "bProcessing": true,
        +       "bServerSide": true,
        +       "sAjaxSource": "scripts/server_processing.php",
        +       "fnServerParams": function ( aoData ) {
        +         aoData.push( { "name": "more_data", "value": "my_value" } );
        +       }
        +     } );
        +   } );
        +
        +
        +
        <static> fnStateLoad :function

        Load the table state. With this function you can define from where, and how, the +state of a table is loaded. By default DataTables will load from its state saving +cookie, but you might wish to use local storage (HTML5) or a server-side database.

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        DataTables settings object

        Returns:

        The DataTables state object to be loaded

        Example:
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "bStateSave": true,
        +       "fnStateLoad": function (oSettings) {
        +         var o;
        +         
        +         // Send an Ajax request to the server to get the data. Note that
        +         // this is a synchronous request.
        +         $.ajax( {
        +           "url": "/state_load",
        +           "async": false,
        +           "dataType": "json",
        +           "success": function (json) {
        +             o = json;
        +           }
        +         } );
        +         
        +         return o;
        +       }
        +     } );
        +   } );
        +
        +
        +
        <static> fnStateLoaded :function

        Callback that is called when the state has been loaded from the state saving method +and the DataTables settings object has been modified as a result of the loaded state.

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        DataTables settings object

        2
        oDataobject

        The state object that was loaded

        Example:
        +
        +
           // Show an alert with the filtering value that was saved
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "bStateSave": true,
        +       "fnStateLoaded": function (oSettings, oData) {
        +         alert( 'Saved filter was: '+oData.oSearch.sSearch );
        +       }
        +     } );
        +   } );
        +
        +
        +
        <static> fnStateLoadParams :function

        Callback which allows modification of the saved state prior to loading that state. +This callback is called when the table is loading state from the stored data, but +prior to the settings object being modified by the saved state. Note that for +plug-in authors, you should use the 'stateLoadParams' event to load parameters for +a plug-in.

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        DataTables settings object

        2
        oDataobject

        The state object that is to be loaded

        Examples:
        +
        +
           // Remove a saved filter, so filtering is never loaded
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "bStateSave": true,
        +       "fnStateLoadParams": function (oSettings, oData) {
        +         oData.oSearch.sSearch = "";
        +       }
        +     } );
        +   } );
        +
        + 
        +
        + +
        +
           // Disallow state loading by returning false
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "bStateSave": true,
        +       "fnStateLoadParams": function (oSettings, oData) {
        +         return false;
        +       }
        +     } );
        +   } );
        +
        +
        +
        <static> fnStateSave :function

        Save the table state. This function allows you to define where and how the state +information for the table is stored - by default it will use a cookie, but you +might want to use local storage (HTML5) or a server-side database.

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        DataTables settings object

        2
        oDataobject

        The state object to be saved

        Example:
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "bStateSave": true,
        +       "fnStateSave": function (oSettings, oData) {
        +         // Send an Ajax request to the server with the state object
        +         $.ajax( {
        +           "url": "/state_save",
        +           "data": oData,
        +           "dataType": "json",
        +           "method": "POST"
        +           "success": function () {}
        +         } );
        +       }
        +     } );
        +   } );
        +
        +
        +
        <static> fnStateSaveParams :function

        Callback which allows modification of the state to be saved. Called when the table +has changed state a new state save is required. This method allows modification of +the state saving object prior to actually doing the save, including addition or +other state properties or modification. Note that for plug-in authors, you should +use the 'stateSaveParams' event to save parameters for a plug-in.

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oSettingsobject

        DataTables settings object

        2
        oDataobject

        The state object to be saved

        Example:
        +
        +
           // Remove a saved filter, so filtering is never saved
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "bStateSave": true,
        +       "fnStateSaveParams": function (oSettings, oData) {
        +         oData.oSearch.sSearch = "";
        +       }
        +     } );
        +   } );
        +
        +
        +
        <static> iCookieDuration :int

        Duration of the cookie which is used for storing session information. This +value is given in seconds.

        + +
        +
        Example
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "iCookieDuration": 60*60*24; // 1 day
        +     } );
        +   } )
        +
        +
        <static> iDeferLoading :int|array

        When enabled DataTables will not make a request to the server for the first +page draw - rather it will use the data already on the page (no sorting etc +will be applied to it), thus saving on an XHR at load time. iDeferLoading +is used to indicate that deferred loading is required, but it is also used +to tell DataTables how many records there are in the full table (allowing +the information element and pagination to be displayed correctly). In the case +where a filtering is applied to the table on initial load, this can be +indicated by giving the parameter as an array, where the first element is +the number of records available after filtering and the second element is the +number of records without filtering (allowing the table information element +to be shown correctly).

        + +
        +
        Examples
        +
        +
           // 57 records available in the table, no filtering applied
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "bServerSide": true,
        +       "sAjaxSource": "scripts/server_processing.php",
        +       "iDeferLoading": 57
        +     } );
        +   } );
        +
        + 
        +
        + +
        +
           // 57 records after filtering, 100 without filtering (an initial filter applied)
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "bServerSide": true,
        +       "sAjaxSource": "scripts/server_processing.php",
        +       "iDeferLoading": [ 57, 100 ],
        +       "oSearch": {
        +         "sSearch": "my_filter"
        +       }
        +     } );
        +   } );
        +
        +
        <static> iDisplayLength :int

        Number of rows to display on a single page when using pagination. If +feature enabled (bLengthChange) then the end user will be able to override +this to a custom setting using a pop-up menu.

        + +
        +
        Example
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "iDisplayLength": 50
        +     } );
        +   } )
        +
        +
        <static> iDisplayStart :int

        Define the starting point for data display when using DataTables with +pagination. Note that this parameter is the number of records, rather than +the page number, so if you have 10 records per page and want to start on +the third page, it should be "20".

        + +
        +
        Example
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "iDisplayStart": 20
        +     } );
        +   } )
        +
        +
        <static> iScrollLoadGap :int

        The scroll gap is the amount of scrolling that is left to go before +DataTables will load the next 'page' of data automatically. You typically +want a gap which is big enough that the scrolling will be smooth for the +user, while not so large that it will load more data than need.

        + +
        +
        Example
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "bScrollInfinite": true,
        +       "bScrollCollapse": true,
        +       "sScrollY": "200px",
        +       "iScrollLoadGap": 50
        +     } );
        +   } );
        +
        +
        <static> iTabIndex :int

        By default DataTables allows keyboard navigation of the table (sorting, paging, +and filtering) by adding a tabindex attribute to the required elements. This +allows you to tab through the controls and press the enter key to activate them. +The tabindex is default 0, meaning that the tab follows the flow of the document. +You can overrule this using this parameter if you wish. Use a value of -1 to +disable built-in keyboard navigation.

        + +
        +
        Example
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "iTabIndex": 1
        +     } );
        +   } );
        +
        +
        <static> sAjaxDataProp :string

        By default DataTables will look for the property 'aaData' when obtaining +data from an Ajax source or for server-side processing - this parameter +allows that property to be changed. You can use Javascript dotted object +notation to get a data source for multiple levels of nesting.

        + +
        +
        Examples
        +
        +
           // Get data from { "data": [...] }
        +   $(document).ready( function() {
        +     var oTable = $('#example').dataTable( {
        +       "sAjaxSource": "sources/data.txt",
        +       "sAjaxDataProp": "data"
        +     } );
        +   } );
        +   
        + 
        +
        + +
        +
           // Get data from { "data": { "inner": [...] } }
        +   $(document).ready( function() {
        +     var oTable = $('#example').dataTable( {
        +       "sAjaxSource": "sources/data.txt",
        +       "sAjaxDataProp": "data.inner"
        +     } );
        +   } );
        +
        +
        <static> sAjaxSource :string

        You can instruct DataTables to load data from an external source using this +parameter (use aData if you want to pass data in you already have). Simply +provide a url a JSON object can be obtained from. This object must include +the parameter 'aaData' which is the data source for the table.

        + +
        +
        Example
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "sAjaxSource": "http://www.sprymedia.co.uk/dataTables/json.php"
        +     } );
        +   } )
        +
        +
        <static> sCookiePrefix :string

        This parameter can be used to override the default prefix that DataTables +assigns to a cookie when state saving is enabled.

        + +
        +
        Example
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "sCookiePrefix": "my_datatable_",
        +     } );
        +   } );
        +
        +
        <static> sDom :string

        This initialisation variable allows you to specify exactly where in the +DOM you want DataTables to inject the various controls it adds to the page +(for example you might want the pagination controls at the top of the +table). DIV elements (with or without a custom class) can also be added to +aid styling. The follow syntax is used: +

          +
        • The following options are allowed:
          +
            +
          • 'l' - Length changing
          • 'f' - Filtering input +
          • 't' - The table!
          • +
          • 'i' - Information
          • +
          • 'p' - Pagination
          • +
          • 'r' - pRocessing
          • +
          +
        • +
        • The following constants are allowed: +
            +
          • 'H' - jQueryUI theme "header" classes ('fg-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix')
          • +
          • 'F' - jQueryUI theme "footer" classes ('fg-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix')
          • +
          +
        • +
        • The following syntax is expected: +
            +
          • '<' and '>' - div elements
          • +
          • '<"class" and '>' - div with a class
          • +
          • '<"#id" and '>' - div with an ID
          • +
          +
        • +
        • Examples: +
            +
          • '<"wrapper"flipt>'
          • +
          • '<lf<t>ip>'
          • +
          +
        • +

        + +
        +
        Example
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "sDom": '<"top"i>rt<"bottom"flp><"clear">'
        +     } );
        +   } );
        +
        +
        <static> sPaginationType :string

        DataTables features two different built-in pagination interaction methods +('two_button' or 'full_numbers') which present different page controls to +the end user. Further methods can be added using the API (see below).

        + +
        +
        Example
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "sPaginationType": "full_numbers"
        +     } );
        +   } )
        +
        +
        <static> sScrollX :string

        Enable horizontal scrolling. When a table is too wide to fit into a certain +layout, or you have a large number of columns in the table, you can enable +x-scrolling to show the table in a viewport, which can be scrolled. This +property can be any CSS unit, or a number (in which case it will be treated +as a pixel measurement).

        + +
        +
        Example
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "sScrollX": "100%",
        +       "bScrollCollapse": true
        +     } );
        +   } );
        +
        +
        <static> sScrollXInner :string

        This property can be used to force a DataTable to use more width than it +might otherwise do when x-scrolling is enabled. For example if you have a +table which requires to be well spaced, this parameter is useful for +"over-sizing" the table, and thus forcing scrolling. This property can by +any CSS unit, or a number (in which case it will be treated as a pixel +measurement).

        + +
        +
        Example
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "sScrollX": "100%",
        +       "sScrollXInner": "110%"
        +     } );
        +   } );
        +
        +
        <static> sScrollY :string

        Enable vertical scrolling. Vertical scrolling will constrain the DataTable +to the given height, and enable scrolling for any data which overflows the +current viewport. This can be used as an alternative to paging to display +a lot of data in a small area (although paging and scrolling can both be +enabled at the same time). This property can be any CSS unit, or a number +(in which case it will be treated as a pixel measurement).

        + +
        +
        Example
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "sScrollY": "200px",
        +       "bPaginate": false
        +     } );
        +   } );
        +
        +
        <static> sServerMethod :string

        Set the HTTP method that is used to make the Ajax call for server-side +processing or Ajax sourced data.

        + +
        +
        Example
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "bServerSide": true,
        +       "sAjaxSource": "scripts/post.php",
        +       "sServerMethod": "POST"
        +     } );
        +   } );
        +
        +
        +
        +
        + +
        + + + + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/docs/DataTable.defaults.oLanguage.html b/docroot/sites/all/libraries/datatables/docs/DataTable.defaults.oLanguage.html new file mode 100644 index 00000000..58293d68 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/docs/DataTable.defaults.oLanguage.html @@ -0,0 +1,362 @@ + + + + + Namespace: oLanguage - documentation + + + + + + + + + +
        + + +
        +

        Namespace: oLanguage

        +

        Ancestry: DataTable » .defaults. » oLanguage

        +
        + DataTables v1.9.4 documentation +
        +
        + + + +
        +

        Navigation

        + +
        + + Hiding private elements + (toggle) + +
        +
        + + Showing extended elements + (toggle) + +
        +
        + +
        + +
        + +

        All strings that DataTables uses in the user interface that it creates +are defined in this object, allowing you to modified them individually or +completely replace them all as required.

        + +
        + +
        + + +
        + +

        Summary

        + +

        Namespaces

        +
        +
        oAria

        Strings that are used for WAI-ARIA labels and controls only (these are not +actually visible on the page, but will be read by screenreaders, and thus +must be internationalised as well).

        oPaginate

        Pagination string used by DataTables for the two built-in pagination +control types ("two_button" and "full_numbers")

        +

        Properties - static

        + +
        +
        <static> sEmptyTable :string

        This string is shown in preference to sZeroRecords when the table is +empty of data (regardless of filtering). Note that this is an optional +parameter - if it is not given, the value of sZeroRecords will be used +instead (either the default or given value).

        <static> sInfo :string

        This string gives information to the end user about the information that +is current on display on the page. The START, END and TOTAL +variables are all dynamically replaced as the table display updates, and +can be freely moved or removed as the language requirements change.

        <static> sInfoEmpty :string

        Display information string for when the table is empty. Typically the +format of this string should match sInfo.

        <static> sInfoFiltered :string

        When a user filters the information in a table, this string is appended +to the information (sInfo) to give an idea of how strong the filtering +is. The variable MAX is dynamically updated.

        <static> sInfoPostFix :string

        If can be useful to append extra information to the info string at times, +and this variable does exactly that. This information will be appended to +the sInfo (sInfoEmpty and sInfoFiltered in whatever combination they are +being used) at all times.

        <static> sInfoThousands :string

        DataTables has a build in number formatter (fnFormatNumber) which is used +to format large numbers that are used in the table information. By +default a comma is used, but this can be trivially changed to any +character you wish with this parameter.

        <static> sLengthMenu :string

        Detail the action that will be taken when the drop down menu for the +pagination length option is changed. The 'MENU' variable is replaced +with a default select list of 10, 25, 50 and 100, and can be replaced +with a custom select box if required.

        <static> sLoadingRecords :string

        When using Ajax sourced data and during the first draw when DataTables is +gathering the data, this message is shown in an empty row in the table to +indicate to the end user the the data is being loaded. Note that this +parameter is not used when loading data by server-side processing, just +Ajax sourced data with client-side processing.

        <static> sProcessing :string

        Text which is displayed when the table is processing a user action +(usually a sort command or similar).

        <static> sSearch :string

        Details the actions that will be taken when the user types into the +filtering input text box. The variable "INPUT", if used in the string, +is replaced with the HTML text box for the filtering input allowing +control over where it appears in the string. If "INPUT" is not given +then the input box is appended to the string automatically.

        <static> sUrl :string

        All of the language information can be stored in a file on the +server-side, which DataTables will look up if this parameter is passed. +It must store the URL of the language file, which is in a JSON format, +and the object has the same properties as the oLanguage object in the +initialiser object (i.e. the above parameters). Please refer to one of +the example language files to see how this works in action.

        <static> sZeroRecords :string

        Text shown inside the table records when the is no information to be +displayed after filtering. sEmptyTable is shown when there is simply no +information in the table at all (regardless of filtering).

        +
        +
        + + + + +
        + +

        Details

        +

        Properties - static

        +
        +
        <static> sEmptyTable :string

        This string is shown in preference to sZeroRecords when the table is +empty of data (regardless of filtering). Note that this is an optional +parameter - if it is not given, the value of sZeroRecords will be used +instead (either the default or given value).

        + +
        +
        Example
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "oLanguage": {
        +         "sEmptyTable": "No data available in table"
        +       }
        +     } );
        +   } );
        +
        +
        <static> sInfo :string

        This string gives information to the end user about the information that +is current on display on the page. The START, END and TOTAL +variables are all dynamically replaced as the table display updates, and +can be freely moved or removed as the language requirements change.

        + +
        +
        Example
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "oLanguage": {
        +         "sInfo": "Got a total of _TOTAL_ entries to show (_START_ to _END_)"
        +       }
        +     } );
        +   } );
        +
        +
        <static> sInfoEmpty :string

        Display information string for when the table is empty. Typically the +format of this string should match sInfo.

        + +
        +
        Example
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "oLanguage": {
        +         "sInfoEmpty": "No entries to show"
        +       }
        +     } );
        +   } );
        +
        +
        <static> sInfoFiltered :string

        When a user filters the information in a table, this string is appended +to the information (sInfo) to give an idea of how strong the filtering +is. The variable MAX is dynamically updated.

        + +
        +
        Example
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "oLanguage": {
        +         "sInfoFiltered": " - filtering from _MAX_ records"
        +       }
        +     } );
        +   } );
        +
        +
        <static> sInfoPostFix :string

        If can be useful to append extra information to the info string at times, +and this variable does exactly that. This information will be appended to +the sInfo (sInfoEmpty and sInfoFiltered in whatever combination they are +being used) at all times.

        + +
        +
        Example
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "oLanguage": {
        +         "sInfoPostFix": "All records shown are derived from real information."
        +       }
        +     } );
        +   } );
        +
        +
        <static> sInfoThousands :string

        DataTables has a build in number formatter (fnFormatNumber) which is used +to format large numbers that are used in the table information. By +default a comma is used, but this can be trivially changed to any +character you wish with this parameter.

        + +
        +
        Example
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "oLanguage": {
        +         "sInfoThousands": "'"
        +       }
        +     } );
        +   } );
        +
        +
        <static> sLengthMenu :string

        Detail the action that will be taken when the drop down menu for the +pagination length option is changed. The 'MENU' variable is replaced +with a default select list of 10, 25, 50 and 100, and can be replaced +with a custom select box if required.

        + +
        +
        Examples
        +
        +
           // Language change only
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "oLanguage": {
        +         "sLengthMenu": "Display _MENU_ records"
        +       }
        +     } );
        +   } );
        +   
        + 
        +
        + +
        +
           // Language and options change
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "oLanguage": {
        +         "sLengthMenu": 'Display  records'
        +       }
        +     } );
        +   } );
        +
        +
        <static> sLoadingRecords :string

        When using Ajax sourced data and during the first draw when DataTables is +gathering the data, this message is shown in an empty row in the table to +indicate to the end user the the data is being loaded. Note that this +parameter is not used when loading data by server-side processing, just +Ajax sourced data with client-side processing.

        + +
        +
        Example
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "oLanguage": {
        +         "sLoadingRecords": "Please wait - loading..."
        +       }
        +     } );
        +   } );
        +
        +
        <static> sProcessing :string

        Text which is displayed when the table is processing a user action +(usually a sort command or similar).

        + +
        +
        Example
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "oLanguage": {
        +         "sProcessing": "DataTables is currently busy"
        +       }
        +     } );
        +   } );
        +
        +
        <static> sSearch :string

        Details the actions that will be taken when the user types into the +filtering input text box. The variable "INPUT", if used in the string, +is replaced with the HTML text box for the filtering input allowing +control over where it appears in the string. If "INPUT" is not given +then the input box is appended to the string automatically.

        + +
        +
        Examples
        +
        +
           // Input text box will be appended at the end automatically
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "oLanguage": {
        +         "sSearch": "Filter records:"
        +       }
        +     } );
        +   } );
        +   
        + 
        +
        + +
        +
           // Specify where the filter should appear
        +   $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "oLanguage": {
        +         "sSearch": "Apply filter _INPUT_ to table"
        +       }
        +     } );
        +   } );
        +
        +
        <static> sUrl :string

        All of the language information can be stored in a file on the +server-side, which DataTables will look up if this parameter is passed. +It must store the URL of the language file, which is in a JSON format, +and the object has the same properties as the oLanguage object in the +initialiser object (i.e. the above parameters). Please refer to one of +the example language files to see how this works in action.

        + +
        +
        Example
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "oLanguage": {
        +         "sUrl": "http://www.sprymedia.co.uk/dataTables/lang.txt"
        +       }
        +     } );
        +   } );
        +
        +
        <static> sZeroRecords :string

        Text shown inside the table records when the is no information to be +displayed after filtering. sEmptyTable is shown when there is simply no +information in the table at all (regardless of filtering).

        + +
        +
        Example
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "oLanguage": {
        +         "sZeroRecords": "No records to display"
        +       }
        +     } );
        +   } );
        +
        +
        +
        +
        + +
        + + + + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/docs/DataTable.defaults.oLanguage.oAria.html b/docroot/sites/all/libraries/datatables/docs/DataTable.defaults.oLanguage.oAria.html new file mode 100644 index 00000000..74764e4d --- /dev/null +++ b/docroot/sites/all/libraries/datatables/docs/DataTable.defaults.oLanguage.oAria.html @@ -0,0 +1,135 @@ + + + + + Namespace: oAria - documentation + + + + + + + + + +
        + + +
        +

        Namespace: oAria

        +

        Ancestry: DataTable » .defaults » .oLanguage. » oAria

        +
        + DataTables v1.9.4 documentation +
        +
        + + + +
        +

        Navigation

        + +
        + + Hiding private elements + (toggle) + +
        +
        + + Showing extended elements + (toggle) + +
        +
        + +
        + +
        + +

        Strings that are used for WAI-ARIA labels and controls only (these are not +actually visible on the page, but will be read by screenreaders, and thus +must be internationalised as well).

        + +
        + +
        + + +
        + +

        Summary

        + +

        Properties - static

        + +
        +
        <static> sSortAscending :string

        ARIA label that is added to the table headers when the column may be +sorted ascending by activing the column (click or return when focused). +Note that the column header is prefixed to this string.

        <static> sSortDescending :string

        ARIA label that is added to the table headers when the column may be +sorted descending by activing the column (click or return when focused). +Note that the column header is prefixed to this string.

        +
        +
        + + + + +
        + +

        Details

        +

        Properties - static

        +
        +
        <static> sSortAscending :string

        ARIA label that is added to the table headers when the column may be +sorted ascending by activing the column (click or return when focused). +Note that the column header is prefixed to this string.

        + +
        +
        Example
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "oLanguage": {
        +         "oAria": {
        +           "sSortAscending": " - click/return to sort ascending"
        +         }
        +       }
        +     } );
        +   } );
        +
        +
        <static> sSortDescending :string

        ARIA label that is added to the table headers when the column may be +sorted descending by activing the column (click or return when focused). +Note that the column header is prefixed to this string.

        + +
        +
        Example
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "oLanguage": {
        +         "oAria": {
        +           "sSortDescending": " - click/return to sort descending"
        +         }
        +       }
        +     } );
        +   } );
        +
        +
        +
        +
        + +
        + + + + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/docs/DataTable.defaults.oLanguage.oPaginate.html b/docroot/sites/all/libraries/datatables/docs/DataTable.defaults.oLanguage.oPaginate.html new file mode 100644 index 00000000..d26c422a --- /dev/null +++ b/docroot/sites/all/libraries/datatables/docs/DataTable.defaults.oLanguage.oPaginate.html @@ -0,0 +1,164 @@ + + + + + Namespace: oPaginate - documentation + + + + + + + + + +
        + + +
        +

        Namespace: oPaginate

        +

        Ancestry: DataTable » .defaults » .oLanguage. » oPaginate

        +
        + DataTables v1.9.4 documentation +
        +
        + + + +
        +

        Navigation

        + +
        + + Hiding private elements + (toggle) + +
        +
        + + Showing extended elements + (toggle) + +
        +
        + +
        + +
        + +

        Pagination string used by DataTables for the two built-in pagination +control types ("two_button" and "full_numbers")

        + +
        + +
        + + +
        + +

        Summary

        + +

        Properties - static

        + +
        +
        <static> sFirst :string

        Text to use when using the 'full_numbers' type of pagination for the +button to take the user to the first page.

        <static> sLast :string

        Text to use when using the 'full_numbers' type of pagination for the +button to take the user to the last page.

        <static> sNext :string

        Text to use for the 'next' pagination button (to take the user to the +next page).

        <static> sPrevious :string

        Text to use for the 'previous' pagination button (to take the user to
        +the previous page).

        +
        +
        + + + + +
        + +

        Details

        +

        Properties - static

        +
        +
        <static> sFirst :string

        Text to use when using the 'full_numbers' type of pagination for the +button to take the user to the first page.

        + +
        +
        Example
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "oLanguage": {
        +         "oPaginate": {
        +           "sFirst": "First page"
        +         }
        +       }
        +     } );
        +   } );
        +
        +
        <static> sLast :string

        Text to use when using the 'full_numbers' type of pagination for the +button to take the user to the last page.

        + +
        +
        Example
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "oLanguage": {
        +         "oPaginate": {
        +           "sLast": "Last page"
        +         }
        +       }
        +     } );
        +   } );
        +
        +
        <static> sNext :string

        Text to use for the 'next' pagination button (to take the user to the +next page).

        + +
        +
        Example
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "oLanguage": {
        +         "oPaginate": {
        +           "sNext": "Next page"
        +         }
        +       }
        +     } );
        +   } );
        +
        +
        <static> sPrevious :string

        Text to use for the 'previous' pagination button (to take the user to
        +the previous page).

        + +
        +
        Example
        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "oLanguage": {
        +         "oPaginate": {
        +           "sPrevious": "Previous page"
        +         }
        +       }
        +     } );
        +   } );
        +
        +
        +
        +
        + +
        + + + + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/docs/DataTable.defaults.oSearch.html b/docroot/sites/all/libraries/datatables/docs/DataTable.defaults.oSearch.html new file mode 100644 index 00000000..6aaaccb8 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/docs/DataTable.defaults.oSearch.html @@ -0,0 +1,93 @@ + + + + + Namespace: oSearch - documentation + + + + + + + + + +
        + + +
        +

        Namespace: oSearch

        +

        Ancestry: DataTable » .defaults. » oSearch

        +
        + DataTables v1.9.4 documentation +
        +
        + + + +
        +

        Navigation

        +
          +
        • Overview
        • +
        • Summary
          Classes (0)Namespaces (0)
          Properties (0)Static properties (0)
          Methods (0)Static methods (0)
          Events (0)
        • Details
          Properties (0)Static properties (0)
          Methods (0)Static methods (0)
          Events (0)
        +
        + + Hiding private elements + (toggle) + +
        +
        + + Showing extended elements + (toggle) + +
        +
        + +
        + +
        + +

        This parameter allows you to have define the global filtering state at +initialisation time. As an object the "sSearch" parameter must be +defined, but all other parameters are optional. When "bRegex" is true, +the search string will be treated as a regular expression, when false +(default) it will be treated as a straight string. When "bSmart" +DataTables will use it's smart filtering methods (to word match at +any point in the data), when false this will not be done.

        + +
        +

        Example

        +
        +
           $(document).ready( function() {
        +     $('#example').dataTable( {
        +       "oSearch": {"sSearch": "Initial search"}
        +     } );
        +   } )
        +
        +

        Extends

        + + +
        + + + + + +
        + + + + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/docs/DataTable.ext.html b/docroot/sites/all/libraries/datatables/docs/DataTable.ext.html new file mode 100644 index 00000000..df67909b --- /dev/null +++ b/docroot/sites/all/libraries/datatables/docs/DataTable.ext.html @@ -0,0 +1,83 @@ + + + + + Namespace: ext - documentation + + + + + + + + + +
        + + +
        +

        Namespace: ext

        +

        Ancestry: DataTable. » ext

        +
        + DataTables v1.9.4 documentation +
        +
        + + + +
        +

        Navigation

        +
          +
        • Overview
        • +
        • Summary
          Classes (0)Namespaces (0)
          Properties (0)Static properties (0)
          Methods (0)Static methods (0)
          Events (0)
        • Details
          Properties (0)Static properties (0)
          Methods (0)Static methods (0)
          Events (0)
        +
        + + Hiding private elements + (toggle) + +
        +
        + + Showing extended elements + (toggle) + +
        +
        + +
        + +
        + +

        Extension object for DataTables that is used to provide all extension options.

        + +

        Note that the DataTable.ext object is available through +jQuery.fn.dataTable.ext where it may be accessed and manipulated. It is +also aliased to jQuery.fn.dataTableExt for historic reasons.

        + +
        +

        Extends

        + + +
        + + + + + +
        + + + + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/docs/DataTable.html b/docroot/sites/all/libraries/datatables/docs/DataTable.html new file mode 100644 index 00000000..48b9e81e --- /dev/null +++ b/docroot/sites/all/libraries/datatables/docs/DataTable.html @@ -0,0 +1,1371 @@ + + + + + Class: DataTable - documentation + + + + + + + + + +
        + + +
        +

        Class: DataTable

        + +
        + DataTables v1.9.4 documentation +
        +
        + + + +
        +

        Navigation

        + +
        + + Hiding private elements + (toggle) + +
        +
        + + Showing extended elements + (toggle) + +
        +
        + +
        + +
        + +
        new DataTable(oInit)

        DataTables is a plug-in for the jQuery Javascript library. It is a +highly flexible tool, based upon the foundations of progressive +enhancement, which will add advanced interaction controls to any +HTML table. For a full list of features please refer to +DataTables.net.

        + +

        Note that the DataTable object is not a global variable but is +aliased to jQuery.fn.DataTable and jQuery.fn.dataTable through which +it may be accessed.

        Constructor

        + +
        +
        Parameters:
        + + + + + + + + + + + + + + + + +
        NameTypeAttributesDefaultDescription
        1
        oInitobjectOptional{}

        Configuration object for DataTables. Options + are defined by DataTable.defaults

        Examples:
        +
        +
           // Basic initialisation
        +   $(document).ready( function {
        +     $('#example').dataTable();
        +   } );
        + 
        + 
        +
        + +
        +
           // Initialisation with configuration options - in this case, disable
        +   // pagination and sorting.
        +   $(document).ready( function {
        +     $('#example').dataTable( {
        +       "bPaginate": false,
        +       "bSort": false 
        +     } );
        +   } );
        +
        +
        +

        Requires

        +
          +
        • module:jQuery
        • +
        + +
        + + +
        + +

        Summary

        + +

        Namespaces

        +
        +
        defaults

        Initialisation options that can be given to DataTables at initialisation +time.

        ext

        Extension object for DataTables that is used to provide all extension options. [...]

        models

        Object models container, for the various models that DataTables has available +to it. These models define the objects that are used to hold the active state +and configuration of the table.

        oApi

        Reference to internal functions for use by plug-in developers. Note that these +methods are references to internal functions and are considered to be private. +If you use these methods, be aware that they are liable to change between versions +(check the upgrade notes).

        +

        Properties - static

        + +
        +
        <static> version :string

        Version string for plug-ins to check compatibility. Allowed format is +a.b.c.d.e where: a:int, b:int, c:int, d:string(dev|beta), e:int. d and +e are optional

        +

        Methods - instance

        + +
        +
        $(sSelector, oOpts) → {object}

        Perform a jQuery selector action on the table's TR elements (from the tbody) and +return the resulting jQuery object.

        _(sSelector, oOpts) → {array}

        Almost identical to $ in operation, but in this case returns the data for the matched +rows - as such, the jQuery selector used should match TR row nodes or TD/TH cell nodes +rather than any descendants, so the data can be obtained for the row/cell. If matching +rows are found, the data returned is the original data array/object that was used to
        +create the row (or a generated array if from a DOM source). [...]

        fnAddData(mData, bRedraw) → {array}

        Add a single new row or multiple rows of data to the table. Please note +that this is suitable for client-side processing only - if you are using +server-side processing (i.e. "bServerSide": true), then to add data, you +must add it to the data source, i.e. the server-side, through an Ajax call.

        fnAdjustColumnSizing(bRedraw)

        This function will make DataTables recalculate the column sizes, based on the data +contained in the table and the sizes applied to the columns (in the DOM, CSS or +through the sWidth parameter). This can be useful when the width of the table's +parent element changes (for example a window resize).

        fnClearTable(bRedraw)

        Quickly and simply clear a table

        fnClose(nTr) → {int}

        The exact opposite of 'opening' a row, this function will close any rows which +are currently 'open'.

        fnDeleteRow(mTarget, fnCallBack, bRedraw) → {array}

        Remove a row for the table

        fnDestroy(bRemove)

        Restore the table to it's original state in the DOM by removing all of DataTables +enhancements, alterations to the DOM structure of the table and event listeners.

        fnDraw(bComplete)

        Redraw the table

        fnFilter(sInput, iColumn, bRegex, bSmart, bShowGlobal, bCaseInsensitive)

        Filter the input based on data

        fnGetData(mRow, iCol) → {array|object|string}

        Get the data for the whole table, an individual row or an individual cell based on the +provided parameters.

        fnGetNodes(iRow) → {array|node}

        Get an array of the TR nodes that are used in the table's body. Note that you will +typically want to use the '$' API method in preference to this as it is more +flexible.

        fnGetPosition(nNode) → {int}

        Get the array indexes of a particular cell from it's DOM element +and column index including hidden columns

        fnIsOpen(nTr) → {boolean}

        Check to see if a row is 'open' or not.

        fnOpen(nTr, mHtml, sClass) → {node}

        This function will place a new row directly after a row which is currently +on display on the page, with the HTML contents that is passed into the +function. This can be used, for example, to ask for confirmation that a +particular record should be deleted.

        fnPageChange(mAction, bRedraw)

        Change the pagination - provides the internal logic for pagination in a simple API +function. With this function you can have a DataTables table go to the next, +previous, first or last pages.

        fnSetColumnVis(iCol, bShow, bRedraw)

        Show a particular column

        fnSettings() → {object}

        Get the settings for a particular table for external manipulation

        fnSort(iCol)

        Sort the table by a particular column

        fnSortListener(nNode, iColumn, fnCallback)

        Attach a sort listener to an element for a given column

        fnUpdate(mData, mRow, iColumn, bRedraw, bAction) → {int}

        Update a table cell or row - this method will accept either a single value to +update the cell with, an array of values with one element for each column or +an object in the same format as the original data source. The function is +self-referencing in order to make the multi column updates easier.

        fnVersionCheck(sVersion) → {boolean}

        Provide a common method for plug-ins to check the version of DataTables being used, in order +to ensure compatibility.

        +
        +

        Methods - static

        + +
        +
        <static> fnIsDataTable(nTable) → {boolean}

        Check if a TABLE node is a DataTable table already or not.

        <static> fnTables(bVisible) → {array}

        Get all DataTable tables that have been initialised - optionally you can select to +get only currently visible tables.

        <static> fnVersionCheck(sVersion) → {boolean}

        Provide a common method for plug-ins to check the version of DataTables being used, in order +to ensure compatibility.

        +
        +

        Events

        +
        +
        destroy

        Destroy event, fired when the DataTable is destroyed by calling fnDestroy or passing +the bDestroy:true parameter in the initialisation object. This can be used to remove +bound events, added DOM nodes, etc.

        draw

        Draw event, fired whenever the table is redrawn on the page, at the same point as +fnDrawCallback. This may be useful for binding events or performing calculations when +the table is altered at all.

        filter

        Filter event, fired when the filtering applied to the table (using the build in global +global filter, or column filters) is altered.

        init

        DataTables initialisation complete event, fired when the table is fully drawn, +including Ajax data loaded, if Ajax data is required.

        page

        Page change event, fired when the paging of the table is altered.

        processing

        Processing event, fired when DataTables is doing some kind of processing (be it, +sort, filter or anything else). Can be used to indicate to the end user that +there is something happening, or that something has finished.

        sort

        Sort event, fired when the sorting applied to the table is altered.

        stateLoaded

        State loaded event, fired when state has been loaded from stored data and the settings +object has been modified by the loaded data.

        stateLoadParams

        State load event, fired when the table is loading state from the stored data, but +prior to the settings object being modified by the saved state - allowing modification +of the saved state is required or loading of state for a plug-in.

        stateSaveParams

        State save event, fired when the table has changed state a new state save is required. +This method allows modification of the state saving object prior to actually doing the +save, including addition or other state properties (for plug-ins) or modification +of a DataTables core property.

        xhr

        Ajax (XHR) event, fired whenever an Ajax request is completed from a request to +made to the server for new data (note that this trigger is called in fnServerData, +if you override fnServerData and which to use this event, you need to trigger it in +you success function).

        +
+
+ + + + + +
+ +

Details

+

Properties - static

+
+
<static> version :string

Version string for plug-ins to check compatibility. Allowed format is +a.b.c.d.e where: a:int, b:int, c:int, d:string(dev|beta), e:int. d and +e are optional

+ +
+
+

Methods - instance

+
+
$(sSelector, oOpts) → {object}

Perform a jQuery selector action on the table's TR elements (from the tbody) and +return the resulting jQuery object.

+ +
+
Parameters:
+ + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
1
sSelectorstring | node | jQuery

jQuery selector or node collection to act on

2
oOptsobjectOptional

Optional parameters for modifying the rows to be included

oOpts.filterstring<optional>
none

Select TR elements that meet the current filter + criterion ("applied") or all TR elements (i.e. no filter).

oOpts.orderstring<optional>
current

Order of the TR elements in the processed array. + Can be either 'current', whereby the current sorting of the table is used, or + 'original' whereby the original order the data was read into the table is used.

oOpts.pagestring<optional>
all

Limit the selection to the currently displayed page + ("current") or not ("all"). If 'current' is given, then order is assumed to be + 'current' and filter is 'applied', regardless of what they might be given as.

Returns:

jQuery object, filtered by the given selector.

Examples:
+
+
   $(document).ready(function() {
+     var oTable = $('#example').dataTable();
+
+     // Highlight every second row
+     oTable.$('tr:odd').css('backgroundColor', 'blue');
+   } );
+
+ 
+
+ +
+
   $(document).ready(function() {
+     var oTable = $('#example').dataTable();
+
+     // Filter to rows with 'Webkit' in them, add a background colour and then
+     // remove the filter, thus highlighting the 'Webkit' rows only.
+     oTable.fnFilter('Webkit');
+     oTable.$('tr', {"filter": "applied"}).css('backgroundColor', 'blue');
+     oTable.fnFilter('');
+   } );
+
+
+
_(sSelector, oOpts) → {array}

Almost identical to $ in operation, but in this case returns the data for the matched +rows - as such, the jQuery selector used should match TR row nodes or TD/TH cell nodes +rather than any descendants, so the data can be obtained for the row/cell. If matching +rows are found, the data returned is the original data array/object that was used to
+create the row (or a generated array if from a DOM source).

+ +

This method is often useful in-combination with $ where both functions are given the +same parameters and the array indexes will match identically.

+ +
+
Parameters:
+ + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
1
sSelectorstring | node | jQuery

jQuery selector or node collection to act on

2
oOptsobjectOptional

Optional parameters for modifying the rows to be included

oOpts.filterstring<optional>
none

Select elements that meet the current filter + criterion ("applied") or all elements (i.e. no filter).

oOpts.orderstring<optional>
current

Order of the data in the processed array. + Can be either 'current', whereby the current sorting of the table is used, or + 'original' whereby the original order the data was read into the table is used.

oOpts.pagestring<optional>
all

Limit the selection to the currently displayed page + ("current") or not ("all"). If 'current' is given, then order is assumed to be + 'current' and filter is 'applied', regardless of what they might be given as.

Returns:

Data for the matched elements. If any elements, as a result of the + selector, were not TR, TD or TH elements in the DataTable, they will have a null + entry in the array.

Examples:
+
+
   $(document).ready(function() {
+     var oTable = $('#example').dataTable();
+
+     // Get the data from the first row in the table
+     var data = oTable._('tr:first');
+
+     // Do something useful with the data
+     alert( "First cell is: "+data[0] );
+   } );
+
+ 
+
+ +
+
   $(document).ready(function() {
+     var oTable = $('#example').dataTable();
+
+     // Filter to 'Webkit' and get all data for 
+     oTable.fnFilter('Webkit');
+     var data = oTable._('tr', {"filter": "applied"});
+     
+     // Do something with the data
+     alert( data.length+" rows matched the filter" );
+   } );
+
+
+
fnAddData(mData, bRedraw) → {array}

Add a single new row or multiple rows of data to the table. Please note +that this is suitable for client-side processing only - if you are using +server-side processing (i.e. "bServerSide": true), then to add data, you +must add it to the data source, i.e. the server-side, through an Ajax call.

+ +
+
Parameters:
+ + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
1
mDataarray | object

The data to be added to the table. This can be: +

    +
  • 1D array of data - add a single row with the data provided
  • +
  • 2D array of arrays - add multiple rows in a single call
  • +
  • object - data object when using mData
  • +
  • array of objects - multiple data objects when using mData
  • +

2
bRedrawboolOptionaltrue

redraw the table or not

Returns:

An array of integers, representing the list of indexes in + aoData (DataTable.models.oSettings) that have been added to + the table.

Example:
+
+
   // Global var for counter
+   var giCount = 2;
+   
+   $(document).ready(function() {
+     $('#example').dataTable();
+   } );
+   
+   function fnClickAddRow() {
+     $('#example').dataTable().fnAddData( [
+       giCount+".1",
+       giCount+".2",
+       giCount+".3",
+       giCount+".4" ]
+     );
+       
+     giCount++;
+   }
+
+
+
fnAdjustColumnSizing(bRedraw)

This function will make DataTables recalculate the column sizes, based on the data +contained in the table and the sizes applied to the columns (in the DOM, CSS or +through the sWidth parameter). This can be useful when the width of the table's +parent element changes (for example a window resize).

+ +
+
Parameters:
+ + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
1
bRedrawbooleanOptionaltrue

Redraw the table or not, you will typically want to

Example:
+
+
   $(document).ready(function() {
+     var oTable = $('#example').dataTable( {
+       "sScrollY": "200px",
+       "bPaginate": false
+     } );
+     
+     $(window).bind('resize', function () {
+       oTable.fnAdjustColumnSizing();
+     } );
+   } );
+
+
+
fnClearTable(bRedraw)

Quickly and simply clear a table

+ +
+
Parameters:
+ + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
1
bRedrawboolOptionaltrue

redraw the table or not

Example:
+
+
   $(document).ready(function() {
+     var oTable = $('#example').dataTable();
+     
+     // Immediately 'nuke' the current rows (perhaps waiting for an Ajax callback...)
+     oTable.fnClearTable();
+   } );
+
+
+
fnClose(nTr) → {int}

The exact opposite of 'opening' a row, this function will close any rows which +are currently 'open'.

+ +
+
Parameters:
+ + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
1
nTrnode

the table row to 'close'

Returns:

0 on success, or 1 if failed (can't find the row)

Example:
+
+
   $(document).ready(function() {
+     var oTable;
+     
+     // 'open' an information row when a row is clicked on
+     $('#example tbody tr').click( function () {
+       if ( oTable.fnIsOpen(this) ) {
+         oTable.fnClose( this );
+       } else {
+         oTable.fnOpen( this, "Temporary row opened", "info_row" );
+       }
+     } );
+     
+     oTable = $('#example').dataTable();
+   } );
+
+
+
fnDeleteRow(mTarget, fnCallBack, bRedraw) → {array}

Remove a row for the table

+ +
+
Parameters:
+ + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
1
mTargetmixed

The index of the row from aoData to be deleted, or + the TR element you want to delete

2
fnCallBackfunction | nullOptional

Callback function

3
bRedrawboolOptionaltrue

Redraw the table or not

Returns:

The row that was deleted

Example:
+
+
   $(document).ready(function() {
+     var oTable = $('#example').dataTable();
+     
+     // Immediately remove the first row
+     oTable.fnDeleteRow( 0 );
+   } );
+
+
+
fnDestroy(bRemove)

Restore the table to it's original state in the DOM by removing all of DataTables +enhancements, alterations to the DOM structure of the table and event listeners.

+ +
+
Parameters:
+ + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
1
bRemovebooleanOptionalfalse

Completely remove the table from the DOM

Example:
+
+
   $(document).ready(function() {
+     // This example is fairly pointless in reality, but shows how fnDestroy can be used
+     var oTable = $('#example').dataTable();
+     oTable.fnDestroy();
+   } );
+
+
+
fnDraw(bComplete)

Redraw the table

+ +
+
Parameters:
+ + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
1
bCompleteboolOptionaltrue

Re-filter and resort (if enabled) the table before the draw.

Example:
+
+
   $(document).ready(function() {
+     var oTable = $('#example').dataTable();
+     
+     // Re-draw the table - you wouldn't want to do it here, but it's an example :-)
+     oTable.fnDraw();
+   } );
+
+
+
fnFilter(sInput, iColumn, bRegex, bSmart, bShowGlobal, bCaseInsensitive)

Filter the input based on data

+ +
+
Parameters:
+ + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
1
sInputstring

String to filter the table on

2
iColumnint | nullOptional

Column to limit filtering to

3
bRegexboolOptionalfalse

Treat as regular expression or not

4
bSmartboolOptionaltrue

Perform smart filtering or not

5
bShowGlobalboolOptionaltrue

Show the input global filter in it's input box(es)

6
bCaseInsensitiveboolOptionaltrue

Do case-insensitive matching (true) or not (false)

Example:
+
+
   $(document).ready(function() {
+     var oTable = $('#example').dataTable();
+     
+     // Sometime later - filter...
+     oTable.fnFilter( 'test string' );
+   } );
+
+
+
fnGetData(mRow, iCol) → {array|object|string}

Get the data for the whole table, an individual row or an individual cell based on the +provided parameters.

+ +
+
Parameters:
+ + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
1
mRowint | nodeOptional

A TR row node, TD/TH cell node or an integer. If given as + a TR node then the data source for the whole row will be returned. If given as a + TD/TH cell node then iCol will be automatically calculated and the data for the + cell returned. If given as an integer, then this is treated as the aoData internal + data index for the row (see fnGetPosition) and the data for that row used.

2
iColintOptional

Optional column index that you want the data of.

Returns:

If mRow is undefined, then the data for all rows is + returned. If mRow is defined, just data for that row, and is iCol is + defined, only data for the designated cell is returned.

Examples:
+
+
   // Row data
+   $(document).ready(function() {
+     oTable = $('#example').dataTable();
+
+     oTable.$('tr').click( function () {
+       var data = oTable.fnGetData( this );
+       // ... do something with the array / object of data for the row
+     } );
+   } );
+
+ 
+
+ +
+
   // Individual cell data
+   $(document).ready(function() {
+     oTable = $('#example').dataTable();
+
+     oTable.$('td').click( function () {
+       var sData = oTable.fnGetData( this );
+       alert( 'The cell clicked on had the value of '+sData );
+     } );
+   } );
+
+
+
fnGetNodes(iRow) → {array|node}

Get an array of the TR nodes that are used in the table's body. Note that you will +typically want to use the '$' API method in preference to this as it is more +flexible.

+ +
+
Parameters:
+ + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
1
iRowintOptional

Optional row index for the TR element you want

Returns:

If iRow is undefined, returns an array of all TR elements + in the table's body, or iRow is defined, just the TR element requested.

Example:
+
+
   $(document).ready(function() {
+     var oTable = $('#example').dataTable();
+     
+     // Get the nodes from the table
+     var nNodes = oTable.fnGetNodes( );
+   } );
+
+
+
fnGetPosition(nNode) → {int}

Get the array indexes of a particular cell from it's DOM element +and column index including hidden columns

+ +
+
Parameters:
+ + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
1
nNodenode

this can either be a TR, TD or TH in the table's body

Returns:

If nNode is given as a TR, then a single index is returned, or + if given as a cell, an array of [row index, column index (visible), + column index (all)] is given.

Example:
+
+
   $(document).ready(function() {
+     $('#example tbody td').click( function () {
+       // Get the position of the current data from the node
+       var aPos = oTable.fnGetPosition( this );
+       
+       // Get the data array for this row
+       var aData = oTable.fnGetData( aPos[0] );
+       
+       // Update the data array and return the value
+       aData[ aPos[1] ] = 'clicked';
+       this.innerHTML = 'clicked';
+     } );
+     
+     // Init DataTables
+     oTable = $('#example').dataTable();
+   } );
+
+
+
fnIsOpen(nTr) → {boolean}

Check to see if a row is 'open' or not.

+ +
+
Parameters:
+ + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
1
nTrnode

the table row to check

Returns:

true if the row is currently open, false otherwise

Example:
+
+
   $(document).ready(function() {
+     var oTable;
+     
+     // 'open' an information row when a row is clicked on
+     $('#example tbody tr').click( function () {
+       if ( oTable.fnIsOpen(this) ) {
+         oTable.fnClose( this );
+       } else {
+         oTable.fnOpen( this, "Temporary row opened", "info_row" );
+       }
+     } );
+     
+     oTable = $('#example').dataTable();
+   } );
+
+
+
fnOpen(nTr, mHtml, sClass) → {node}

This function will place a new row directly after a row which is currently +on display on the page, with the HTML contents that is passed into the +function. This can be used, for example, to ask for confirmation that a +particular record should be deleted.

+ +
+
Parameters:
+ + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
1
nTrnode

The table row to 'open'

2
mHtmlstring | node | jQuery

The HTML to put into the row

3
sClassstring

Class to give the new TD cell

Returns:

The row opened. Note that if the table row passed in as the + first parameter, is not found in the table, this method will silently + return.

Example:
+
+
   $(document).ready(function() {
+     var oTable;
+     
+     // 'open' an information row when a row is clicked on
+     $('#example tbody tr').click( function () {
+       if ( oTable.fnIsOpen(this) ) {
+         oTable.fnClose( this );
+       } else {
+         oTable.fnOpen( this, "Temporary row opened", "info_row" );
+       }
+     } );
+     
+     oTable = $('#example').dataTable();
+   } );
+
+
+
fnPageChange(mAction, bRedraw)

Change the pagination - provides the internal logic for pagination in a simple API +function. With this function you can have a DataTables table go to the next, +previous, first or last pages.

+ +
+
Parameters:
+ + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
1
mActionstring | int

Paging action to take: "first", "previous", "next" or "last" + or page number to jump to (integer), note that page 0 is the first page.

2
bRedrawboolOptionaltrue

Redraw the table or not

Example:
+
+
   $(document).ready(function() {
+     var oTable = $('#example').dataTable();
+     oTable.fnPageChange( 'next' );
+   } );
+
+
+
fnSetColumnVis(iCol, bShow, bRedraw)

Show a particular column

+ +
+
Parameters:
+ + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
1
iColint

The column whose display should be changed

2
bShowbool

Show (true) or hide (false) the column

3
bRedrawboolOptionaltrue

Redraw the table or not

Example:
+
+
   $(document).ready(function() {
+     var oTable = $('#example').dataTable();
+     
+     // Hide the second column after initialisation
+     oTable.fnSetColumnVis( 1, false );
+   } );
+
+
+
fnSettings() → {object}

Get the settings for a particular table for external manipulation

+ +
+
Returns:

DataTables settings object. See + DataTable.models.oSettings

Example:
+
+
   $(document).ready(function() {
+     var oTable = $('#example').dataTable();
+     var oSettings = oTable.fnSettings();
+     
+     // Show an example parameter from the settings
+     alert( oSettings._iDisplayStart );
+   } );
+
+
+
fnSort(iCol)

Sort the table by a particular column

+ +
+
Parameters:
+ + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
1
iColint

the data index to sort on. Note that this will not match the + 'display index' if you have hidden data entries

Example:
+
+
   $(document).ready(function() {
+     var oTable = $('#example').dataTable();
+     
+     // Sort immediately with columns 0 and 1
+     oTable.fnSort( [ [0,'asc'], [1,'asc'] ] );
+   } );
+
+
+
fnSortListener(nNode, iColumn, fnCallback)

Attach a sort listener to an element for a given column

+ +
+
Parameters:
+ + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
1
nNodenode

the element to attach the sort listener to

2
iColumnint

the column that a click on this node will sort on

3
fnCallbackfunctionOptional

callback function when sort is run

Example:
+
+
   $(document).ready(function() {
+     var oTable = $('#example').dataTable();
+     
+     // Sort on column 1, when 'sorter' is clicked on
+     oTable.fnSortListener( document.getElementById('sorter'), 1 );
+   } );
+
+
+
fnUpdate(mData, mRow, iColumn, bRedraw, bAction) → {int}

Update a table cell or row - this method will accept either a single value to +update the cell with, an array of values with one element for each column or +an object in the same format as the original data source. The function is +self-referencing in order to make the multi column updates easier.

+ +
+
Parameters:
+ + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
1
mDataobject | array | string

Data to update the cell/row with

2
mRownode | int

TR element you want to update or the aoData index

3
iColumnintOptional

The column to update (not used of mData is an array or object)

4
bRedrawboolOptionaltrue

Redraw the table or not

5
bActionboolOptionaltrue

Perform pre-draw actions or not

Returns:

0 on success, 1 on error

Example:
+
+
   $(document).ready(function() {
+     var oTable = $('#example').dataTable();
+     oTable.fnUpdate( 'Example update', 0, 0 ); // Single cell
+     oTable.fnUpdate( ['a', 'b', 'c', 'd', 'e'], 1, 0 ); // Row
+   } );
+
+
+
fnVersionCheck(sVersion) → {boolean}

Provide a common method for plug-ins to check the version of DataTables being used, in order +to ensure compatibility.

+ +
+
Parameters:
+ + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
1
sVersionstring

Version string to check for, in the format "X.Y.Z". Note that the + formats "X" and "X.Y" are also acceptable.

Returns:

true if this version of DataTables is greater or equal to the required + version, or false if this version of DataTales is not suitable

Example:
+
+
   $(document).ready(function() {
+     var oTable = $('#example').dataTable();
+     alert( oTable.fnVersionCheck( '1.9.0' ) );
+   } );
+
+
+ +
+

Methods - static

+
+
<static> fnIsDataTable(nTable) → {boolean}

Check if a TABLE node is a DataTable table already or not.

+ +
+
Parameters:
+ + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
1
nTablenode

The TABLE node to check if it is a DataTable or not (note that other + node types can be passed in, but will always return false).

Returns:

true the table given is a DataTable, or false otherwise

Example:
+
+
   var ex = document.getElementById('example');
+   if ( ! $.fn.DataTable.fnIsDataTable( ex ) ) {
+     $(ex).dataTable();
+   }
+
+
+
<static> fnTables(bVisible) → {array}

Get all DataTable tables that have been initialised - optionally you can select to +get only currently visible tables.

+ +
+
Parameters:
+ + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
1
bVisiblebooleanOptionalfalse

Flag to indicate if you want all (default) or + visible tables only.

Returns:

Array of TABLE nodes (not DataTable instances) which are DataTables

Example:
+
+
   var table = $.fn.dataTable.fnTables(true);
+   if ( table.length > 0 ) {
+     $(table).dataTable().fnAdjustColumnSizing();
+   }
+
+
+
<static> fnVersionCheck(sVersion) → {boolean}

Provide a common method for plug-ins to check the version of DataTables being used, in order +to ensure compatibility.

+ +
+
Parameters:
+ + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
1
sVersionstring

Version string to check for, in the format "X.Y.Z". Note that the + formats "X" and "X.Y" are also acceptable.

Returns:

true if this version of DataTables is greater or equal to the required + version, or false if this version of DataTales is not suitable

Example:
+
+
   alert( $.fn.dataTable.fnVersionCheck( '1.9.0' ) );
+
+
+ +
+

Events

+
+
destroy

Destroy event, fired when the DataTable is destroyed by calling fnDestroy or passing +the bDestroy:true parameter in the initialisation object. This can be used to remove +bound events, added DOM nodes, etc.

+ +
+
Parameters:
+ + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
1
eevent

jQuery event object

2
oobject

DataTables settings object DataTable.models.oSettings

+
draw

Draw event, fired whenever the table is redrawn on the page, at the same point as +fnDrawCallback. This may be useful for binding events or performing calculations when +the table is altered at all.

+ +
+
Parameters:
+ + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
1
eevent

jQuery event object

2
oobject

DataTables settings object DataTable.models.oSettings

+
filter

Filter event, fired when the filtering applied to the table (using the build in global +global filter, or column filters) is altered.

+ +
+
Parameters:
+ + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
1
eevent

jQuery event object

2
oobject

DataTables settings object DataTable.models.oSettings

+
init

DataTables initialisation complete event, fired when the table is fully drawn, +including Ajax data loaded, if Ajax data is required.

+ +
+
Parameters:
+ + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
1
eevent

jQuery event object

2
oSettingsobject

DataTables settings object

3
jsonobject

The JSON object request from the server - only + present if client-side Ajax sourced data is used

+
page

Page change event, fired when the paging of the table is altered.

+ +
+
Parameters:
+ + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
1
eevent

jQuery event object

2
oobject

DataTables settings object DataTable.models.oSettings

+
processing

Processing event, fired when DataTables is doing some kind of processing (be it, +sort, filter or anything else). Can be used to indicate to the end user that +there is something happening, or that something has finished.

+ +
+
Parameters:
+ + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
1
eevent

jQuery event object

2
oSettingsobject

DataTables settings object

3
bShowboolean

Flag for if DataTables is doing processing or not

+
sort

Sort event, fired when the sorting applied to the table is altered.

+ +
+
Parameters:
+ + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
1
eevent

jQuery event object

2
oobject

DataTables settings object DataTable.models.oSettings

+
stateLoaded

State loaded event, fired when state has been loaded from stored data and the settings +object has been modified by the loaded data.

+ +
+
Parameters:
+ + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
1
eevent

jQuery event object

2
oSettingsobject

DataTables settings object

3
jsonobject

The saved state information

+
stateLoadParams

State load event, fired when the table is loading state from the stored data, but +prior to the settings object being modified by the saved state - allowing modification +of the saved state is required or loading of state for a plug-in.

+ +
+
Parameters:
+ + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
1
eevent

jQuery event object

2
oSettingsobject

DataTables settings object

3
jsonobject

The saved state information

+
stateSaveParams

State save event, fired when the table has changed state a new state save is required. +This method allows modification of the state saving object prior to actually doing the +save, including addition or other state properties (for plug-ins) or modification +of a DataTables core property.

+ +
+
Parameters:
+ + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
1
eevent

jQuery event object

2
oSettingsobject

DataTables settings object

3
jsonobject

The state information to be saved

+
xhr

Ajax (XHR) event, fired whenever an Ajax request is completed from a request to +made to the server for new data (note that this trigger is called in fnServerData, +if you override fnServerData and which to use this event, you need to trigger it in +you success function).

+ +
+
Parameters:
+ + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
1
eevent

jQuery event object

2
oobject

DataTables settings object DataTable.models.oSettings

3
jsonobject

JSON returned from the server

+ +
+
+
+ + + + + + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/docs/DataTable.models.ext.html b/docroot/sites/all/libraries/datatables/docs/DataTable.models.ext.html new file mode 100644 index 00000000..0a0e0124 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/docs/DataTable.models.ext.html @@ -0,0 +1,754 @@ + + + + + Namespace: ext - documentation + + + + + + + + + +
+ + +
+

Namespace: ext

+

Ancestry: DataTable » .models. » ext

+
+ DataTables v1.9.4 documentation +
+
+ + + +
+

Navigation

+ +
+ + Hiding private elements + (toggle) + +
+
+ + Showing extended elements + (toggle) + +
+
+ +
+ +
+ +

DataTables extension options and plug-ins. This namespace acts as a collection "area" +for plug-ins that can be used to extend the default DataTables behaviour - indeed many +of the build in methods use this method to provide their own capabilities (sorting methods +for example).

+ +

Note that this namespace is aliased to jQuery.fn.dataTableExt so it can be readily accessed +and modified by plug-ins.

+ +
+ +
+ + +
+ +

Summary

+ +

Properties - static

+ +
+
<static> afnFiltering :array

Plug-in filtering functions - this method of filtering is complimentary to the default +type based filtering, and a lot more comprehensive as it allows you complete control +over the filtering logic. Each element in this array is a function (parameters +described below) that is called for every row in the table, and your logic decides if +it should be included in the filtered data set or not. +

    +
  • + Function input parameters: +
      +
    • {object} DataTables settings object: see DataTable.models.oSettings.
    • +
    • {array|object} Data for the row to be processed (same as the original format + that was passed in as the data source, or an array from a DOM data source
    • +
    • {int} Row index in aoData (DataTable.models.oSettings.aoData), which can + be useful to retrieve the TR element if you need DOM interaction.
    • +
    +
  • +
  • + Function return: +
      +
    • {boolean} Include the row in the filtered result set (true) or not (false)
    • +
    + +

<static> afnSortData :array

Plug-in sorting functions - this method of sorting is complimentary to the default type +based sorting that DataTables does automatically, allowing much greater control over the +the data that is being used to sort a column. This is useful if you want to do sorting +based on live data (for example the contents of an 'input' element) rather than just the +static string that DataTables knows of. The way these plug-ins work is that you create +an array of the values you wish to be sorted for the column in question and then return +that array. Which pre-sorting function is run here depends on the sSortDataType parameter +that is used for the column (if any). This is the corollary of ofnSearch for sort +data. +

    +
  • + Function input parameters: + +
  • +
  • + Function return: +
      +
    • {array} Data for the column to be sorted upon
    • +
    + +
[...]

<static> aoFeatures :array

Feature plug-ins - This is an array of objects which describe the feature plug-ins that are +available to DataTables. These feature plug-ins are accessible through the sDom initialisation +option. As such, each feature plug-in must describe a function that is used to initialise +itself (fnInit), a character so the feature can be enabled by sDom (cFeature) and the name +of the feature (sFeature). Thus the objects attached to this method must provide: +

    +
  • {function} fnInit Initialisation of the plug-in +
      +
    • + Function input parameters: + +
    • +
    • + Function return: +
        +
      • {node|null} The element which contains your feature. Note that the return + may also be void if your plug-in does not require to inject any DOM elements + into DataTables control (sDom) - for example this might be useful when + developing a plug-in which allows table control via keyboard entry.
      • +
      + +
    +
  • +
  • {character} cFeature Character that will be matched in sDom - case sensitive
  • +
  • {string} sFeature Feature name
  • +

<static> aTypes :array

Type detection plug-in functions - DataTables utilises types to define how sorting and +filtering behave, and types can be either be defined by the developer (sType for the +column) or they can be automatically detected by the methods in this array. The functions +defined in the array are quite simple, taking a single parameter (the data to analyse) +and returning the type if it is a known type, or null otherwise. +

    +
  • + Function input parameters: +
      +
    • {*} Data from the column cell to be analysed
    • +
    +
  • +
  • + Function return: +
      +
    • {string|null} Data type detected, or null if unknown (and thus pass it + on to the other type detection functions.
    • +
    + +

<static> fnVersionCheck :function

Provide a common method for plug-ins to check the version of DataTables being used, +in order to ensure compatibility.

<static> iApiIndex :int

Index for what 'this' index API functions should use

<static> oApi :object

Container for all private functions in DataTables so they can be exposed externally

<static> ofnSearch :object

Pre-processing of filtering data plug-ins - When you assign the sType for a column +(or have it automatically detected for you by DataTables or a type detection plug-in), +you will typically be using this for custom sorting, but it can also be used to provide +custom filtering by allowing you to pre-processing the data and returning the data in +the format that should be filtered upon. This is done by adding functions this object +with a parameter name which matches the sType for that target column. This is the +corollary of afnSortData for filtering data. +

    +
  • + Function input parameters: +
      +
    • {*} Data from the column cell to be prepared for filtering
    • +
    +
  • +
  • + Function return: +
      +
    • {string|null} Formatted string that will be used for the filtering.
    • +
    + +
[...]

<static> oJUIClasses :object

Storage for the various classes that DataTables uses - jQuery UI suitable

<static> oPagination :object

Pagination plug-in methods - The style and controls of the pagination can significantly +impact on how the end user interacts with the data in your table, and DataTables allows +the addition of pagination controls by extending this object, which can then be enabled +through the sPaginationType initialisation parameter. Each pagination type that +is added is an object (the property name of which is what sPaginationType refers +to) that has two properties, both methods that are used by DataTables to update the +control's state. +

    +
  • + fnInit - Initialisation of the paging controls. Called only during initialisation + of the table. It is expected that this function will add the required DOM elements + to the page for the paging controls to work. The element pointer + 'oSettings.aanFeatures.p' array is provided by DataTables to contain the paging + controls (note that this is a 2D array to allow for multiple instances of each + DataTables DOM element). It is suggested that you add the controls to this element + as children +
      +
    • + Function input parameters: +
        +
      • {object} DataTables settings object: see DataTable.models.oSettings.
      • +
      • {node} Container into which the pagination controls must be inserted
      • +
      • {function} Draw callback function - whenever the controls cause a page + change, this method must be called to redraw the table.
      • +
      +
    • +
    • + Function return: +
        +
      • No return required
      • +
      + +
    + +
  • + fnInit - This function is called whenever the paging status of the table changes and is + typically used to update classes and/or text of the paging controls to reflex the new + status. +
      +
    • + Function input parameters: +
        +
      • {object} DataTables settings object: see DataTable.models.oSettings.
      • +
      • {function} Draw callback function - in case you need to redraw the table again + or attach new event listeners
      • +
      +
    • +
    • + Function return: +
        +
      • No return required
      • +
      + +
    + +

<static> oSort :object

Sorting plug-in methods - Sorting in DataTables is based on the detected type of the +data column (you can add your own type detection functions, or override automatic +detection using sType). With this specific type given to the column, DataTables will +apply the required sort from the functions in the object. Each sort type must provide +two mandatory methods, one each for ascending and descending sorting, and can optionally +provide a pre-formatting method that will help speed up sorting by allowing DataTables +to pre-format the sort data only once (rather than every time the actual sort functions +are run). The two sorting functions are typical Javascript sort methods: +

    +
  • + Function input parameters: +
      +
    • {} Data to compare to the second parameter
    • +
    • {} Data to compare to the first parameter
    • +
    +
  • +
  • + Function return: +
      +
    • {int} Sorting match: <0 if first parameter should be sorted lower than + the second parameter, ===0 if the two parameters are equal and >0 if + the first parameter should be sorted height than the second parameter.
    • +
    + +

<static> oStdClasses :object

Storage for the various classes that DataTables uses

<static> sErrMode :string

How should DataTables report an error. Can take the value 'alert' or 'throw'

<static> sVersion :string

Version string for plug-ins to check compatibility. Allowed format is +a.b.c.d.e where: a:int, b:int, c:int, d:string(dev|beta), e:int. d and +e are optional

+
+
+ + + + +
+ +

Details

+

Properties - static

+
+
<static> afnFiltering :array

Plug-in filtering functions - this method of filtering is complimentary to the default +type based filtering, and a lot more comprehensive as it allows you complete control +over the filtering logic. Each element in this array is a function (parameters +described below) that is called for every row in the table, and your logic decides if +it should be included in the filtered data set or not. +

    +
  • + Function input parameters: +
      +
    • {object} DataTables settings object: see DataTable.models.oSettings.
    • +
    • {array|object} Data for the row to be processed (same as the original format + that was passed in as the data source, or an array from a DOM data source
    • +
    • {int} Row index in aoData (DataTable.models.oSettings.aoData), which can + be useful to retrieve the TR element if you need DOM interaction.
    • +
    +
  • +
  • + Function return: +
      +
    • {boolean} Include the row in the filtered result set (true) or not (false)
    • +
    + +

+ +
+
Example
+
+
   // The following example shows custom filtering being applied to the fourth column (i.e.
+   // the aData[3] index) based on two input values from the end-user, matching the data in 
+   // a certain range.
+   $.fn.dataTableExt.afnFiltering.push(
+     function( oSettings, aData, iDataIndex ) {
+       var iMin = document.getElementById('min').value * 1;
+       var iMax = document.getElementById('max').value * 1;
+       var iVersion = aData[3] == "-" ? 0 : aData[3]*1;
+       if ( iMin == "" && iMax == "" ) {
+         return true;
+       }
+       else if ( iMin == "" && iVersion < iMax ) {
+         return true;
+       }
+       else if ( iMin < iVersion && "" == iMax ) {
+         return true;
+       }
+       else if ( iMin < iVersion && iVersion < iMax ) {
+         return true;
+       }
+       return false;
+     }
+   );
+
+
<static> afnSortData :array

Plug-in sorting functions - this method of sorting is complimentary to the default type +based sorting that DataTables does automatically, allowing much greater control over the +the data that is being used to sort a column. This is useful if you want to do sorting +based on live data (for example the contents of an 'input' element) rather than just the +static string that DataTables knows of. The way these plug-ins work is that you create +an array of the values you wish to be sorted for the column in question and then return +that array. Which pre-sorting function is run here depends on the sSortDataType parameter +that is used for the column (if any). This is the corollary of ofnSearch for sort +data. +

    +
  • + Function input parameters: + +
  • +
  • + Function return: +
      +
    • {array} Data for the column to be sorted upon
    • +
    + +

+ +

Note that as of v1.9, it is typically preferable to use mData to prepare data for +the different uses that DataTables can put the data to. Specifically mData when +used as a function will give you a 'type' (sorting, filtering etc) that you can use to +prepare the data as required for the different types. As such, this method is deprecated.

+
Deprecated
Yes
+
+
Example
+
+
   // Updating the cached sorting information with user entered values in HTML input elements
+   jQuery.fn.dataTableExt.afnSortData['dom-text'] = function ( oSettings, iColumn )
+   {
+     var aData = [];
+     $( 'td:eq('+iColumn+') input', oSettings.oApi._fnGetTrNodes(oSettings) ).each( function () {
+       aData.push( this.value );
+     } );
+     return aData;
+   }
+
+
<static> aoFeatures :array

Feature plug-ins - This is an array of objects which describe the feature plug-ins that are +available to DataTables. These feature plug-ins are accessible through the sDom initialisation +option. As such, each feature plug-in must describe a function that is used to initialise +itself (fnInit), a character so the feature can be enabled by sDom (cFeature) and the name +of the feature (sFeature). Thus the objects attached to this method must provide: +

    +
  • {function} fnInit Initialisation of the plug-in +
      +
    • + Function input parameters: + +
    • +
    • + Function return: +
        +
      • {node|null} The element which contains your feature. Note that the return + may also be void if your plug-in does not require to inject any DOM elements + into DataTables control (sDom) - for example this might be useful when + developing a plug-in which allows table control via keyboard entry.
      • +
      + +
    +
  • +
  • {character} cFeature Character that will be matched in sDom - case sensitive
  • +
  • {string} sFeature Feature name
  • +

+ +
+
Example
+
+
   // How TableTools initialises itself.
+   $.fn.dataTableExt.aoFeatures.push( {
+     "fnInit": function( oSettings ) {
+       return new TableTools( { "oDTSettings": oSettings } );
+     },
+     "cFeature": "T",
+     "sFeature": "TableTools"
+   } );
+
+
<static> aTypes :array

Type detection plug-in functions - DataTables utilises types to define how sorting and +filtering behave, and types can be either be defined by the developer (sType for the +column) or they can be automatically detected by the methods in this array. The functions +defined in the array are quite simple, taking a single parameter (the data to analyse) +and returning the type if it is a known type, or null otherwise. +

    +
  • + Function input parameters: +
      +
    • {*} Data from the column cell to be analysed
    • +
    +
  • +
  • + Function return: +
      +
    • {string|null} Data type detected, or null if unknown (and thus pass it + on to the other type detection functions.
    • +
    + +

+ +
+
Example
+
+
   // Currency type detection plug-in:
+   jQuery.fn.dataTableExt.aTypes.push(
+     function ( sData ) {
+       var sValidChars = "0123456789.-";
+       var Char;
+       
+       // Check the numeric part
+       for ( i=1 ; i
+    
+
<static> fnVersionCheck :function

Provide a common method for plug-ins to check the version of DataTables being used, +in order to ensure compatibility.

+ +
+
Parameters:
+ + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
1
sVersionstring

Version string to check for, in the format "X.Y.Z". Note + that the formats "X" and "X.Y" are also acceptable.

Returns:

true if this version of DataTables is greater or equal to the + required version, or false if this version of DataTales is not suitable

Example:
+
+
   $(document).ready(function() {
+     var oTable = $('#example').dataTable();
+     alert( oTable.fnVersionCheck( '1.9.0' ) );
+   } );
+
+
+
<static> iApiIndex :int

Index for what 'this' index API functions should use

+ +
+
<static> oApi :object

Container for all private functions in DataTables so they can be exposed externally

+ +
+
<static> ofnSearch :object

Pre-processing of filtering data plug-ins - When you assign the sType for a column +(or have it automatically detected for you by DataTables or a type detection plug-in), +you will typically be using this for custom sorting, but it can also be used to provide +custom filtering by allowing you to pre-processing the data and returning the data in +the format that should be filtered upon. This is done by adding functions this object +with a parameter name which matches the sType for that target column. This is the +corollary of afnSortData for filtering data. +

    +
  • + Function input parameters: +
      +
    • {*} Data from the column cell to be prepared for filtering
    • +
    +
  • +
  • + Function return: +
      +
    • {string|null} Formatted string that will be used for the filtering.
    • +
    + +

+ +

Note that as of v1.9, it is typically preferable to use mData to prepare data for +the different uses that DataTables can put the data to. Specifically mData when +used as a function will give you a 'type' (sorting, filtering etc) that you can use to +prepare the data as required for the different types. As such, this method is deprecated.

+
Deprecated
Yes
+
+
Example
+
+
   $.fn.dataTableExt.ofnSearch['title-numeric'] = function ( sData ) {
+     return sData.replace(/\n/g," ").replace( /<.*?>/g, "" );
+   }
+
+
<static> oJUIClasses :object

Storage for the various classes that DataTables uses - jQuery UI suitable

+ +
+
<static> oPagination :object

Pagination plug-in methods - The style and controls of the pagination can significantly +impact on how the end user interacts with the data in your table, and DataTables allows +the addition of pagination controls by extending this object, which can then be enabled +through the sPaginationType initialisation parameter. Each pagination type that +is added is an object (the property name of which is what sPaginationType refers +to) that has two properties, both methods that are used by DataTables to update the +control's state. +

    +
  • + fnInit - Initialisation of the paging controls. Called only during initialisation + of the table. It is expected that this function will add the required DOM elements + to the page for the paging controls to work. The element pointer + 'oSettings.aanFeatures.p' array is provided by DataTables to contain the paging + controls (note that this is a 2D array to allow for multiple instances of each + DataTables DOM element). It is suggested that you add the controls to this element + as children +
      +
    • + Function input parameters: +
        +
      • {object} DataTables settings object: see DataTable.models.oSettings.
      • +
      • {node} Container into which the pagination controls must be inserted
      • +
      • {function} Draw callback function - whenever the controls cause a page + change, this method must be called to redraw the table.
      • +
      +
    • +
    • + Function return: +
        +
      • No return required
      • +
      + +
    + +
  • + fnInit - This function is called whenever the paging status of the table changes and is + typically used to update classes and/or text of the paging controls to reflex the new + status. +
      +
    • + Function input parameters: +
        +
      • {object} DataTables settings object: see DataTable.models.oSettings.
      • +
      • {function} Draw callback function - in case you need to redraw the table again + or attach new event listeners
      • +
      +
    • +
    • + Function return: +
        +
      • No return required
      • +
      + +
    + +

+ +
+
Example
+
+
   $.fn.dataTableExt.oPagination.four_button = {
+     "fnInit": function ( oSettings, nPaging, fnCallbackDraw ) {
+       nFirst = document.createElement( 'span' );
+       nPrevious = document.createElement( 'span' );
+       nNext = document.createElement( 'span' );
+       nLast = document.createElement( 'span' );
+       
+       nFirst.appendChild( document.createTextNode( oSettings.oLanguage.oPaginate.sFirst ) );
+       nPrevious.appendChild( document.createTextNode( oSettings.oLanguage.oPaginate.sPrevious ) );
+       nNext.appendChild( document.createTextNode( oSettings.oLanguage.oPaginate.sNext ) );
+       nLast.appendChild( document.createTextNode( oSettings.oLanguage.oPaginate.sLast ) );
+       
+       nFirst.className = "paginate_button first";
+       nPrevious.className = "paginate_button previous";
+       nNext.className="paginate_button next";
+       nLast.className = "paginate_button last";
+       
+       nPaging.appendChild( nFirst );
+       nPaging.appendChild( nPrevious );
+       nPaging.appendChild( nNext );
+       nPaging.appendChild( nLast );
+       
+       $(nFirst).click( function () {
+         oSettings.oApi._fnPageChange( oSettings, "first" );
+         fnCallbackDraw( oSettings );
+       } );
+       
+       $(nPrevious).click( function() {
+         oSettings.oApi._fnPageChange( oSettings, "previous" );
+         fnCallbackDraw( oSettings );
+       } );
+       
+       $(nNext).click( function() {
+         oSettings.oApi._fnPageChange( oSettings, "next" );
+         fnCallbackDraw( oSettings );
+       } );
+       
+       $(nLast).click( function() {
+         oSettings.oApi._fnPageChange( oSettings, "last" );
+         fnCallbackDraw( oSettings );
+       } );
+       
+       $(nFirst).bind( 'selectstart', function () { return false; } );
+       $(nPrevious).bind( 'selectstart', function () { return false; } );
+       $(nNext).bind( 'selectstart', function () { return false; } );
+       $(nLast).bind( 'selectstart', function () { return false; } );
+     },
+     
+     "fnUpdate": function ( oSettings, fnCallbackDraw ) {
+       if ( !oSettings.aanFeatures.p ) {
+         return;
+       }
+       
+       // Loop over each instance of the pager
+       var an = oSettings.aanFeatures.p;
+       for ( var i=0, iLen=an.length ; i
+    
+
<static> oSort :object

Sorting plug-in methods - Sorting in DataTables is based on the detected type of the +data column (you can add your own type detection functions, or override automatic +detection using sType). With this specific type given to the column, DataTables will +apply the required sort from the functions in the object. Each sort type must provide +two mandatory methods, one each for ascending and descending sorting, and can optionally +provide a pre-formatting method that will help speed up sorting by allowing DataTables +to pre-format the sort data only once (rather than every time the actual sort functions +are run). The two sorting functions are typical Javascript sort methods: +

    +
  • + Function input parameters: +
      +
    • {} Data to compare to the second parameter
    • +
    • {} Data to compare to the first parameter
    • +
    +
  • +
  • + Function return: +
      +
    • {int} Sorting match: <0 if first parameter should be sorted lower than + the second parameter, ===0 if the two parameters are equal and >0 if + the first parameter should be sorted height than the second parameter.
    • +
    + +

+ +
+
Examples
+
+
   // Case-sensitive string sorting, with no pre-formatting method
+   $.extend( $.fn.dataTableExt.oSort, {
+     "string-case-asc": function(x,y) {
+       return ((x < y) ? -1 : ((x > y) ? 1 : 0));
+     },
+     "string-case-desc": function(x,y) {
+       return ((x < y) ? 1 : ((x > y) ? -1 : 0));
+     }
+   } );
+
+ 
+
+ +
+
   // Case-insensitive string sorting, with pre-formatting
+   $.extend( $.fn.dataTableExt.oSort, {
+     "string-pre": function(x) {
+       return x.toLowerCase();
+     },
+     "string-asc": function(x,y) {
+       return ((x < y) ? -1 : ((x > y) ? 1 : 0));
+     },
+     "string-desc": function(x,y) {
+       return ((x < y) ? 1 : ((x > y) ? -1 : 0));
+     }
+   } );
+
+
<static> oStdClasses :object

Storage for the various classes that DataTables uses

+ +
+
<static> sErrMode :string

How should DataTables report an error. Can take the value 'alert' or 'throw'

+ +
+
<static> sVersion :string

Version string for plug-ins to check compatibility. Allowed format is +a.b.c.d.e where: a:int, b:int, c:int, d:string(dev|beta), e:int. d and +e are optional

+ +
+
+
+
+ +
+ + + + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/docs/DataTable.models.html b/docroot/sites/all/libraries/datatables/docs/DataTable.models.html new file mode 100644 index 00000000..63324dc5 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/docs/DataTable.models.html @@ -0,0 +1,101 @@ + + + + + Namespace: models - documentation + + + + + + + + + +
+ + +
+

Namespace: models

+

Ancestry: DataTable. » models

+
+ DataTables v1.9.4 documentation +
+
+ + + +
+

Navigation

+
    +
  • Overview
  • +
  • Summary
    Classes (0)Namespaces (5)
    Properties (0)Static properties (0)
    Methods (0)Static methods (0)
    Events (0)
  • Details
    Properties (0)Static properties (0)
    Methods (0)Static methods (0)
    Events (0)
+
+ + Hiding private elements + (toggle) + +
+
+ + Showing extended elements + (toggle) + +
+
+ +
+ +
+ +

Object models container, for the various models that DataTables has available +to it. These models define the objects that are used to hold the active state +and configuration of the table.

+ +
+ +
+ + +
+ +

Summary

+ +

Namespaces

+
+
ext

DataTables extension options and plug-ins. This namespace acts as a collection "area" +for plug-ins that can be used to extend the default DataTables behaviour - indeed many +of the build in methods use this method to provide their own capabilities (sorting methods +for example). [...]

oColumn

Template object for the column information object in DataTables. This object +is held in the settings aoColumns array and contains all the information that +DataTables needs about each individual column. [...]

oRow

Template object for the way in which DataTables holds information about +each individual row. This is the object format used for the settings +aoData array.

oSearch

Template object for the way in which DataTables holds information about +search information for the global filter and individual column filters.

oSettings

DataTables settings object - this holds all the information needed for a +given table, including configuration, data and current application of the +table options. DataTables does not have a single instance for each DataTable +with the settings attached to that instance, but rather instances of the +DataTable "class" are created on-the-fly as needed (typically by a +$().dataTable() call) and the settings object is then applied to that +instance. [...]

+
+
+ + + + +
+ + + + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/docs/DataTable.models.oColumn.html b/docroot/sites/all/libraries/datatables/docs/DataTable.models.oColumn.html new file mode 100644 index 00000000..11ac65d4 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/docs/DataTable.models.oColumn.html @@ -0,0 +1,348 @@ + + + + + Namespace: oColumn - documentation + + + + + + + + + +
+ + +
+

Namespace: oColumn

+

Ancestry: DataTable » .models. » oColumn

+
+ DataTables v1.9.4 documentation +
+
+ + + +
+

Navigation

+ +
+ + Hiding private elements + (toggle) + +
+
+ + Showing extended elements + (toggle) + +
+
+ +
+ +
+ +

Template object for the column information object in DataTables. This object +is held in the settings aoColumns array and contains all the information that +DataTables needs about each individual column.

+ +

Note that this object is related to DataTable.defaults.columns +but this one is the internal data store for DataTables's cache of columns. +It should NOT be manipulated outside of DataTables. Any configuration should +be done through the initialisation options.

+ +
+ +
+ + +
+ +

Summary

+ +

Properties - static

+ +
+
<static> aDataSort :array

A list of the columns that sorting should occur on when this column +is sorted. That this property is an array allows multi-column sorting +to be defined for a column (for example first name / last name columns +would benefit from this). The values are integers pointing to the +columns to be sorted on (typically it will be a single integer pointing +at itself, but that doesn't need to be the case).

<static> asSorting :array

Define the sorting directions that are applied to the column, in sequence +as the column is repeatedly sorted upon - i.e. the first value is used +as the sorting direction when the column if first sorted (clicked on). +Sort it again (click again) and it will move on to the next index. +Repeat until loop.

<static> bSearchable :boolean

Flag to indicate if the column is searchable, and thus should be included +in the filtering or not.

<static> bSortable :boolean

Flag to indicate if the column is sortable or not.

<static> bUseRendered :boolean

Deprecated When using fnRender, you have two options for what +to do with the data, and this property serves as the switch. Firstly, you +can have the sorting and filtering use the rendered value (true - default), +or you can have the sorting and filtering us the original value (false). [...]

<static> bVisible :boolean

Flag to indicate if the column is currently visible in the table or not

<static> fnCreatedCell :function

Developer definable function that is called whenever a cell is created (Ajax source, +etc) or processed for input (DOM source). This can be used as a compliment to mRender +allowing you to modify the DOM element (add background colour for example) when the +element is available.

<static> fnGetData :function

Function to get data from a cell in a column. You should never +access data directly through _aData internally in DataTables - always use +the method attached to this property. It allows mData to function as +required. This function is automatically assigned by the column +initialisation method

<static> fnRender :function

Deprecated Custom display function that will be called for the +display of each cell in this column. [...]

<static> fnSetData :function

Function to set data for a cell in the column. You should never +set the data directly to _aData internally in DataTables - always use +this method. It allows mData to function as required. This function +is automatically assigned by the column initialisation method

<static> mData :function|int|string|null

Property to read the value for the cells in the column from the data +source array / object. If null, then the default content is used, if a +function is given then the return from the function is used.

<static> mRender :function|int|string|null

Partner property to mData which is used (only when defined) to get +the data - i.e. it is basically the same as mData, but without the +'set' option, and also the data fed to it is the result from mData. +This is the rendering method to match the data method of mData.

<static> nTf :node

Unique footer TH/TD element for this column (if there is one). Not used +in DataTables as such, but can be used for plug-ins to reference the +footer for each column.

<static> nTh :node

Unique header TH/TD element for this column - this is what the sorting +listener is attached to (if sorting is enabled.)

<static> sClass :string

The class to apply to all TD elements in the table's TBODY for the column

<static> sContentPadding :string

When DataTables calculates the column widths to assign to each column, +it finds the longest string in each column and then constructs a +temporary table and reads the widths from that. The problem with this +is that "mmm" is much wider then "iiii", but the latter is a longer +string - thus the calculation can go wrong (doing it properly and putting +it into an DOM object and measuring that is horribly(!) slow). Thus as +a "work around" we provide this option. It will append its value to the +text that is found to be the longest string for the column - i.e. padding.

<static> sDefaultContent :string

Allows a default value to be given for a column's data, and will be used +whenever a null data source is encountered (this can be because mData +is set to null, or because the data source itself is null).

<static> sName :string

Name for the column, allowing reference to the column by name as well as +by index (needs a lookup to work by name).

<static> sSortDataType :string

Custom sorting data type - defines which of the available plug-ins in +afnSortData the custom sorting will use - if any is defined.

<static> sSortingClass :string

Class to be applied to the header element when sorting on this column

<static> sSortingClassJUI :string

Class to be applied to the header element when sorting on this column - +when jQuery UI theming is used.

<static> sTitle :string

Title of the column - what is seen in the TH element (nTh).

<static> sType :string

Column sorting and filtering type

<static> sWidth :string

Width of the column

<static> sWidthOrig :string

Width of the column when it was first "encountered"

+
+
+ + + + +
+ +

Details

+

Properties - static

+
+
<static> aDataSort :array

A list of the columns that sorting should occur on when this column +is sorted. That this property is an array allows multi-column sorting +to be defined for a column (for example first name / last name columns +would benefit from this). The values are integers pointing to the +columns to be sorted on (typically it will be a single integer pointing +at itself, but that doesn't need to be the case).

+ +
+
<static> asSorting :array

Define the sorting directions that are applied to the column, in sequence +as the column is repeatedly sorted upon - i.e. the first value is used +as the sorting direction when the column if first sorted (clicked on). +Sort it again (click again) and it will move on to the next index. +Repeat until loop.

+ +
+
<static> bSearchable :boolean

Flag to indicate if the column is searchable, and thus should be included +in the filtering or not.

+ +
+
<static> bSortable :boolean

Flag to indicate if the column is sortable or not.

+ +
+
<static> bUseRendered :boolean

Deprecated When using fnRender, you have two options for what +to do with the data, and this property serves as the switch. Firstly, you +can have the sorting and filtering use the rendered value (true - default), +or you can have the sorting and filtering us the original value (false).

+ +

Please note that this option has now been deprecated and will be removed +in the next version of DataTables. Please use mRender / mData rather than +fnRender.

+
Deprecated
Yes
+
+
<static> bVisible :boolean

Flag to indicate if the column is currently visible in the table or not

+ +
+
<static> fnCreatedCell :function

Developer definable function that is called whenever a cell is created (Ajax source, +etc) or processed for input (DOM source). This can be used as a compliment to mRender +allowing you to modify the DOM element (add background colour for example) when the +element is available.

+ +
+
Parameters:
+ + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
1
nTdelement

The TD node that has been created

2
sData*

The Data for the cell

3
oDataarray | object

The data for the whole row

4
iRowint

The row index for the aoData data store

+
<static> fnGetData :function

Function to get data from a cell in a column. You should never +access data directly through _aData internally in DataTables - always use +the method attached to this property. It allows mData to function as +required. This function is automatically assigned by the column +initialisation method

+ +
+
Parameters:
+ + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
1
oDataarray | object

The data array/object for the array + (i.e. aoData[]._aData)

2
sSpecificstring

The specific data type you want to get - + 'display', 'type' 'filter' 'sort'

Returns:

The data for the cell from the given row's data

+
<static> fnRender :function

Deprecated Custom display function that will be called for the +display of each cell in this column.

+ +

Please note that this option has now been deprecated and will be removed +in the next version of DataTables. Please use mRender / mData rather than +fnRender.

+
Deprecated
Yes
+
+
Parameters:
+ + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
1
oobject

Object with the following parameters:

o.iDataRowint

The row in aoData

o.iDataColumnint

The column in question

o.aDataarray

The data for the row in question

o.oSettingsobject

The settings object for this DataTables instance

Returns:

The string you which to use in the display

+
<static> fnSetData :function

Function to set data for a cell in the column. You should never +set the data directly to _aData internally in DataTables - always use +this method. It allows mData to function as required. This function +is automatically assigned by the column initialisation method

+ +
+
Parameters:
+ + + + + + + + + + + + + + + + +
NameTypeAttributesDefaultDescription
1
oDataarray | object

The data array/object for the array + (i.e. aoData[]._aData)

2
sValue*

Value to set

+
<static> mData :function|int|string|null

Property to read the value for the cells in the column from the data +source array / object. If null, then the default content is used, if a +function is given then the return from the function is used.

+ +
+
<static> mRender :function|int|string|null

Partner property to mData which is used (only when defined) to get +the data - i.e. it is basically the same as mData, but without the +'set' option, and also the data fed to it is the result from mData. +This is the rendering method to match the data method of mData.

+ +
+
<static> nTf :node

Unique footer TH/TD element for this column (if there is one). Not used +in DataTables as such, but can be used for plug-ins to reference the +footer for each column.

+ +
+
<static> nTh :node

Unique header TH/TD element for this column - this is what the sorting +listener is attached to (if sorting is enabled.)

+ +
+
<static> sClass :string

The class to apply to all TD elements in the table's TBODY for the column

+ +
+
<static> sContentPadding :string

When DataTables calculates the column widths to assign to each column, +it finds the longest string in each column and then constructs a +temporary table and reads the widths from that. The problem with this +is that "mmm" is much wider then "iiii", but the latter is a longer +string - thus the calculation can go wrong (doing it properly and putting +it into an DOM object and measuring that is horribly(!) slow). Thus as +a "work around" we provide this option. It will append its value to the +text that is found to be the longest string for the column - i.e. padding.

+ +
+
<static> sDefaultContent :string

Allows a default value to be given for a column's data, and will be used +whenever a null data source is encountered (this can be because mData +is set to null, or because the data source itself is null).

+ +
+
<static> sName :string

Name for the column, allowing reference to the column by name as well as +by index (needs a lookup to work by name).

+ +
+
<static> sSortDataType :string

Custom sorting data type - defines which of the available plug-ins in +afnSortData the custom sorting will use - if any is defined.

+ +
+
<static> sSortingClass :string

Class to be applied to the header element when sorting on this column

+ +
+
<static> sSortingClassJUI :string

Class to be applied to the header element when sorting on this column - +when jQuery UI theming is used.

+ +
+
<static> sTitle :string

Title of the column - what is seen in the TH element (nTh).

+ +
+
<static> sType :string

Column sorting and filtering type

+ +
+
<static> sWidth :string

Width of the column

+ +
+
<static> sWidthOrig :string

Width of the column when it was first "encountered"

+ +
+
+
+
+ +
+ + + + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/docs/DataTable.models.oRow.html b/docroot/sites/all/libraries/datatables/docs/DataTable.models.oRow.html new file mode 100644 index 00000000..3d30306b --- /dev/null +++ b/docroot/sites/all/libraries/datatables/docs/DataTable.models.oRow.html @@ -0,0 +1,111 @@ + + + + + Namespace: oRow - documentation + + + + + + + + + +
+ + +
+

Namespace: oRow

+

Ancestry: DataTable » .models. » oRow

+
+ DataTables v1.9.4 documentation +
+
+ + + +
+

Navigation

+ +
+ + Hiding private elements + (toggle) + +
+
+ + Showing extended elements + (toggle) + +
+
+ +
+ +
+ +

Template object for the way in which DataTables holds information about +each individual row. This is the object format used for the settings +aoData array.

+ +
+ +
+ + +
+ +

Summary

+ +

Properties - static

+ +
+
<static> nTr :node

TR element for the row

<static> _aData :array|object

Data object from the original data source for the row. This is either +an array if using the traditional form of DataTables, or an object if +using mData options. The exact type will depend on the passed in +data from the data source, or will be an array if using DOM a data +source.

+
+
+ + + + +
+ +

Details

+

Properties - static

+
+
<static> nTr :node

TR element for the row

+ +
+
<static> _aData :array|object

Data object from the original data source for the row. This is either +an array if using the traditional form of DataTables, or an object if +using mData options. The exact type will depend on the passed in +data from the data source, or will be an array if using DOM a data +source.

+ +
+
+
+
+ +
+ + + + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/docs/DataTable.models.oSearch.html b/docroot/sites/all/libraries/datatables/docs/DataTable.models.oSearch.html new file mode 100644 index 00000000..af07ef72 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/docs/DataTable.models.oSearch.html @@ -0,0 +1,112 @@ + + + + + Namespace: oSearch - documentation + + + + + + + + + +
+ + +
+

Namespace: oSearch

+

Ancestry: DataTable » .models. » oSearch

+
+ DataTables v1.9.4 documentation +
+
+ + + +
+

Navigation

+ +
+ + Hiding private elements + (toggle) + +
+
+ + Showing extended elements + (toggle) + +
+
+ +
+ +
+ +

Template object for the way in which DataTables holds information about +search information for the global filter and individual column filters.

+ +
+ +
+ + +
+ +

Summary

+ +

Properties - static

+ +
+
<static> bCaseInsensitive :boolean

Flag to indicate if the filtering should be case insensitive or not

<static> bRegex :boolean

Flag to indicate if the search term should be interpreted as a +regular expression (true) or not (false) and therefore and special +regex characters escaped.

<static> bSmart :boolean

Flag to indicate if DataTables is to use its smart filtering or not.

<static> sSearch :string

Applied search term

+
+
+ + + + +
+ +

Details

+

Properties - static

+
+
<static> bCaseInsensitive :boolean

Flag to indicate if the filtering should be case insensitive or not

+ +
+
<static> bRegex :boolean

Flag to indicate if the search term should be interpreted as a +regular expression (true) or not (false) and therefore and special +regex characters escaped.

+ +
+
<static> bSmart :boolean

Flag to indicate if DataTables is to use its smart filtering or not.

+ +
+
<static> sSearch :string

Applied search term

+ +
+
+
+
+ +
+ + + + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/docs/DataTable.models.oSettings.html b/docroot/sites/all/libraries/datatables/docs/DataTable.models.oSettings.html new file mode 100644 index 00000000..c6cf4357 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/docs/DataTable.models.oSettings.html @@ -0,0 +1,514 @@ + + + + + Namespace: oSettings - documentation + + + + + + + + + +
+ + +
+

Namespace: oSettings

+

Ancestry: DataTable » .models. » oSettings

+
+ DataTables v1.9.4 documentation +
+
+ + + +
+

Navigation

+ +
+ + Hiding private elements + (toggle) + +
+
+ + Showing extended elements + (toggle) + +
+
+ +
+ +
+ +

DataTables settings object - this holds all the information needed for a +given table, including configuration, data and current application of the +table options. DataTables does not have a single instance for each DataTable +with the settings attached to that instance, but rather instances of the +DataTable "class" are created on-the-fly as needed (typically by a +$().dataTable() call) and the settings object is then applied to that +instance.

+ +

Note that this object is related to DataTable.defaults but this +one is the internal data store for DataTables's cache of columns. It should +NOT be manipulated outside of DataTables. Any configuration should be done +through the initialisation options.

+ +
+ +
+ + +
+ +

Summary

+ +

Namespaces

+
+
oBrowser

Browser support parameters

oFeatures

Primary features of DataTables and their enablement state.

oLanguage

Language information for the table.

oPreviousSearch

Store the applied global search information in case we want to force a +research or compare the old search to a new one. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

oScroll

Scrolling settings for a table.

+

Properties - static

+ +
+
<static> aanFeatures :array

Array referencing the nodes which are used for the features. The +parameters of this object match what is allowed by sDom - i.e. +

    +
  • 'l' - Length changing
  • +
  • 'f' - Filtering input
  • +
  • 't' - The table!
  • +
  • 'i' - Information
  • +
  • 'p' - Pagination
  • +
  • 'r' - pRocessing
  • +

<static> aaSorting :array

Sorting that is applied to the table. Note that the inner arrays are +used in the following manner: [...]

<static> aaSortingFixed :array|null

Sorting that is always applied to the table (i.e. prefixed in front of +aaSorting). +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

<static> aiDisplay :array

Array of indexes which are in the current display (after filtering etc)

<static> aiDisplayMaster :array

Array of indexes for display - no filtering

<static> aLengthMenu :array

List of options that can be used for the user selectable length menu. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

<static> aoColumns :array

Store information about each column that is in use

<static> aoData :array

Store data information - see DataTable.models.oRow for detailed +information.

<static> aoDestroyCallback :array

Destroy callback functions - for plug-ins to attach themselves to the +destroy so they can clean up markup and events.

<static> aoDrawCallback :array

Array of callback functions for draw callback functions

<static> aoFooter :array

Store information about the table's footer

<static> aoFooterCallback :array

Callback function for the footer on each draw.

<static> aoHeader :array

Store information about the table's header

<static> aoHeaderCallback :array

Callback functions for the header on each draw.

<static> aoInitComplete :array

Callback functions for when the table has been initialised.

<static> aoOpenRows :array

Information about open rows. Each object in the array has the parameters +'nTr' and 'nParent'

<static> aoPreDrawCallback :array

Callback functions for just before the table is redrawn. A return of +false will be used to cancel the draw.

<static> aoPreSearchCols :array

Store the applied search for each column - see +DataTable.models.oSearch for the format that is used for the +filtering information for each column.

<static> aoRowCallback :array

Callback functions array for every time a row is inserted (i.e. on a draw).

<static> aoRowCreatedCallback :array

Array of callback functions for row created function

<static> aoServerParams :array

Functions which are called prior to sending an Ajax request so extra +parameters can easily be sent to the server

<static> aoStateLoad :array

Array of callback functions for state loading. Each array element is an +object with the following parameters: +

    +
  • function:fn - function to call. Takes two parameters, oSettings + and the object stored. May return false to cancel state loading
  • +
  • string:sName - name of callback
  • +

<static> aoStateLoaded :array

Callbacks for operating on the settings object once the saved state has been +loaded

<static> aoStateLoadParams :array

Callbacks for modifying the settings that have been stored for state saving +prior to using the stored values to restore the state.

<static> aoStateSave :array

Array of callback functions for state saving. Each array element is an +object with the following parameters: +

    +
  • function:fn - function to call. Takes two parameters, oSettings + and the JSON string to save that has been thus far created. Returns + a JSON string to be inserted into a json object + (i.e. '"param": [ 0, 1, 2]')
  • +
  • string:sName - name of callback
  • +

<static> aoStateSaveParams :array

Callbacks for modifying the settings to be stored for state saving, prior to +saving state.

<static> asDataSearch :array

Search data array for regular expression searching

<static> asDestroyStripes :array

If restoring a table - we should restore its striping classes as well

<static> asStripeClasses :array

Classes to use for the striping of a table. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

<static> bAjaxDataGet :boolean

Note if draw should be blocked while getting data

<static> bDeferLoading :boolean

Indicate if when using server-side processing the loading of data +should be deferred until the second draw. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

<static> bDrawing :boolean

Indicate if a redraw is being done - useful for Ajax

<static> bFiltered :boolean

Flag attached to the settings object so you can check in the draw +callback if filtering has been done in the draw. Deprecated in favour of +events.

<static> bInitialised :boolean

Indicate if all required information has been read in

<static> bJUI :boolean

Flag to indicate if jQuery UI marking and classes should be used. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

<static> bSortCellsTop :boolean

Indicate that if multiple rows are in the header and there is more than +one unique cell per column, if the top one (true) or bottom one (false) +should be used for sorting / title by DataTables. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

<static> bSorted :boolean

Flag attached to the settings object so you can check in the draw +callback if sorting has been done in the draw. Deprecated in favour of +events.

<static> fnCookieCallback :function

Callback function for cookie creation. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

<static> fnFormatNumber :function

Format numbers for display. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

<static> fnServerData :function

Function to get the server-side data. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

<static> iCookieDuration :int

The cookie duration (for bStateSave) in seconds. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

<static> iDraw :int

Counter for the draws that the table does. Also used as a tracker for +server-side processing

<static> iDrawError :int

Draw index (iDraw) of the last error when parsing the returned data

<static> iTabIndex

tabindex attribute value that is added to DataTables control elements, allowing +keyboard navigation of the table and its controls.

<static> jqXHR :object

The last jQuery XHR object that was used for server-side data gathering. +This can be used for working with the XHR information in one of the +callbacks

<static> nScrollFoot

DIV container for the footer scrolling table if scrolling

<static> nScrollHead

DIV container for the footer scrolling table if scrolling

<static> nTable :node

The TABLE node for the main table

<static> nTableWrapper :node

Cache the wrapper node (contains all DataTables controlled elements)

<static> nTBody :node

Permanent ref to the tbody element

<static> nTFoot :node

Permanent ref to the tfoot element - if it exists

<static> nTHead :node

Permanent ref to the thead element

<static> oClasses :object

The classes to use for the table

<static> oInit :object

Initialisation object that is used for the table

<static> oInstance :object

The DataTables object for this table

<static> oLoadedState :object

State that was loaded from the cookie. Useful for back reference

<static> sAjaxDataProp :string

Property from a given object from which to read the table data from. This +can be an empty string (when not server-side processing), in which case +it is assumed an an array is given directly. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

<static> sAjaxSource :string

Source url for AJAX data for the table. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

<static> sCookiePrefix :string

The cookie name prefix. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

<static> sDestroyWidth :int

If restoring a table - we should restore its width

<static> sDom :string

Dictate the positioning of DataTables' control elements - see +DataTable.model.oInit.sDom. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

<static> sInstance :string

Unique identifier for each instance of the DataTables object. If there +is an ID on the table node, then it takes that value, otherwise an +incrementing internal counter is used.

<static> sPaginationType :string

Which type of pagination should be used. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

<static> sServerMethod :string

Send the XHR HTTP method - GET or POST (could be PUT or DELETE if +required). +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

<static> sTableId :string

Cache the table ID for quick access

<static> _iDisplayLength :int

Paging display length

<static> _iDisplayStart :int

Paging start point - aiDisplay index

+

Methods - static

+ +
+
<static> fnDisplayEnd()

Set the display end point - aiDisplay index

<static> fnRecordsDisplay()

Get the number of records in the current record set, after filtering

<static> fnRecordsTotal()

Get the number of records in the current record set, before filtering

+
+
+
+ + + + +
+ +

Details

+

Properties - static

+
+
<static> aanFeatures :array

Array referencing the nodes which are used for the features. The +parameters of this object match what is allowed by sDom - i.e. +

    +
  • 'l' - Length changing
  • +
  • 'f' - Filtering input
  • +
  • 't' - The table!
  • +
  • 'i' - Information
  • +
  • 'p' - Pagination
  • +
  • 'r' - pRocessing
  • +

+ +
+
<static> aaSorting :array

Sorting that is applied to the table. Note that the inner arrays are +used in the following manner:

+ +
    +
  • Index 0 - column number
  • +
  • Index 1 - current sorting direction
  • +
  • Index 2 - index of asSorting for this column
  • +
+ +

Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

+ +
+
<static> aaSortingFixed :array|null

Sorting that is always applied to the table (i.e. prefixed in front of +aaSorting). +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

+ +
+
<static> aiDisplay :array

Array of indexes which are in the current display (after filtering etc)

+ +
+
<static> aiDisplayMaster :array

Array of indexes for display - no filtering

+ +
+
<static> aLengthMenu :array

List of options that can be used for the user selectable length menu. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

+ +
+
<static> aoColumns :array

Store information about each column that is in use

+ +
+
<static> aoData :array

Store data information - see DataTable.models.oRow for detailed +information.

+ +
+
<static> aoDestroyCallback :array

Destroy callback functions - for plug-ins to attach themselves to the +destroy so they can clean up markup and events.

+ +
+
<static> aoDrawCallback :array

Array of callback functions for draw callback functions

+ +
+
<static> aoFooter :array

Store information about the table's footer

+ +
+
<static> aoFooterCallback :array

Callback function for the footer on each draw.

+ +
+
<static> aoHeader :array

Store information about the table's header

+ +
+
<static> aoHeaderCallback :array

Callback functions for the header on each draw.

+ +
+
<static> aoInitComplete :array

Callback functions for when the table has been initialised.

+ +
+
<static> aoOpenRows :array

Information about open rows. Each object in the array has the parameters +'nTr' and 'nParent'

+ +
+
<static> aoPreDrawCallback :array

Callback functions for just before the table is redrawn. A return of +false will be used to cancel the draw.

+ +
+
<static> aoPreSearchCols :array

Store the applied search for each column - see +DataTable.models.oSearch for the format that is used for the +filtering information for each column.

+ +
+
<static> aoRowCallback :array

Callback functions array for every time a row is inserted (i.e. on a draw).

+ +
+
<static> aoRowCreatedCallback :array

Array of callback functions for row created function

+ +
+
<static> aoServerParams :array

Functions which are called prior to sending an Ajax request so extra +parameters can easily be sent to the server

+ +
+
<static> aoStateLoad :array

Array of callback functions for state loading. Each array element is an +object with the following parameters: +

    +
  • function:fn - function to call. Takes two parameters, oSettings + and the object stored. May return false to cancel state loading
  • +
  • string:sName - name of callback
  • +

+ +
+
<static> aoStateLoaded :array

Callbacks for operating on the settings object once the saved state has been +loaded

+ +
+
<static> aoStateLoadParams :array

Callbacks for modifying the settings that have been stored for state saving +prior to using the stored values to restore the state.

+ +
+
<static> aoStateSave :array

Array of callback functions for state saving. Each array element is an +object with the following parameters: +

    +
  • function:fn - function to call. Takes two parameters, oSettings + and the JSON string to save that has been thus far created. Returns + a JSON string to be inserted into a json object + (i.e. '"param": [ 0, 1, 2]')
  • +
  • string:sName - name of callback
  • +

+ +
+
<static> aoStateSaveParams :array

Callbacks for modifying the settings to be stored for state saving, prior to +saving state.

+ +
+
<static> asDataSearch :array

Search data array for regular expression searching

+ +
+
<static> asDestroyStripes :array

If restoring a table - we should restore its striping classes as well

+ +
+
<static> asStripeClasses :array

Classes to use for the striping of a table. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

+ +
+
<static> bAjaxDataGet :boolean

Note if draw should be blocked while getting data

+ +
+
<static> bDeferLoading :boolean

Indicate if when using server-side processing the loading of data +should be deferred until the second draw. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

+ +
+
<static> bDrawing :boolean

Indicate if a redraw is being done - useful for Ajax

+ +
+
<static> bFiltered :boolean

Flag attached to the settings object so you can check in the draw +callback if filtering has been done in the draw. Deprecated in favour of +events.

+
Deprecated
Yes
+
+
<static> bInitialised :boolean

Indicate if all required information has been read in

+ +
+
<static> bJUI :boolean

Flag to indicate if jQuery UI marking and classes should be used. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

+ +
+
<static> bSortCellsTop :boolean

Indicate that if multiple rows are in the header and there is more than +one unique cell per column, if the top one (true) or bottom one (false) +should be used for sorting / title by DataTables. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

+ +
+
<static> bSorted :boolean

Flag attached to the settings object so you can check in the draw +callback if sorting has been done in the draw. Deprecated in favour of +events.

+
Deprecated
Yes
+
+
<static> fnCookieCallback :function

Callback function for cookie creation. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

+ +
+
+
<static> fnFormatNumber :function

Format numbers for display. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

+ +
+
+
<static> fnServerData :function

Function to get the server-side data. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

+ +
+
+
<static> iCookieDuration :int

The cookie duration (for bStateSave) in seconds. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

+ +
+
<static> iDraw :int

Counter for the draws that the table does. Also used as a tracker for +server-side processing

+ +
+
<static> iDrawError :int

Draw index (iDraw) of the last error when parsing the returned data

+ +
+
<static> iTabIndex

tabindex attribute value that is added to DataTables control elements, allowing +keyboard navigation of the table and its controls.

+ +
+
<static> jqXHR :object

The last jQuery XHR object that was used for server-side data gathering. +This can be used for working with the XHR information in one of the +callbacks

+ +
+
<static> nScrollFoot

DIV container for the footer scrolling table if scrolling

+ +
+
<static> nScrollHead

DIV container for the footer scrolling table if scrolling

+ +
+
<static> nTable :node

The TABLE node for the main table

+ +
+
<static> nTableWrapper :node

Cache the wrapper node (contains all DataTables controlled elements)

+ +
+
<static> nTBody :node

Permanent ref to the tbody element

+ +
+
<static> nTFoot :node

Permanent ref to the tfoot element - if it exists

+ +
+
<static> nTHead :node

Permanent ref to the thead element

+ +
+
<static> oClasses :object

The classes to use for the table

+ +
+
<static> oInit :object

Initialisation object that is used for the table

+ +
+
<static> oInstance :object

The DataTables object for this table

+ +
+
<static> oLoadedState :object

State that was loaded from the cookie. Useful for back reference

+ +
+
<static> sAjaxDataProp :string

Property from a given object from which to read the table data from. This +can be an empty string (when not server-side processing), in which case +it is assumed an an array is given directly. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

+ +
+
<static> sAjaxSource :string

Source url for AJAX data for the table. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

+ +
+
<static> sCookiePrefix :string

The cookie name prefix. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

+ +
+
<static> sDestroyWidth :int

If restoring a table - we should restore its width

+ +
+
<static> sDom :string

Dictate the positioning of DataTables' control elements - see +DataTable.model.oInit.sDom. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

+ +
+
<static> sInstance :string

Unique identifier for each instance of the DataTables object. If there +is an ID on the table node, then it takes that value, otherwise an +incrementing internal counter is used.

+ +
+
<static> sPaginationType :string

Which type of pagination should be used. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

+ +
+
<static> sServerMethod :string

Send the XHR HTTP method - GET or POST (could be PUT or DELETE if +required). +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

+ +
+
<static> sTableId :string

Cache the table ID for quick access

+ +
+
<static> _iDisplayLength :int

Paging display length

+ +
+
<static> _iDisplayStart :int

Paging start point - aiDisplay index

+ +
+
+

Methods - static

+
+
<static> fnDisplayEnd()

Set the display end point - aiDisplay index

+ +
+
+
<static> fnRecordsDisplay()

Get the number of records in the current record set, after filtering

+ +
+
+
<static> fnRecordsTotal()

Get the number of records in the current record set, before filtering

+ +
+
+ +
+
+
+ +
+ + + + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/docs/DataTable.models.oSettings.oBrowser.html b/docroot/sites/all/libraries/datatables/docs/DataTable.models.oSettings.oBrowser.html new file mode 100644 index 00000000..07dfd7a0 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/docs/DataTable.models.oSettings.oBrowser.html @@ -0,0 +1,100 @@ + + + + + Namespace: oBrowser - documentation + + + + + + + + + +
+ + +
+

Namespace: oBrowser

+

Ancestry: DataTable » .models » .oSettings. » oBrowser

+
+ DataTables v1.9.4 documentation +
+
+ + + +
+

Navigation

+ +
+ + Hiding private elements + (toggle) + +
+
+ + Showing extended elements + (toggle) + +
+
+ +
+ +
+ +

Browser support parameters

+ +
+ +
+ + +
+ +

Summary

+ +

Properties - static

+ +
+
<static> bScrollOversize :boolean

Indicate if the browser incorrectly calculates width:100% inside a +scrolling element (IE6/7)

+
+
+ + + + +
+ +

Details

+

Properties - static

+
+
<static> bScrollOversize :boolean

Indicate if the browser incorrectly calculates width:100% inside a +scrolling element (IE6/7)

+ +
+
+
+
+ +
+ + + + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/docs/DataTable.models.oSettings.oFeatures.html b/docroot/sites/all/libraries/datatables/docs/DataTable.models.oSettings.oFeatures.html new file mode 100644 index 00000000..de91d768 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/docs/DataTable.models.oSettings.oFeatures.html @@ -0,0 +1,200 @@ + + + + + Namespace: oFeatures - documentation + + + + + + + + + +
+ + +
+

Namespace: oFeatures

+

Ancestry: DataTable » .models » .oSettings. » oFeatures

+
+ DataTables v1.9.4 documentation +
+
+ + + +
+

Navigation

+ +
+ + Hiding private elements + (toggle) + +
+
+ + Showing extended elements + (toggle) + +
+
+ +
+ +
+ +

Primary features of DataTables and their enablement state.

+ +
+ +
+ + +
+ +

Summary

+ +

Properties - static

+ +
+
<static> bAutoWidth :boolean

Flag to say if DataTables should automatically try to calculate the +optimum table and columns widths (true) or not (false). +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

<static> bDeferRender :boolean

Delay the creation of TR and TD elements until they are actually +needed by a driven page draw. This can give a significant speed +increase for Ajax source and Javascript source data, but makes no +difference at all fro DOM and server-side processing tables. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

<static> bFilter :boolean

Enable filtering on the table or not. Note that if this is disabled +then there is no filtering at all on the table, including fnFilter. +To just remove the filtering input use sDom and remove the 'f' option. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

<static> bInfo :boolean

Table information element (the 'Showing x of y records' div) enable +flag. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

<static> bLengthChange :boolean

Present a user control allowing the end user to change the page size +when pagination is enabled. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

<static> bPaginate :boolean

Pagination enabled or not. Note that if this is disabled then length +changing must also be disabled. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

<static> bProcessing :boolean

Processing indicator enable flag whenever DataTables is enacting a +user request - typically an Ajax request for server-side processing. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

<static> bServerSide :boolean

Server-side processing enabled flag - when enabled DataTables will +get all data from the server for every draw - there is no filtering, +sorting or paging done on the client-side. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

<static> bSort :boolean

Sorting enablement flag. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

<static> bSortClasses :boolean

Apply a class to the columns which are being sorted to provide a +visual highlight or not. This can slow things down when enabled since +there is a lot of DOM interaction. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

<static> bStateSave :boolean

State saving enablement flag. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

+
+
+ + + + +
+ +

Details

+

Properties - static

+
+
<static> bAutoWidth :boolean

Flag to say if DataTables should automatically try to calculate the +optimum table and columns widths (true) or not (false). +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

+ +
+
<static> bDeferRender :boolean

Delay the creation of TR and TD elements until they are actually +needed by a driven page draw. This can give a significant speed +increase for Ajax source and Javascript source data, but makes no +difference at all fro DOM and server-side processing tables. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

+ +
+
<static> bFilter :boolean

Enable filtering on the table or not. Note that if this is disabled +then there is no filtering at all on the table, including fnFilter. +To just remove the filtering input use sDom and remove the 'f' option. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

+ +
+
<static> bInfo :boolean

Table information element (the 'Showing x of y records' div) enable +flag. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

+ +
+
<static> bLengthChange :boolean

Present a user control allowing the end user to change the page size +when pagination is enabled. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

+ +
+
<static> bPaginate :boolean

Pagination enabled or not. Note that if this is disabled then length +changing must also be disabled. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

+ +
+
<static> bProcessing :boolean

Processing indicator enable flag whenever DataTables is enacting a +user request - typically an Ajax request for server-side processing. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

+ +
+
<static> bServerSide :boolean

Server-side processing enabled flag - when enabled DataTables will +get all data from the server for every draw - there is no filtering, +sorting or paging done on the client-side. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

+ +
+
<static> bSort :boolean

Sorting enablement flag. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

+ +
+
<static> bSortClasses :boolean

Apply a class to the columns which are being sorted to provide a +visual highlight or not. This can slow things down when enabled since +there is a lot of DOM interaction. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

+ +
+
<static> bStateSave :boolean

State saving enablement flag. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

+ +
+
+
+
+ +
+ + + + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/docs/DataTable.models.oSettings.oLanguage.html b/docroot/sites/all/libraries/datatables/docs/DataTable.models.oSettings.oLanguage.html new file mode 100644 index 00000000..343d3534 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/docs/DataTable.models.oSettings.oLanguage.html @@ -0,0 +1,105 @@ + + + + + Namespace: oLanguage - documentation + + + + + + + + + +
+ + +
+

Namespace: oLanguage

+

Ancestry: DataTable » .models » .oSettings. » oLanguage

+
+ DataTables v1.9.4 documentation +
+
+ + + +
+

Navigation

+ +
+ + Hiding private elements + (toggle) + +
+
+ + Showing extended elements + (toggle) + +
+
+ +
+ +
+ +

Language information for the table.

+ +
+

Extends

+ + +
+ + +
+ +

Summary

+ +

Properties - static

+ +
+
<static> fnInfoCallback :function

Information callback function. See +DataTable.defaults.fnInfoCallback

+
+
+ + + + +
+ +

Details

+

Properties - static

+
+
<static> fnInfoCallback :function

Information callback function. See +DataTable.defaults.fnInfoCallback

+ +
+
+ +
+
+ +
+ + + + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/docs/DataTable.models.oSettings.oPreviousSearch.html b/docroot/sites/all/libraries/datatables/docs/DataTable.models.oSettings.oPreviousSearch.html new file mode 100644 index 00000000..513f0a75 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/docs/DataTable.models.oSettings.oPreviousSearch.html @@ -0,0 +1,82 @@ + + + + + Namespace: oPreviousSearch - documentation + + + + + + + + + +
+ + +
+

Namespace: oPreviousSearch

+

Ancestry: DataTable » .models » .oSettings. » oPreviousSearch

+
+ DataTables v1.9.4 documentation +
+
+ + + +
+

Navigation

+
    +
  • Overview
  • +
  • Summary
    Classes (0)Namespaces (0)
    Properties (0)Static properties (0)
    Methods (0)Static methods (0)
    Events (0)
  • Details
    Properties (0)Static properties (0)
    Methods (0)Static methods (0)
    Events (0)
+
+ + Hiding private elements + (toggle) + +
+
+ + Showing extended elements + (toggle) + +
+
+ +
+ +
+ +

Store the applied global search information in case we want to force a +research or compare the old search to a new one. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

+ +
+

Extends

+ + +
+ + + + + +
+ + + + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/docs/DataTable.models.oSettings.oScroll.html b/docroot/sites/all/libraries/datatables/docs/DataTable.models.oSettings.oScroll.html new file mode 100644 index 00000000..fbc14d4d --- /dev/null +++ b/docroot/sites/all/libraries/datatables/docs/DataTable.models.oSettings.oScroll.html @@ -0,0 +1,167 @@ + + + + + Namespace: oScroll - documentation + + + + + + + + + +
+ + +
+

Namespace: oScroll

+

Ancestry: DataTable » .models » .oSettings. » oScroll

+
+ DataTables v1.9.4 documentation +
+
+ + + +
+

Navigation

+ +
+ + Hiding private elements + (toggle) + +
+
+ + Showing extended elements + (toggle) + +
+
+ +
+ +
+ +

Scrolling settings for a table.

+ +
+ +
+ + +
+ +

Summary

+ +

Properties - static

+ +
+
<static> bAutoCss :boolean

Indicate if DataTables should be allowed to set the padding / margin +etc for the scrolling header elements or not. Typically you will want +this. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

<static> bCollapse :boolean

When the table is shorter in height than sScrollY, collapse the +table container down to the height of the table (when true). +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

<static> bInfinite :boolean

Infinite scrolling enablement flag. Now deprecated in favour of +using the Scroller plug-in. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

<static> iBarWidth :int

Width of the scrollbar for the web-browser's platform. Calculated +during table initialisation.

<static> iLoadGap :int

Space (in pixels) between the bottom of the scrolling container and +the bottom of the scrolling viewport before the next page is loaded +when using infinite scrolling. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

<static> sX :string

Viewport width for horizontal scrolling. Horizontal scrolling is +disabled if an empty string. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

<static> sXInner :string

Width to expand the table to when using x-scrolling. Typically you +should not need to use this. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

<static> sY :string

Viewport height for vertical scrolling. Vertical scrolling is disabled +if an empty string. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

+
+
+ + + + +
+ +

Details

+

Properties - static

+
+
<static> bAutoCss :boolean

Indicate if DataTables should be allowed to set the padding / margin +etc for the scrolling header elements or not. Typically you will want +this. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

+ +
+
<static> bCollapse :boolean

When the table is shorter in height than sScrollY, collapse the +table container down to the height of the table (when true). +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

+ +
+
<static> bInfinite :boolean

Infinite scrolling enablement flag. Now deprecated in favour of +using the Scroller plug-in. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

+ +
+
<static> iBarWidth :int

Width of the scrollbar for the web-browser's platform. Calculated +during table initialisation.

+ +
+
<static> iLoadGap :int

Space (in pixels) between the bottom of the scrolling container and +the bottom of the scrolling viewport before the next page is loaded +when using infinite scrolling. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

+ +
+
<static> sX :string

Viewport width for horizontal scrolling. Horizontal scrolling is +disabled if an empty string. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

+ +
+
<static> sXInner :string

Width to expand the table to when using x-scrolling. Typically you +should not need to use this. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

+
Deprecated
Yes
+
+
<static> sY :string

Viewport height for vertical scrolling. Vertical scrolling is disabled +if an empty string. +Note that this parameter will be set by the initialisation routine. To +set a default use DataTable.defaults.

+ +
+
+
+
+ +
+ + + + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/docs/index.html b/docroot/sites/all/libraries/datatables/docs/index.html new file mode 100644 index 00000000..d19a5ddf --- /dev/null +++ b/docroot/sites/all/libraries/datatables/docs/index.html @@ -0,0 +1,48 @@ + + + + + Table of Contents - documentation + + + + + + + + + +
+ +
+
+ +
+

Table of Contents

+
+
DataTable

DataTables is a plug-in for the jQuery Javascript library. It is a +highly flexible tool, based upon the foundations of progressive +enhancement, which will add advanced interaction controls to any +HTML table. For a full list of features please refer to +DataTables.net.

+ +

Note that the DataTable object is not a global variable but is +aliased to jQuery.fn.DataTable and jQuery.fn.dataTable through which +it may be accessed.

+
+
+
+ + + + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/docs/media/css/doc.css b/docroot/sites/all/libraries/datatables/docs/media/css/doc.css new file mode 100644 index 00000000..a2393293 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/docs/media/css/doc.css @@ -0,0 +1,393 @@ +/* +Copyright (c) 2006, Yahoo! Inc. All rights reserved. +Code licensed under the BSD License: +http://developer.yahoo.net/yui/license.txt +version: 0.12.0 +*/ +body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea,p,blockquote,th,td{margin:0;padding:0;} +table{border-collapse:collapse;border-spacing:0;} +fieldset,img{border:0;} +address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;} +ol,ul {list-style:none;} +caption,th {text-align:left;} +h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;} +q:before,q:after{content:'';} +abbr,acronym {border:0;} + + +html, body { + margin: 0; + padding: 0; + width: 100%; + font: 14px/1.45em "Lucida Grande", Verdana, Arial, Helvetica, sans-serif; + color: #111; +} + +div.fw_container { + width: 980px; + padding-top: 2em; + margin: 0 auto; +} + +div.fw_header { + position: relative; +} + +div.fw_content { + padding-top: 2em; +} + +div.fw_footer { + padding-top: 4em; + font-size: 75%; + text-align: center; +} + + + + +.type-attr .type-signature { + background-color: #ccc; + color: white; + border-radius: 3px; + display: inline-block; + padding: 0 3px; + font-size: 0.9em; +} + +.type-attr { + float: right; + color: #999; +} + +.type-name { + font-weight: bold; +} + +.type-sig { + color: #999; +} + +.type-param { + color: #D32929; +} + +.type-return { + color: #FF8080; +} + +.type-brace { + color: #111; +} + +.example-code { + margin-left: 30px; +} +.example-code td.code { + border-top: 1px solid #4E6CA3 !important; +} + +.type-augmented { + position: absolute; + left: 8px; + top: 0; +} + +dt, dd { + padding: 0.4em 10px; +} + +dt { + padding-bottom: 0 !important; +} + +dd { + position: relative; + padding-top: 0 !important; + padding-left: 3em; +} + +dt.even, dd.even { + background-color: white; +} + +dt.odd, dd.odd { + background-color: #F2F2F2; +} + +div.doc_overview dd, div.doc_overview dt { + padding-left: 0 !important; +} + + + +.right_border div { + width: 20px; + padding: 2px 0.5em 2px 1em; + text-align: right; +} +.right_border { + border-right: 3px solid #4E6CA3; +} +.bottom_border { + border-bottom: 1px solid #4E6CA3; +} + + +a { + text-decoration: none; + color: #4E6CA3; +} + +a:hover { + text-decoration: underline; + cursor: pointer; + *cursor: hand; +} + +div.fw_content ul { + list-style-image: url('../images/arrow.png'); + padding: 0 0 0 2em; +} + +/* +h2 { + font-size: 1.4em; + margin-top: 2em; + border-bottom: 3px solid #829ac6; + padding-left: 5px; +} + +h3 { + font-size: 1.2em; + margin-top: 1em; + border-bottom: 1px solid #A4B5D5; + padding-left: 5px; +} +*/ + +h1 { + font-size: 2em; +} + +h2 { + font-size: 1.6em; + padding-top: 5px; +} + +h2.ancestors { + font-size: 14px; + margin: 0; +} + +h3 { + font-size: 1.3em; + padding-top: 5px; + margin-bottom: 5px; +} + +h5 { + padding-top: 6px; + font-weight: bold; + font-size: 0.9em; + border-bottom: 1px solid #cad4e6; + margin-bottom: 1em; +} + +div.doc_summary, div.doc_details { + margin-top: 2em; + clear: both; +} + +div.doc_group { + margin-top: 1em; + border-top: 1px solid #A4B5D5; + border-left: 1px solid #A4B5D5; + padding-left: 10px; +} + +div.extended { + margin-left: 30px; +} + +table.params { + margin-left: 30px; + width: 97%; +} + +table.params th, +table.params td { + padding: 3px; +} + +tr.odd { + background-color: white; +} + +tr.even { + background-color: #F8F8F8; +} + +th.name, +td.name { + padding-left: 13px; +} + +td.number { + background-color: white; + color: #5C5C5C; +} + +dd.odd td.number { + background-color: #F2F2F2; +} + +p { + margin: 1em 0; +} + +p:first-child { + margin-top: 0; +} + +p:last-child { + margin-bottom: 0; +} + +p.returns { + margin-left: 5%; +} + +div.page-info { + position: absolute; + top: 0; + right: 0; +} + + +.private { + display: none; +} + + +code { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + padding: 2px 4px !important; + white-space: pre; + font-size: 0.9em; + + color: #D14; + background-color: #F7F7F9; + + border: 1px solid #E1E1E8; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +pre { + background-color: #f8f8f8; + border: 1px solid #ccc; + border-radius: 3px; + padding: 6px 10px; +} + +pre>code { + background-color: transparent; + border: none; + color: #111; +} + +strong { + font-weight: bold; +} + +em { + font-style: italic; +} + +ol { + list-style-type: decimal; + list-style-position: outside; + padding-left: 30px; +} + + + +div.fw_nav { + position: fixed; + top: 25px; + right: 30px; + width: 250px; + border: 1px solid #A4B5D5; + background-color: white; + padding: 10px; + z-index: 1001; + font-size: 12px; + overflow: hidden; +} + +div.fw_nav h2 { + margin: -10px 0 10px -10px; + width: 250px; + padding: 5px 10px; + background-color: #A4B5D5; + font-size: 12px; + cursor: pointer; + *cursor: hand; +} + +div.fw_nav ul>li>div { + padding: 0 0 0 1em; +} + +div.nav_blocker { + float: right; +} + +div.fw_nav td { + color: #999; +} + +div.fw_nav li { + margin-bottom: 5px; +} + +div.fw_nav li>a { + font-weight: bold; +} + + + + + + + +.css_clear { + clear: both; + height: 0; + line-height: 0; + visibility: hidden; +} + +.css_right { + text-align: right; +} + +.css_center { + text-align: center; +} + +.css_spacing { + margin-top: 1.5em; +} + +.css_small { + font-size: 75%; + line-height: 1.45em; +} + +.css_vsmall { + font-size: 65%; + line-height: 1.45em; +} diff --git a/docroot/sites/all/libraries/datatables/docs/media/css/shCore.css b/docroot/sites/all/libraries/datatables/docs/media/css/shCore.css new file mode 100644 index 00000000..b0c45207 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/docs/media/css/shCore.css @@ -0,0 +1,226 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +.syntaxhighlighter a, +.syntaxhighlighter div, +.syntaxhighlighter code, +.syntaxhighlighter table, +.syntaxhighlighter table td, +.syntaxhighlighter table tr, +.syntaxhighlighter table tbody, +.syntaxhighlighter table thead, +.syntaxhighlighter table caption, +.syntaxhighlighter textarea { + -moz-border-radius: 0 0 0 0 !important; + -webkit-border-radius: 0 0 0 0 !important; + background: none !important; + border: 0 !important; + bottom: auto !important; + float: none !important; + height: auto !important; + left: auto !important; + line-height: 1.1em !important; + margin: 0 !important; + outline: 0 !important; + overflow: visible !important; + padding: 0 !important; + position: static !important; + right: auto !important; + text-align: left !important; + top: auto !important; + vertical-align: baseline !important; + width: auto !important; + box-sizing: content-box !important; + font-family: "Consolas","Monaco","Bitstream Vera Sans Mono","Courier New",Courier,monospace !important; + font-weight: normal !important; + font-style: normal !important; + font-size: 1em !important; + min-height: inherit !important; + min-height: auto !important; +} + +.syntaxhighlighter { + width: 100% !important; + margin: 1em 0 1em 0 !important; + position: relative !important; + overflow: auto !important; + font-size: 1em !important; +} +.syntaxhighlighter.source { + overflow: hidden !important; +} +.syntaxhighlighter .bold { + font-weight: bold !important; +} +.syntaxhighlighter .italic { + font-style: italic !important; +} +.syntaxhighlighter .line { + white-space: pre !important; +} +.syntaxhighlighter table { + width: 100% !important; +} +.syntaxhighlighter table caption { + text-align: left !important; + padding: .5em 0 0.5em 1em !important; +} +.syntaxhighlighter table td.code { + width: 100% !important; +} +.syntaxhighlighter table td.code .container { + position: relative !important; +} +.syntaxhighlighter table td.code .container textarea { + box-sizing: border-box !important; + position: absolute !important; + left: 0 !important; + top: 0 !important; + width: 100% !important; + height: 100% !important; + border: none !important; + background: white !important; + padding-left: 1em !important; + overflow: hidden !important; + white-space: pre !important; +} +.syntaxhighlighter table td.gutter .line { + text-align: right !important; + padding: 2px 0.5em 2px 1em !important; +} +.syntaxhighlighter table td.code .line { + padding: 2px 1em !important; +} +.syntaxhighlighter.nogutter td.code .container textarea, .syntaxhighlighter.nogutter td.code .line { + padding-left: 0em !important; +} +.syntaxhighlighter.show { + display: block !important; +} +.syntaxhighlighter.collapsed table { + display: none !important; +} +.syntaxhighlighter.collapsed .toolbar { + padding: 0.1em 0.8em 0em 0.8em !important; + font-size: 1em !important; + position: static !important; + width: auto !important; + height: auto !important; +} +.syntaxhighlighter.collapsed .toolbar span { + display: inline !important; + margin-right: 1em !important; +} +.syntaxhighlighter.collapsed .toolbar span a { + padding: 0 !important; + display: none !important; +} +.syntaxhighlighter.collapsed .toolbar span a.expandSource { + display: inline !important; +} +.syntaxhighlighter .toolbar { + position: absolute !important; + right: 1px !important; + top: 1px !important; + width: 11px !important; + height: 11px !important; + font-size: 10px !important; + z-index: 10 !important; +} +.syntaxhighlighter .toolbar span.title { + display: inline !important; +} +.syntaxhighlighter .toolbar a { + display: block !important; + text-align: center !important; + text-decoration: none !important; + padding-top: 1px !important; +} +.syntaxhighlighter .toolbar a.expandSource { + display: none !important; +} +.syntaxhighlighter.ie { + font-size: .9em !important; + padding: 1px 0 1px 0 !important; +} +.syntaxhighlighter.ie .toolbar { + line-height: 8px !important; +} +.syntaxhighlighter.ie .toolbar a { + padding-top: 0px !important; +} +.syntaxhighlighter.printing .line.alt1 .content, +.syntaxhighlighter.printing .line.alt2 .content, +.syntaxhighlighter.printing .line.highlighted .number, +.syntaxhighlighter.printing .line.highlighted.alt1 .content, +.syntaxhighlighter.printing .line.highlighted.alt2 .content { + background: none !important; +} +.syntaxhighlighter.printing .line .number { + color: #bbbbbb !important; +} +.syntaxhighlighter.printing .line .content { + color: black !important; +} +.syntaxhighlighter.printing .toolbar { + display: none !important; +} +.syntaxhighlighter.printing a { + text-decoration: none !important; +} +.syntaxhighlighter.printing .plain, .syntaxhighlighter.printing .plain a { + color: black !important; +} +.syntaxhighlighter.printing .comments, .syntaxhighlighter.printing .comments a { + color: #008200 !important; +} +.syntaxhighlighter.printing .string, .syntaxhighlighter.printing .string a { + color: blue !important; +} +.syntaxhighlighter.printing .keyword { + color: #006699 !important; + font-weight: bold !important; +} +.syntaxhighlighter.printing .preprocessor { + color: gray !important; +} +.syntaxhighlighter.printing .variable { + color: #aa7700 !important; +} +.syntaxhighlighter.printing .value { + color: #009900 !important; +} +.syntaxhighlighter.printing .functions { + color: #ff1493 !important; +} +.syntaxhighlighter.printing .constants { + color: #0066cc !important; +} +.syntaxhighlighter.printing .script { + font-weight: bold !important; +} +.syntaxhighlighter.printing .color1, .syntaxhighlighter.printing .color1 a { + color: gray !important; +} +.syntaxhighlighter.printing .color2, .syntaxhighlighter.printing .color2 a { + color: #ff1493 !important; +} +.syntaxhighlighter.printing .color3, .syntaxhighlighter.printing .color3 a { + color: red !important; +} +.syntaxhighlighter.printing .break, .syntaxhighlighter.printing .break a { + color: black !important; +} diff --git a/docroot/sites/all/libraries/datatables/docs/media/css/shThemeDataTables.css b/docroot/sites/all/libraries/datatables/docs/media/css/shThemeDataTables.css new file mode 100644 index 00000000..7e9790ad --- /dev/null +++ b/docroot/sites/all/libraries/datatables/docs/media/css/shThemeDataTables.css @@ -0,0 +1,128 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +.syntaxhighlighter { + background-color: white !important; + font-size: 14px !important; + overflow: visible !important; +} +.syntaxhighlighter .line.alt1 { + background-color: white !important; +} +.syntaxhighlighter .line.alt2 { + background-color: #F8F8F8 !important; +} +.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 { + background-color: #e0e0e0 !important; +} +.syntaxhighlighter .line.highlighted.number { + color: black !important; +} +.syntaxhighlighter table caption { + color: black !important; +} +.syntaxhighlighter .gutter { +} +.syntaxhighlighter .gutter div { + color: #5C5C5C !important; + width: 20px !important; +} +.syntaxhighlighter .gutter .line.alt1, .syntaxhighlighter .gutter .line.alt2 { + background-color: white !important; +} +.odd .syntaxhighlighter .gutter .line.alt1, .odd .syntaxhighlighter .gutter .line.alt2 { + background-color: #F2F2F2 !important; +} +.syntaxhighlighter .gutter .line { + border-right: 3px solid #4E6CA3 !important; +} +.syntaxhighlighter .gutter .line.highlighted { + background-color: #4E6CA3 !important; + color: white !important; +} +.syntaxhighlighter.printing .line .content { + border: none !important; +} +.syntaxhighlighter.collapsed { + overflow: visible !important; +} +.syntaxhighlighter.collapsed .toolbar { + color: blue !important; + background: white !important; + border: 1px solid #4E6CA3 !important; +} +.syntaxhighlighter.collapsed .toolbar a { + color: blue !important; +} +.syntaxhighlighter.collapsed .toolbar a:hover { + color: red !important; +} +.syntaxhighlighter .toolbar { + color: white !important; + background: #4E6CA3 !important; + border: none !important; +} +.syntaxhighlighter .toolbar a { + color: white !important; +} +.syntaxhighlighter .toolbar a:hover { + color: black !important; +} +.syntaxhighlighter .plain, .syntaxhighlighter .plain a { + color: black !important; +} +.syntaxhighlighter .comments, .syntaxhighlighter .comments a { + color: #008200 !important; +} +.syntaxhighlighter .string, .syntaxhighlighter .string a { + color: blue !important; +} +.syntaxhighlighter .keyword { + color: #006699 !important; +} +.syntaxhighlighter .preprocessor { + color: gray !important; +} +.syntaxhighlighter .variable { + color: #aa7700 !important; +} +.syntaxhighlighter .value { + color: #009900 !important; +} +.syntaxhighlighter .functions { + color: #ff1493 !important; +} +.syntaxhighlighter .constants { + color: #0066cc !important; +} +.syntaxhighlighter .script { + font-weight: bold !important; + color: #006699 !important; + background-color: none !important; +} +.syntaxhighlighter .color1, .syntaxhighlighter .color1 a { + color: gray !important; +} +.syntaxhighlighter .color2, .syntaxhighlighter .color2 a { + color: #ff1493 !important; +} +.syntaxhighlighter .color3, .syntaxhighlighter .color3 a { + color: red !important; +} + +.syntaxhighlighter .keyword { + font-weight: bold !important; +} diff --git a/docroot/sites/all/libraries/datatables/docs/media/images/arrow.jpg b/docroot/sites/all/libraries/datatables/docs/media/images/arrow.jpg new file mode 100644 index 00000000..eba85eac Binary files /dev/null and b/docroot/sites/all/libraries/datatables/docs/media/images/arrow.jpg differ diff --git a/docroot/sites/all/libraries/datatables/docs/media/images/arrow.png b/docroot/sites/all/libraries/datatables/docs/media/images/arrow.png new file mode 100644 index 00000000..08dbbb14 Binary files /dev/null and b/docroot/sites/all/libraries/datatables/docs/media/images/arrow.png differ diff --git a/docroot/sites/all/libraries/datatables/docs/media/images/extended.png b/docroot/sites/all/libraries/datatables/docs/media/images/extended.png new file mode 100644 index 00000000..5dd01bfc Binary files /dev/null and b/docroot/sites/all/libraries/datatables/docs/media/images/extended.png differ diff --git a/docroot/sites/all/libraries/datatables/docs/media/js/doc.js b/docroot/sites/all/libraries/datatables/docs/media/js/doc.js new file mode 100644 index 00000000..932d7cfb --- /dev/null +++ b/docroot/sites/all/libraries/datatables/docs/media/js/doc.js @@ -0,0 +1,121 @@ + +(function() { + +var showingNav = true; + +$(document).ready( function () { + var jqNav = $('div.fw_nav'); + jqNav.css('right', ($(window).width() - $('div.fw_container').width()) /2); + + var n = $('div.nav_blocker')[0]; + n.style.height = $(jqNav).outerHeight()+"px"; + n.style.width = ($(jqNav).outerWidth()+20)+"px"; + + SyntaxHighlighter.highlight(); + + $('#private_toggle').click( function () { + if ( $('input[name=show_private]').val() == 0 ) { + $('input[name=show_private]').val( 1 ); + $('#private_label').html('Showing'); + $('.private').css('display', 'block'); + } else { + $('input[name=show_private]').val( 0 ); + $('#private_label').html('Hiding'); + $('.private').css('display', 'none'); + } + fnWriteCookie(); + return false; + } ); + + $('#extended_toggle').click( function () { + if ( $('input[name=show_extended]').val() == 0 ) { + $('input[name=show_extended]').val( 1 ); + $('#extended_label').html('Showing'); + $('.augmented').css('display', 'block'); + } else { + $('input[name=show_extended]').val( 0 ); + $('#extended_label').html('Hiding'); + $('.augmented').css('display', 'none'); + } + fnWriteCookie(); + return false; + } ); + + var savedHeight = $(jqNav).height(); + $('div.fw_nav h2').click( function () { + if ( showingNav ) { + $('div.fw_nav').animate( { + "height": 10, + "opacity": 0.3 + } ); + showingNav = false; + } else { + $('div.fw_nav').animate( { + "height": savedHeight, + "opacity": 1 + } ); + showingNav = true; + } + fnWriteCookie(); + } ); + + var cookie = fnReadCookie( 'SpryMedia_JSDoc' ); + if ( cookie != null ) { + var a = cookie.split('-'); + if ( a[0] == 1 ) { + $('#private_toggle').click(); + } + if ( a[1] == 0 ) { + $('#extended_toggle').click(); + } + if ( a[2] == 'false' ) { + $('div.fw_nav').css('height', 10).css('opacity', 0.3); + showingNav = false; + } + } +} ); + + +function fnWriteCookie() +{ + var sVal = + $('input[name=show_private]').val()+'-'+ + $('input[name=show_extended]').val()+'-'+ + showingNav; + + fnCreateCookie( 'SpryMedia_JSDoc', sVal ); +} + + +function fnCreateCookie( sName, sValue ) +{ + var iDays = 365; + var date = new Date(); + date.setTime( date.getTime()+(iDays*24*60*60*1000) ); + var sExpires = "; expires="+date.toGMTString(); + + document.cookie = sName+"="+sValue+sExpires+"; path=/"; +} + + +function fnReadCookie( sName ) +{ + var sNameEQ = sName + "="; + var sCookieContents = document.cookie.split(';'); + + for( var i=0 ; i)[^>]*$|#([\w\-]+)$)/, + + // Check if a string has a non-whitespace character in it + rnotwhite = /\S/, + + // Used for trimming whitespace + trimLeft = /^\s+/, + trimRight = /\s+$/, + + // Check for digits + rdigit = /\d/, + + // Match a standalone tag + rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, + + // JSON RegExp + rvalidchars = /^[\],:{}\s]*$/, + rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, + rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, + rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, + + // Useragent RegExp + rwebkit = /(webkit)[ \/]([\w.]+)/, + ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/, + rmsie = /(msie) ([\w.]+)/, + rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/, + + // Keep a UserAgent string for use with jQuery.browser + userAgent = navigator.userAgent, + + // For matching the engine and version of the browser + browserMatch, + + // Has the ready events already been bound? + readyBound = false, + + // The deferred used on DOM ready + readyList, + + // Promise methods + promiseMethods = "then done fail isResolved isRejected promise".split( " " ), + + // The ready event handler + DOMContentLoaded, + + // Save a reference to some core methods + toString = Object.prototype.toString, + hasOwn = Object.prototype.hasOwnProperty, + push = Array.prototype.push, + slice = Array.prototype.slice, + trim = String.prototype.trim, + indexOf = Array.prototype.indexOf, + + // [[Class]] -> type pairs + class2type = {}; + +jQuery.fn = jQuery.prototype = { + constructor: jQuery, + init: function( selector, context, rootjQuery ) { + var match, elem, ret, doc; + + // Handle $(""), $(null), or $(undefined) + if ( !selector ) { + return this; + } + + // Handle $(DOMElement) + if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + } + + // The body element only exists once, optimize finding it + if ( selector === "body" && !context && document.body ) { + this.context = document; + this[0] = document.body; + this.selector = "body"; + this.length = 1; + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + // Are we dealing with HTML string or an ID? + match = quickExpr.exec( selector ); + + // Verify a match, and that no context was specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + doc = (context ? context.ownerDocument || context : document); + + // If a single string is passed in and it's a single tag + // just do a createElement and skip the rest + ret = rsingleTag.exec( selector ); + + if ( ret ) { + if ( jQuery.isPlainObject( context ) ) { + selector = [ document.createElement( ret[1] ) ]; + jQuery.fn.attr.call( selector, context, true ); + + } else { + selector = [ doc.createElement( ret[1] ) ]; + } + + } else { + ret = jQuery.buildFragment( [ match[1] ], [ doc ] ); + selector = (ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment).childNodes; + } + + return jQuery.merge( this, selector ); + + // HANDLE: $("#id") + } else { + elem = document.getElementById( match[2] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return (context || rootjQuery).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return rootjQuery.ready( selector ); + } + + if (selector.selector !== undefined) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }, + + // Start with an empty selector + selector: "", + + // The current version of jQuery being used + jquery: "1.5.1", + + // The default length of a jQuery object is 0 + length: 0, + + // The number of elements contained in the matched element set + size: function() { + return this.length; + }, + + toArray: function() { + return slice.call( this, 0 ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num == null ? + + // Return a 'clean' array + this.toArray() : + + // Return just the object + ( num < 0 ? this[ this.length + num ] : this[ num ] ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems, name, selector ) { + // Build a new jQuery matched element set + var ret = this.constructor(); + + if ( jQuery.isArray( elems ) ) { + push.apply( ret, elems ); + + } else { + jQuery.merge( ret, elems ); + } + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + ret.context = this.context; + + if ( name === "find" ) { + ret.selector = this.selector + (this.selector ? " " : "") + selector; + } else if ( name ) { + ret.selector = this.selector + "." + name + "(" + selector + ")"; + } + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + ready: function( fn ) { + // Attach the listeners + jQuery.bindReady(); + + // Add the callback + readyList.done( fn ); + + return this; + }, + + eq: function( i ) { + return i === -1 ? + this.slice( i ) : + this.slice( i, +i + 1 ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ), + "slice", slice.call(arguments).join(",") ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: [].sort, + splice: [].splice +}; + +// Give the init function the jQuery prototype for later instantiation +jQuery.fn.init.prototype = jQuery.fn; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( length === i ) { + target = this; + --i; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + noConflict: function( deep ) { + window.$ = _$; + + if ( deep ) { + window.jQuery = _jQuery; + } + + return jQuery; + }, + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + // A third-party is pushing the ready event forwards + if ( wait === true ) { + jQuery.readyWait--; + } + + // Make sure that the DOM is not already loaded + if ( !jQuery.readyWait || (wait !== true && !jQuery.isReady) ) { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready, 1 ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.trigger ) { + jQuery( document ).trigger( "ready" ).unbind( "ready" ); + } + } + }, + + bindReady: function() { + if ( readyBound ) { + return; + } + + readyBound = true; + + // Catch cases where $(document).ready() is called after the + // browser event has already occurred. + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + return setTimeout( jQuery.ready, 1 ); + } + + // Mozilla, Opera and webkit nightlies currently support this event + if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", jQuery.ready, false ); + + // If IE event model is used + } else if ( document.attachEvent ) { + // ensure firing before onload, + // maybe late but safe also for iframes + document.attachEvent("onreadystatechange", DOMContentLoaded); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", jQuery.ready ); + + // If IE and not a frame + // continually check to see if the document is ready + var toplevel = false; + + try { + toplevel = window.frameElement == null; + } catch(e) {} + + if ( document.documentElement.doScroll && toplevel ) { + doScrollCheck(); + } + } + }, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + // A crude way of determining if an object is a window + isWindow: function( obj ) { + return obj && typeof obj === "object" && "setInterval" in obj; + }, + + isNaN: function( obj ) { + return obj == null || !rdigit.test( obj ) || isNaN( obj ); + }, + + type: function( obj ) { + return obj == null ? + String( obj ) : + class2type[ toString.call(obj) ] || "object"; + }, + + isPlainObject: function( obj ) { + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call(obj, "constructor") && + !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + + var key; + for ( key in obj ) {} + + return key === undefined || hasOwn.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + for ( var name in obj ) { + return false; + } + return true; + }, + + error: function( msg ) { + throw msg; + }, + + parseJSON: function( data ) { + if ( typeof data !== "string" || !data ) { + return null; + } + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim( data ); + + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if ( rvalidchars.test(data.replace(rvalidescape, "@") + .replace(rvalidtokens, "]") + .replace(rvalidbraces, "")) ) { + + // Try to use the native JSON parser first + return window.JSON && window.JSON.parse ? + window.JSON.parse( data ) : + (new Function("return " + data))(); + + } else { + jQuery.error( "Invalid JSON: " + data ); + } + }, + + // Cross-browser xml parsing + // (xml & tmp used internally) + parseXML: function( data , xml , tmp ) { + + if ( window.DOMParser ) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString( data , "text/xml" ); + } else { // IE + xml = new ActiveXObject( "Microsoft.XMLDOM" ); + xml.async = "false"; + xml.loadXML( data ); + } + + tmp = xml.documentElement; + + if ( ! tmp || ! tmp.nodeName || tmp.nodeName === "parsererror" ) { + jQuery.error( "Invalid XML: " + data ); + } + + return xml; + }, + + noop: function() {}, + + // Evalulates a script in a global context + globalEval: function( data ) { + if ( data && rnotwhite.test(data) ) { + // Inspired by code by Andrea Giammarchi + // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html + var head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement, + script = document.createElement( "script" ); + + if ( jQuery.support.scriptEval() ) { + script.appendChild( document.createTextNode( data ) ); + } else { + script.text = data; + } + + // Use insertBefore instead of appendChild to circumvent an IE6 bug. + // This arises when a base node is used (#2709). + head.insertBefore( script, head.firstChild ); + head.removeChild( script ); + } + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); + }, + + // args is for internal usage only + each: function( object, callback, args ) { + var name, i = 0, + length = object.length, + isObj = length === undefined || jQuery.isFunction(object); + + if ( args ) { + if ( isObj ) { + for ( name in object ) { + if ( callback.apply( object[ name ], args ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.apply( object[ i++ ], args ) === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isObj ) { + for ( name in object ) { + if ( callback.call( object[ name ], name, object[ name ] ) === false ) { + break; + } + } + } else { + for ( var value = object[0]; + i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {} + } + } + + return object; + }, + + // Use native String.trim function wherever possible + trim: trim ? + function( text ) { + return text == null ? + "" : + trim.call( text ); + } : + + // Otherwise use our own trimming functionality + function( text ) { + return text == null ? + "" : + text.toString().replace( trimLeft, "" ).replace( trimRight, "" ); + }, + + // results is for internal usage only + makeArray: function( array, results ) { + var ret = results || []; + + if ( array != null ) { + // The window, strings (and functions) also have 'length' + // The extra typeof function check is to prevent crashes + // in Safari 2 (See: #3039) + // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 + var type = jQuery.type(array); + + if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) { + push.call( ret, array ); + } else { + jQuery.merge( ret, array ); + } + } + + return ret; + }, + + inArray: function( elem, array ) { + if ( array.indexOf ) { + return array.indexOf( elem ); + } + + for ( var i = 0, length = array.length; i < length; i++ ) { + if ( array[ i ] === elem ) { + return i; + } + } + + return -1; + }, + + merge: function( first, second ) { + var i = first.length, + j = 0; + + if ( typeof second.length === "number" ) { + for ( var l = second.length; j < l; j++ ) { + first[ i++ ] = second[ j ]; + } + + } else { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, inv ) { + var ret = [], retVal; + inv = !!inv; + + // Go through the array, only saving the items + // that pass the validator function + for ( var i = 0, length = elems.length; i < length; i++ ) { + retVal = !!callback( elems[ i ], i ); + if ( inv !== retVal ) { + ret.push( elems[ i ] ); + } + } + + return ret; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var ret = [], value; + + // Go through the array, translating each of the items to their + // new value (or values). + for ( var i = 0, length = elems.length; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + + // Flatten any nested arrays + return ret.concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + proxy: function( fn, proxy, thisObject ) { + if ( arguments.length === 2 ) { + if ( typeof proxy === "string" ) { + thisObject = fn; + fn = thisObject[ proxy ]; + proxy = undefined; + + } else if ( proxy && !jQuery.isFunction( proxy ) ) { + thisObject = proxy; + proxy = undefined; + } + } + + if ( !proxy && fn ) { + proxy = function() { + return fn.apply( thisObject || this, arguments ); + }; + } + + // Set the guid of unique handler to the same of original handler, so it can be removed + if ( fn ) { + proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; + } + + // So proxy can be declared as an argument + return proxy; + }, + + // Mutifunctional method to get and set values to a collection + // The value/s can be optionally by executed if its a function + access: function( elems, key, value, exec, fn, pass ) { + var length = elems.length; + + // Setting many attributes + if ( typeof key === "object" ) { + for ( var k in key ) { + jQuery.access( elems, k, key[k], exec, fn, value ); + } + return elems; + } + + // Setting one attribute + if ( value !== undefined ) { + // Optionally, function values get executed if exec is true + exec = !pass && exec && jQuery.isFunction(value); + + for ( var i = 0; i < length; i++ ) { + fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); + } + + return elems; + } + + // Getting an attribute + return length ? fn( elems[0], key ) : undefined; + }, + + now: function() { + return (new Date()).getTime(); + }, + + // Create a simple deferred (one callbacks list) + _Deferred: function() { + var // callbacks list + callbacks = [], + // stored [ context , args ] + fired, + // to avoid firing when already doing so + firing, + // flag to know if the deferred has been cancelled + cancelled, + // the deferred itself + deferred = { + + // done( f1, f2, ...) + done: function() { + if ( !cancelled ) { + var args = arguments, + i, + length, + elem, + type, + _fired; + if ( fired ) { + _fired = fired; + fired = 0; + } + for ( i = 0, length = args.length; i < length; i++ ) { + elem = args[ i ]; + type = jQuery.type( elem ); + if ( type === "array" ) { + deferred.done.apply( deferred, elem ); + } else if ( type === "function" ) { + callbacks.push( elem ); + } + } + if ( _fired ) { + deferred.resolveWith( _fired[ 0 ], _fired[ 1 ] ); + } + } + return this; + }, + + // resolve with given context and args + resolveWith: function( context, args ) { + if ( !cancelled && !fired && !firing ) { + firing = 1; + try { + while( callbacks[ 0 ] ) { + callbacks.shift().apply( context, args ); + } + } + // We have to add a catch block for + // IE prior to 8 or else the finally + // block will never get executed + catch (e) { + throw e; + } + finally { + fired = [ context, args ]; + firing = 0; + } + } + return this; + }, + + // resolve with this as context and given arguments + resolve: function() { + deferred.resolveWith( jQuery.isFunction( this.promise ) ? this.promise() : this, arguments ); + return this; + }, + + // Has this deferred been resolved? + isResolved: function() { + return !!( firing || fired ); + }, + + // Cancel + cancel: function() { + cancelled = 1; + callbacks = []; + return this; + } + }; + + return deferred; + }, + + // Full fledged deferred (two callbacks list) + Deferred: function( func ) { + var deferred = jQuery._Deferred(), + failDeferred = jQuery._Deferred(), + promise; + // Add errorDeferred methods, then and promise + jQuery.extend( deferred, { + then: function( doneCallbacks, failCallbacks ) { + deferred.done( doneCallbacks ).fail( failCallbacks ); + return this; + }, + fail: failDeferred.done, + rejectWith: failDeferred.resolveWith, + reject: failDeferred.resolve, + isRejected: failDeferred.isResolved, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + if ( obj == null ) { + if ( promise ) { + return promise; + } + promise = obj = {}; + } + var i = promiseMethods.length; + while( i-- ) { + obj[ promiseMethods[i] ] = deferred[ promiseMethods[i] ]; + } + return obj; + } + } ); + // Make sure only one callback list will be used + deferred.done( failDeferred.cancel ).fail( deferred.cancel ); + // Unexpose cancel + delete deferred.cancel; + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + return deferred; + }, + + // Deferred helper + when: function( object ) { + var lastIndex = arguments.length, + deferred = lastIndex <= 1 && object && jQuery.isFunction( object.promise ) ? + object : + jQuery.Deferred(), + promise = deferred.promise(); + + if ( lastIndex > 1 ) { + var array = slice.call( arguments, 0 ), + count = lastIndex, + iCallback = function( index ) { + return function( value ) { + array[ index ] = arguments.length > 1 ? slice.call( arguments, 0 ) : value; + if ( !( --count ) ) { + deferred.resolveWith( promise, array ); + } + }; + }; + while( ( lastIndex-- ) ) { + object = array[ lastIndex ]; + if ( object && jQuery.isFunction( object.promise ) ) { + object.promise().then( iCallback(lastIndex), deferred.reject ); + } else { + --count; + } + } + if ( !count ) { + deferred.resolveWith( promise, array ); + } + } else if ( deferred !== object ) { + deferred.resolve( object ); + } + return promise; + }, + + // Use of jQuery.browser is frowned upon. + // More details: http://docs.jquery.com/Utilities/jQuery.browser + uaMatch: function( ua ) { + ua = ua.toLowerCase(); + + var match = rwebkit.exec( ua ) || + ropera.exec( ua ) || + rmsie.exec( ua ) || + ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) || + []; + + return { browser: match[1] || "", version: match[2] || "0" }; + }, + + sub: function() { + function jQuerySubclass( selector, context ) { + return new jQuerySubclass.fn.init( selector, context ); + } + jQuery.extend( true, jQuerySubclass, this ); + jQuerySubclass.superclass = this; + jQuerySubclass.fn = jQuerySubclass.prototype = this(); + jQuerySubclass.fn.constructor = jQuerySubclass; + jQuerySubclass.subclass = this.subclass; + jQuerySubclass.fn.init = function init( selector, context ) { + if ( context && context instanceof jQuery && !(context instanceof jQuerySubclass) ) { + context = jQuerySubclass(context); + } + + return jQuery.fn.init.call( this, selector, context, rootjQuerySubclass ); + }; + jQuerySubclass.fn.init.prototype = jQuerySubclass.fn; + var rootjQuerySubclass = jQuerySubclass(document); + return jQuerySubclass; + }, + + browser: {} +}); + +// Create readyList deferred +readyList = jQuery._Deferred(); + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +browserMatch = jQuery.uaMatch( userAgent ); +if ( browserMatch.browser ) { + jQuery.browser[ browserMatch.browser ] = true; + jQuery.browser.version = browserMatch.version; +} + +// Deprecated, use jQuery.browser.webkit instead +if ( jQuery.browser.webkit ) { + jQuery.browser.safari = true; +} + +if ( indexOf ) { + jQuery.inArray = function( elem, array ) { + return indexOf.call( array, elem ); + }; +} + +// IE doesn't match non-breaking spaces with \s +if ( rnotwhite.test( "\xA0" ) ) { + trimLeft = /^[\s\xA0]+/; + trimRight = /[\s\xA0]+$/; +} + +// All jQuery objects should point back to these +rootjQuery = jQuery(document); + +// Cleanup functions for the document ready method +if ( document.addEventListener ) { + DOMContentLoaded = function() { + document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + jQuery.ready(); + }; + +} else if ( document.attachEvent ) { + DOMContentLoaded = function() { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( document.readyState === "complete" ) { + document.detachEvent( "onreadystatechange", DOMContentLoaded ); + jQuery.ready(); + } + }; +} + +// The DOM ready check for Internet Explorer +function doScrollCheck() { + if ( jQuery.isReady ) { + return; + } + + try { + // If IE is used, use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + document.documentElement.doScroll("left"); + } catch(e) { + setTimeout( doScrollCheck, 1 ); + return; + } + + // and execute any waiting functions + jQuery.ready(); +} + +// Expose jQuery to the global object +return jQuery; + +})(); + + +(function() { + + jQuery.support = {}; + + var div = document.createElement("div"); + + div.style.display = "none"; + div.innerHTML = "
a"; + + var all = div.getElementsByTagName("*"), + a = div.getElementsByTagName("a")[0], + select = document.createElement("select"), + opt = select.appendChild( document.createElement("option") ), + input = div.getElementsByTagName("input")[0]; + + // Can't get basic test support + if ( !all || !all.length || !a ) { + return; + } + + jQuery.support = { + // IE strips leading whitespace when .innerHTML is used + leadingWhitespace: div.firstChild.nodeType === 3, + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + tbody: !div.getElementsByTagName("tbody").length, + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + htmlSerialize: !!div.getElementsByTagName("link").length, + + // Get the style information from getAttribute + // (IE uses .cssText insted) + style: /red/.test( a.getAttribute("style") ), + + // Make sure that URLs aren't manipulated + // (IE normalizes it by default) + hrefNormalized: a.getAttribute("href") === "/a", + + // Make sure that element opacity exists + // (IE uses filter instead) + // Use a regex to work around a WebKit issue. See #5145 + opacity: /^0.55$/.test( a.style.opacity ), + + // Verify style float existence + // (IE uses styleFloat instead of cssFloat) + cssFloat: !!a.style.cssFloat, + + // Make sure that if no value is specified for a checkbox + // that it defaults to "on". + // (WebKit defaults to "" instead) + checkOn: input.value === "on", + + // Make sure that a selected-by-default option has a working selected property. + // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) + optSelected: opt.selected, + + // Will be defined later + deleteExpando: true, + optDisabled: false, + checkClone: false, + noCloneEvent: true, + noCloneChecked: true, + boxModel: null, + inlineBlockNeedsLayout: false, + shrinkWrapBlocks: false, + reliableHiddenOffsets: true + }; + + input.checked = true; + jQuery.support.noCloneChecked = input.cloneNode( true ).checked; + + // Make sure that the options inside disabled selects aren't marked as disabled + // (WebKit marks them as diabled) + select.disabled = true; + jQuery.support.optDisabled = !opt.disabled; + + var _scriptEval = null; + jQuery.support.scriptEval = function() { + if ( _scriptEval === null ) { + var root = document.documentElement, + script = document.createElement("script"), + id = "script" + jQuery.now(); + + try { + script.appendChild( document.createTextNode( "window." + id + "=1;" ) ); + } catch(e) {} + + root.insertBefore( script, root.firstChild ); + + // Make sure that the execution of code works by injecting a script + // tag with appendChild/createTextNode + // (IE doesn't support this, fails, and uses .text instead) + if ( window[ id ] ) { + _scriptEval = true; + delete window[ id ]; + } else { + _scriptEval = false; + } + + root.removeChild( script ); + // release memory in IE + root = script = id = null; + } + + return _scriptEval; + }; + + // Test to see if it's possible to delete an expando from an element + // Fails in Internet Explorer + try { + delete div.test; + + } catch(e) { + jQuery.support.deleteExpando = false; + } + + if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { + div.attachEvent("onclick", function click() { + // Cloning a node shouldn't copy over any + // bound event handlers (IE does this) + jQuery.support.noCloneEvent = false; + div.detachEvent("onclick", click); + }); + div.cloneNode(true).fireEvent("onclick"); + } + + div = document.createElement("div"); + div.innerHTML = ""; + + var fragment = document.createDocumentFragment(); + fragment.appendChild( div.firstChild ); + + // WebKit doesn't clone checked state correctly in fragments + jQuery.support.checkClone = fragment.cloneNode(true).cloneNode(true).lastChild.checked; + + // Figure out if the W3C box model works as expected + // document.body must exist before we can do this + jQuery(function() { + var div = document.createElement("div"), + body = document.getElementsByTagName("body")[0]; + + // Frameset documents with no body should not run this code + if ( !body ) { + return; + } + + div.style.width = div.style.paddingLeft = "1px"; + body.appendChild( div ); + jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2; + + if ( "zoom" in div.style ) { + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + // (IE < 8 does this) + div.style.display = "inline"; + div.style.zoom = 1; + jQuery.support.inlineBlockNeedsLayout = div.offsetWidth === 2; + + // Check if elements with layout shrink-wrap their children + // (IE 6 does this) + div.style.display = ""; + div.innerHTML = "
"; + jQuery.support.shrinkWrapBlocks = div.offsetWidth !== 2; + } + + div.innerHTML = "
t
"; + var tds = div.getElementsByTagName("td"); + + // Check if table cells still have offsetWidth/Height when they are set + // to display:none and there are still other visible table cells in a + // table row; if so, offsetWidth/Height are not reliable for use when + // determining if an element has been hidden directly using + // display:none (it is still safe to use offsets if a parent element is + // hidden; don safety goggles and see bug #4512 for more information). + // (only IE 8 fails this test) + jQuery.support.reliableHiddenOffsets = tds[0].offsetHeight === 0; + + tds[0].style.display = ""; + tds[1].style.display = "none"; + + // Check if empty table cells still have offsetWidth/Height + // (IE < 8 fail this test) + jQuery.support.reliableHiddenOffsets = jQuery.support.reliableHiddenOffsets && tds[0].offsetHeight === 0; + div.innerHTML = ""; + + body.removeChild( div ).style.display = "none"; + div = tds = null; + }); + + // Technique from Juriy Zaytsev + // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/ + var eventSupported = function( eventName ) { + var el = document.createElement("div"); + eventName = "on" + eventName; + + // We only care about the case where non-standard event systems + // are used, namely in IE. Short-circuiting here helps us to + // avoid an eval call (in setAttribute) which can cause CSP + // to go haywire. See: https://developer.mozilla.org/en/Security/CSP + if ( !el.attachEvent ) { + return true; + } + + var isSupported = (eventName in el); + if ( !isSupported ) { + el.setAttribute(eventName, "return;"); + isSupported = typeof el[eventName] === "function"; + } + el = null; + + return isSupported; + }; + + jQuery.support.submitBubbles = eventSupported("submit"); + jQuery.support.changeBubbles = eventSupported("change"); + + // release memory in IE + div = all = a = null; +})(); + + + +var rbrace = /^(?:\{.*\}|\[.*\])$/; + +jQuery.extend({ + cache: {}, + + // Please use with caution + uuid: 0, + + // Unique for each copy of jQuery on the page + // Non-digits removed to match rinlinejQuery + expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ), + + // The following elements throw uncatchable exceptions if you + // attempt to add expando properties to them. + noData: { + "embed": true, + // Ban all objects except for Flash (which handle expandos) + "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", + "applet": true + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var internalKey = jQuery.expando, getByName = typeof name === "string", thisCache, + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ jQuery.expando ] : elem[ jQuery.expando ] && jQuery.expando; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || (pvt && id && !cache[ id ][ internalKey ])) && getByName && data === undefined ) { + return; + } + + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + elem[ jQuery.expando ] = id = ++jQuery.uuid; + } else { + id = jQuery.expando; + } + } + + if ( !cache[ id ] ) { + cache[ id ] = {}; + + // TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery + // metadata on plain JS objects when the object is serialized using + // JSON.stringify + if ( !isNode ) { + cache[ id ].toJSON = jQuery.noop; + } + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ][ internalKey ] = jQuery.extend(cache[ id ][ internalKey ], name); + } else { + cache[ id ] = jQuery.extend(cache[ id ], name); + } + } + + thisCache = cache[ id ]; + + // Internal jQuery data is stored in a separate object inside the object's data + // cache in order to avoid key collisions between internal data and user-defined + // data + if ( pvt ) { + if ( !thisCache[ internalKey ] ) { + thisCache[ internalKey ] = {}; + } + + thisCache = thisCache[ internalKey ]; + } + + if ( data !== undefined ) { + thisCache[ name ] = data; + } + + // TODO: This is a hack for 1.5 ONLY. It will be removed in 1.6. Users should + // not attempt to inspect the internal events object using jQuery.data, as this + // internal data object is undocumented and subject to change. + if ( name === "events" && !thisCache[name] ) { + return thisCache[ internalKey ] && thisCache[ internalKey ].events; + } + + return getByName ? thisCache[ name ] : thisCache; + }, + + removeData: function( elem, name, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var internalKey = jQuery.expando, isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + + // See jQuery.data for more information + id = isNode ? elem[ jQuery.expando ] : jQuery.expando; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + var thisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ]; + + if ( thisCache ) { + delete thisCache[ name ]; + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( !isEmptyDataObject(thisCache) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( pvt ) { + delete cache[ id ][ internalKey ]; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject(cache[ id ]) ) { + return; + } + } + + var internalCache = cache[ id ][ internalKey ]; + + // Browsers that fail expando deletion also refuse to delete expandos on + // the window, but it will allow it on all other JS objects; other browsers + // don't care + if ( jQuery.support.deleteExpando || cache != window ) { + delete cache[ id ]; + } else { + cache[ id ] = null; + } + + // We destroyed the entire user cache at once because it's faster than + // iterating through each key, but we need to continue to persist internal + // data if it existed + if ( internalCache ) { + cache[ id ] = {}; + // TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery + // metadata on plain JS objects when the object is serialized using + // JSON.stringify + if ( !isNode ) { + cache[ id ].toJSON = jQuery.noop; + } + + cache[ id ][ internalKey ] = internalCache; + + // Otherwise, we need to eliminate the expando on the node to avoid + // false lookups in the cache for entries that no longer exist + } else if ( isNode ) { + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( jQuery.support.deleteExpando ) { + delete elem[ jQuery.expando ]; + } else if ( elem.removeAttribute ) { + elem.removeAttribute( jQuery.expando ); + } else { + elem[ jQuery.expando ] = null; + } + } + }, + + // For internal use only. + _data: function( elem, name, data ) { + return jQuery.data( elem, name, data, true ); + }, + + // A method for determining if a DOM node can handle the data expando + acceptData: function( elem ) { + if ( elem.nodeName ) { + var match = jQuery.noData[ elem.nodeName.toLowerCase() ]; + + if ( match ) { + return !(match === true || elem.getAttribute("classid") !== match); + } + } + + return true; + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var data = null; + + if ( typeof key === "undefined" ) { + if ( this.length ) { + data = jQuery.data( this[0] ); + + if ( this[0].nodeType === 1 ) { + var attr = this[0].attributes, name; + for ( var i = 0, l = attr.length; i < l; i++ ) { + name = attr[i].name; + + if ( name.indexOf( "data-" ) === 0 ) { + name = name.substr( 5 ); + dataAttr( this[0], name, data[ name ] ); + } + } + } + } + + return data; + + } else if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + var parts = key.split("."); + parts[1] = parts[1] ? "." + parts[1] : ""; + + if ( value === undefined ) { + data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); + + // Try to fetch any internally stored data first + if ( data === undefined && this.length ) { + data = jQuery.data( this[0], key ); + data = dataAttr( this[0], key, data ); + } + + return data === undefined && parts[1] ? + this.data( parts[0] ) : + data; + + } else { + return this.each(function() { + var $this = jQuery( this ), + args = [ parts[0], value ]; + + $this.triggerHandler( "setData" + parts[1] + "!", args ); + jQuery.data( this, key, value ); + $this.triggerHandler( "changeData" + parts[1] + "!", args ); + }); + } + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + data = elem.getAttribute( "data-" + key ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + !jQuery.isNaN( data ) ? parseFloat( data ) : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// TODO: This is a hack for 1.5 ONLY to allow objects with a single toJSON +// property to be considered empty objects; this property always exists in +// order to make sure JSON.stringify does not expose internal metadata +function isEmptyDataObject( obj ) { + for ( var name in obj ) { + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} + + + + +jQuery.extend({ + queue: function( elem, type, data ) { + if ( !elem ) { + return; + } + + type = (type || "fx") + "queue"; + var q = jQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( !data ) { + return q || []; + } + + if ( !q || jQuery.isArray(data) ) { + q = jQuery._data( elem, type, jQuery.makeArray(data) ); + + } else { + q.push( data ); + } + + return q; + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + fn = queue.shift(); + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + } + + if ( fn ) { + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift("inprogress"); + } + + fn.call(elem, function() { + jQuery.dequeue(elem, type); + }); + } + + if ( !queue.length ) { + jQuery.removeData( elem, type + "queue", true ); + } + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + } + + if ( data === undefined ) { + return jQuery.queue( this[0], type ); + } + return this.each(function( i ) { + var queue = jQuery.queue( this, type, data ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + + // Based off of the plugin by Clint Helfers, with permission. + // http://blindsignals.com/index.php/2009/07/jquery-delay/ + delay: function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[time] || time : time; + type = type || "fx"; + + return this.queue( type, function() { + var elem = this; + setTimeout(function() { + jQuery.dequeue( elem, type ); + }, time ); + }); + }, + + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + } +}); + + + + +var rclass = /[\n\t\r]/g, + rspaces = /\s+/, + rreturn = /\r/g, + rspecialurl = /^(?:href|src|style)$/, + rtype = /^(?:button|input)$/i, + rfocusable = /^(?:button|input|object|select|textarea)$/i, + rclickable = /^a(?:rea)?$/i, + rradiocheck = /^(?:radio|checkbox)$/i; + +jQuery.props = { + "for": "htmlFor", + "class": "className", + readonly: "readOnly", + maxlength: "maxLength", + cellspacing: "cellSpacing", + rowspan: "rowSpan", + colspan: "colSpan", + tabindex: "tabIndex", + usemap: "useMap", + frameborder: "frameBorder" +}; + +jQuery.fn.extend({ + attr: function( name, value ) { + return jQuery.access( this, name, value, true, jQuery.attr ); + }, + + removeAttr: function( name, fn ) { + return this.each(function(){ + jQuery.attr( this, name, "" ); + if ( this.nodeType === 1 ) { + this.removeAttribute( name ); + } + }); + }, + + addClass: function( value ) { + if ( jQuery.isFunction(value) ) { + return this.each(function(i) { + var self = jQuery(this); + self.addClass( value.call(this, i, self.attr("class")) ); + }); + } + + if ( value && typeof value === "string" ) { + var classNames = (value || "").split( rspaces ); + + for ( var i = 0, l = this.length; i < l; i++ ) { + var elem = this[i]; + + if ( elem.nodeType === 1 ) { + if ( !elem.className ) { + elem.className = value; + + } else { + var className = " " + elem.className + " ", + setClass = elem.className; + + for ( var c = 0, cl = classNames.length; c < cl; c++ ) { + if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) { + setClass += " " + classNames[c]; + } + } + elem.className = jQuery.trim( setClass ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + if ( jQuery.isFunction(value) ) { + return this.each(function(i) { + var self = jQuery(this); + self.removeClass( value.call(this, i, self.attr("class")) ); + }); + } + + if ( (value && typeof value === "string") || value === undefined ) { + var classNames = (value || "").split( rspaces ); + + for ( var i = 0, l = this.length; i < l; i++ ) { + var elem = this[i]; + + if ( elem.nodeType === 1 && elem.className ) { + if ( value ) { + var className = (" " + elem.className + " ").replace(rclass, " "); + for ( var c = 0, cl = classNames.length; c < cl; c++ ) { + className = className.replace(" " + classNames[c] + " ", " "); + } + elem.className = jQuery.trim( className ); + + } else { + elem.className = ""; + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isBool = typeof stateVal === "boolean"; + + if ( jQuery.isFunction( value ) ) { + return this.each(function(i) { + var self = jQuery(this); + self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal ); + }); + } + + return this.each(function() { + if ( type === "string" ) { + // toggle individual class names + var className, + i = 0, + self = jQuery( this ), + state = stateVal, + classNames = value.split( rspaces ); + + while ( (className = classNames[ i++ ]) ) { + // check each className given, space seperated list + state = isBool ? state : !self.hasClass( className ); + self[ state ? "addClass" : "removeClass" ]( className ); + } + + } else if ( type === "undefined" || type === "boolean" ) { + if ( this.className ) { + // store className if set + jQuery._data( this, "__className__", this.className ); + } + + // toggle whole className + this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; + } + }); + }, + + hasClass: function( selector ) { + var className = " " + selector + " "; + for ( var i = 0, l = this.length; i < l; i++ ) { + if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { + return true; + } + } + + return false; + }, + + val: function( value ) { + if ( !arguments.length ) { + var elem = this[0]; + + if ( elem ) { + if ( jQuery.nodeName( elem, "option" ) ) { + // attributes.value is undefined in Blackberry 4.7 but + // uses .value. See #6932 + var val = elem.attributes.value; + return !val || val.specified ? elem.value : elem.text; + } + + // We need to handle select boxes special + if ( jQuery.nodeName( elem, "select" ) ) { + var index = elem.selectedIndex, + values = [], + options = elem.options, + one = elem.type === "select-one"; + + // Nothing was selected + if ( index < 0 ) { + return null; + } + + // Loop through all the selected options + for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { + var option = options[ i ]; + + // Don't return options that are disabled or in a disabled optgroup + if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) && + (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) { + + // Get the specific value for the option + value = jQuery(option).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + // Fixes Bug #2551 -- select.val() broken in IE after form.reset() + if ( one && !values.length && options.length ) { + return jQuery( options[ index ] ).val(); + } + + return values; + } + + // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified + if ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) { + return elem.getAttribute("value") === null ? "on" : elem.value; + } + + // Everything else, we just grab the value + return (elem.value || "").replace(rreturn, ""); + + } + + return undefined; + } + + var isFunction = jQuery.isFunction(value); + + return this.each(function(i) { + var self = jQuery(this), val = value; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call(this, i, self.val()); + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + } else if ( typeof val === "number" ) { + val += ""; + } else if ( jQuery.isArray(val) ) { + val = jQuery.map(val, function (value) { + return value == null ? "" : value + ""; + }); + } + + if ( jQuery.isArray(val) && rradiocheck.test( this.type ) ) { + this.checked = jQuery.inArray( self.val(), val ) >= 0; + + } else if ( jQuery.nodeName( this, "select" ) ) { + var values = jQuery.makeArray(val); + + jQuery( "option", this ).each(function() { + this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; + }); + + if ( !values.length ) { + this.selectedIndex = -1; + } + + } else { + this.value = val; + } + }); + } +}); + +jQuery.extend({ + attrFn: { + val: true, + css: true, + html: true, + text: true, + data: true, + width: true, + height: true, + offset: true + }, + + attr: function( elem, name, value, pass ) { + // don't get/set attributes on text, comment and attribute nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || elem.nodeType === 2 ) { + return undefined; + } + + if ( pass && name in jQuery.attrFn ) { + return jQuery(elem)[name](value); + } + + var notxml = elem.nodeType !== 1 || !jQuery.isXMLDoc( elem ), + // Whether we are setting (or getting) + set = value !== undefined; + + // Try to normalize/fix the name + name = notxml && jQuery.props[ name ] || name; + + // Only do all the following if this is a node (faster for style) + if ( elem.nodeType === 1 ) { + // These attributes require special treatment + var special = rspecialurl.test( name ); + + // Safari mis-reports the default selected property of an option + // Accessing the parent's selectedIndex property fixes it + if ( name === "selected" && !jQuery.support.optSelected ) { + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + // Make sure that it also works with optgroups, see #5701 + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + + // If applicable, access the attribute via the DOM 0 way + // 'in' checks fail in Blackberry 4.7 #6931 + if ( (name in elem || elem[ name ] !== undefined) && notxml && !special ) { + if ( set ) { + // We can't allow the type property to be changed (since it causes problems in IE) + if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) { + jQuery.error( "type property can't be changed" ); + } + + if ( value === null ) { + if ( elem.nodeType === 1 ) { + elem.removeAttribute( name ); + } + + } else { + elem[ name ] = value; + } + } + + // browsers index elements by id/name on forms, give priority to attributes. + if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) { + return elem.getAttributeNode( name ).nodeValue; + } + + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + if ( name === "tabIndex" ) { + var attributeNode = elem.getAttributeNode( "tabIndex" ); + + return attributeNode && attributeNode.specified ? + attributeNode.value : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + undefined; + } + + return elem[ name ]; + } + + if ( !jQuery.support.style && notxml && name === "style" ) { + if ( set ) { + elem.style.cssText = "" + value; + } + + return elem.style.cssText; + } + + if ( set ) { + // convert the value to a string (all browsers do this but IE) see #1070 + elem.setAttribute( name, "" + value ); + } + + // Ensure that missing attributes return undefined + // Blackberry 4.7 returns "" from getAttribute #6938 + if ( !elem.attributes[ name ] && (elem.hasAttribute && !elem.hasAttribute( name )) ) { + return undefined; + } + + var attr = !jQuery.support.hrefNormalized && notxml && special ? + // Some attributes require a special call on IE + elem.getAttribute( name, 2 ) : + elem.getAttribute( name ); + + // Non-existent attributes return null, we normalize to undefined + return attr === null ? undefined : attr; + } + // Handle everything which isn't a DOM element node + if ( set ) { + elem[ name ] = value; + } + return elem[ name ]; + } +}); + + + + +var rnamespaces = /\.(.*)$/, + rformElems = /^(?:textarea|input|select)$/i, + rperiod = /\./g, + rspace = / /g, + rescape = /[^\w\s.|`]/g, + fcleanup = function( nm ) { + return nm.replace(rescape, "\\$&"); + }; + +/* + * A number of helper functions used for managing events. + * Many of the ideas behind this code originated from + * Dean Edwards' addEvent library. + */ +jQuery.event = { + + // Bind an event to an element + // Original by Dean Edwards + add: function( elem, types, handler, data ) { + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // TODO :: Use a try/catch until it's safe to pull this out (likely 1.6) + // Minor release fix for bug #8018 + try { + // For whatever reason, IE has trouble passing the window object + // around, causing it to be cloned in the process + if ( jQuery.isWindow( elem ) && ( elem !== window && !elem.frameElement ) ) { + elem = window; + } + } + catch ( e ) {} + + if ( handler === false ) { + handler = returnFalse; + } else if ( !handler ) { + // Fixes bug #7229. Fix recommended by jdalton + return; + } + + var handleObjIn, handleObj; + + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + } + + // Make sure that the function being executed has a unique ID + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure + var elemData = jQuery._data( elem ); + + // If no elemData is found then we must be trying to bind to one of the + // banned noData elements + if ( !elemData ) { + return; + } + + var events = elemData.events, + eventHandle = elemData.handle; + + if ( !events ) { + elemData.events = events = {}; + } + + if ( !eventHandle ) { + elemData.handle = eventHandle = function() { + // Handle the second event of a trigger and when + // an event is called after a page has unloaded + return typeof jQuery !== "undefined" && !jQuery.event.triggered ? + jQuery.event.handle.apply( eventHandle.elem, arguments ) : + undefined; + }; + } + + // Add elem as a property of the handle function + // This is to prevent a memory leak with non-native events in IE. + eventHandle.elem = elem; + + // Handle multiple events separated by a space + // jQuery(...).bind("mouseover mouseout", fn); + types = types.split(" "); + + var type, i = 0, namespaces; + + while ( (type = types[ i++ ]) ) { + handleObj = handleObjIn ? + jQuery.extend({}, handleObjIn) : + { handler: handler, data: data }; + + // Namespaced event handlers + if ( type.indexOf(".") > -1 ) { + namespaces = type.split("."); + type = namespaces.shift(); + handleObj.namespace = namespaces.slice(0).sort().join("."); + + } else { + namespaces = []; + handleObj.namespace = ""; + } + + handleObj.type = type; + if ( !handleObj.guid ) { + handleObj.guid = handler.guid; + } + + // Get the current list of functions bound to this event + var handlers = events[ type ], + special = jQuery.event.special[ type ] || {}; + + // Init the event handler queue + if ( !handlers ) { + handlers = events[ type ] = []; + + // Check for a special event handler + // Only use addEventListener/attachEvent if the special + // events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add the function to the element's handler list + handlers.push( handleObj ); + + // Keep track of which events have been used, for global triggering + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + global: {}, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, pos ) { + // don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + if ( handler === false ) { + handler = returnFalse; + } + + var ret, type, fn, j, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType, + elemData = jQuery.hasData( elem ) && jQuery._data( elem ), + events = elemData && elemData.events; + + if ( !elemData || !events ) { + return; + } + + // types is actually an event object here + if ( types && types.type ) { + handler = types.handler; + types = types.type; + } + + // Unbind all events for the element + if ( !types || typeof types === "string" && types.charAt(0) === "." ) { + types = types || ""; + + for ( type in events ) { + jQuery.event.remove( elem, type + types ); + } + + return; + } + + // Handle multiple events separated by a space + // jQuery(...).unbind("mouseover mouseout", fn); + types = types.split(" "); + + while ( (type = types[ i++ ]) ) { + origType = type; + handleObj = null; + all = type.indexOf(".") < 0; + namespaces = []; + + if ( !all ) { + // Namespaced event handlers + namespaces = type.split("."); + type = namespaces.shift(); + + namespace = new RegExp("(^|\\.)" + + jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)"); + } + + eventType = events[ type ]; + + if ( !eventType ) { + continue; + } + + if ( !handler ) { + for ( j = 0; j < eventType.length; j++ ) { + handleObj = eventType[ j ]; + + if ( all || namespace.test( handleObj.namespace ) ) { + jQuery.event.remove( elem, origType, handleObj.handler, j ); + eventType.splice( j--, 1 ); + } + } + + continue; + } + + special = jQuery.event.special[ type ] || {}; + + for ( j = pos || 0; j < eventType.length; j++ ) { + handleObj = eventType[ j ]; + + if ( handler.guid === handleObj.guid ) { + // remove the given handler for the given type + if ( all || namespace.test( handleObj.namespace ) ) { + if ( pos == null ) { + eventType.splice( j--, 1 ); + } + + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + + if ( pos != null ) { + break; + } + } + } + + // remove generic event handler if no more handlers exist + if ( eventType.length === 0 || pos != null && eventType.length === 1 ) { + if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + ret = null; + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + var handle = elemData.handle; + if ( handle ) { + handle.elem = null; + } + + delete elemData.events; + delete elemData.handle; + + if ( jQuery.isEmptyObject( elemData ) ) { + jQuery.removeData( elem, undefined, true ); + } + } + }, + + // bubbling is internal + trigger: function( event, data, elem /*, bubbling */ ) { + // Event object or event type + var type = event.type || event, + bubbling = arguments[3]; + + if ( !bubbling ) { + event = typeof event === "object" ? + // jQuery.Event object + event[ jQuery.expando ] ? event : + // Object literal + jQuery.extend( jQuery.Event(type), event ) : + // Just the event type (string) + jQuery.Event(type); + + if ( type.indexOf("!") >= 0 ) { + event.type = type = type.slice(0, -1); + event.exclusive = true; + } + + // Handle a global trigger + if ( !elem ) { + // Don't bubble custom events when global (to avoid too much overhead) + event.stopPropagation(); + + // Only trigger if we've ever bound an event for it + if ( jQuery.event.global[ type ] ) { + // XXX This code smells terrible. event.js should not be directly + // inspecting the data cache + jQuery.each( jQuery.cache, function() { + // internalKey variable is just used to make it easier to find + // and potentially change this stuff later; currently it just + // points to jQuery.expando + var internalKey = jQuery.expando, + internalCache = this[ internalKey ]; + if ( internalCache && internalCache.events && internalCache.events[ type ] ) { + jQuery.event.trigger( event, data, internalCache.handle.elem ); + } + }); + } + } + + // Handle triggering a single element + + // don't do events on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) { + return undefined; + } + + // Clean up in case it is reused + event.result = undefined; + event.target = elem; + + // Clone the incoming data, if any + data = jQuery.makeArray( data ); + data.unshift( event ); + } + + event.currentTarget = elem; + + // Trigger the event, it is assumed that "handle" is a function + var handle = jQuery._data( elem, "handle" ); + + if ( handle ) { + handle.apply( elem, data ); + } + + var parent = elem.parentNode || elem.ownerDocument; + + // Trigger an inline bound script + try { + if ( !(elem && elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()]) ) { + if ( elem[ "on" + type ] && elem[ "on" + type ].apply( elem, data ) === false ) { + event.result = false; + event.preventDefault(); + } + } + + // prevent IE from throwing an error for some elements with some event types, see #3533 + } catch (inlineError) {} + + if ( !event.isPropagationStopped() && parent ) { + jQuery.event.trigger( event, data, parent, true ); + + } else if ( !event.isDefaultPrevented() ) { + var old, + target = event.target, + targetType = type.replace( rnamespaces, "" ), + isClick = jQuery.nodeName( target, "a" ) && targetType === "click", + special = jQuery.event.special[ targetType ] || {}; + + if ( (!special._default || special._default.call( elem, event ) === false) && + !isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) { + + try { + if ( target[ targetType ] ) { + // Make sure that we don't accidentally re-trigger the onFOO events + old = target[ "on" + targetType ]; + + if ( old ) { + target[ "on" + targetType ] = null; + } + + jQuery.event.triggered = true; + target[ targetType ](); + } + + // prevent IE from throwing an error for some elements with some event types, see #3533 + } catch (triggerError) {} + + if ( old ) { + target[ "on" + targetType ] = old; + } + + jQuery.event.triggered = false; + } + } + }, + + handle: function( event ) { + var all, handlers, namespaces, namespace_re, events, + namespace_sort = [], + args = jQuery.makeArray( arguments ); + + event = args[0] = jQuery.event.fix( event || window.event ); + event.currentTarget = this; + + // Namespaced event handlers + all = event.type.indexOf(".") < 0 && !event.exclusive; + + if ( !all ) { + namespaces = event.type.split("."); + event.type = namespaces.shift(); + namespace_sort = namespaces.slice(0).sort(); + namespace_re = new RegExp("(^|\\.)" + namespace_sort.join("\\.(?:.*\\.)?") + "(\\.|$)"); + } + + event.namespace = event.namespace || namespace_sort.join("."); + + events = jQuery._data(this, "events"); + + handlers = (events || {})[ event.type ]; + + if ( events && handlers ) { + // Clone the handlers to prevent manipulation + handlers = handlers.slice(0); + + for ( var j = 0, l = handlers.length; j < l; j++ ) { + var handleObj = handlers[ j ]; + + // Filter the functions by class + if ( all || namespace_re.test( handleObj.namespace ) ) { + // Pass in a reference to the handler function itself + // So that we can later remove it + event.handler = handleObj.handler; + event.data = handleObj.data; + event.handleObj = handleObj; + + var ret = handleObj.handler.apply( this, args ); + + if ( ret !== undefined ) { + event.result = ret; + if ( ret === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + + if ( event.isImmediatePropagationStopped() ) { + break; + } + } + } + } + + return event.result; + }, + + props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "), + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // store a copy of the original event object + // and "clone" to set read-only properties + var originalEvent = event; + event = jQuery.Event( originalEvent ); + + for ( var i = this.props.length, prop; i; ) { + prop = this.props[ --i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Fix target property, if necessary + if ( !event.target ) { + // Fixes #1925 where srcElement might not be defined either + event.target = event.srcElement || document; + } + + // check if target is a textnode (safari) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && event.fromElement ) { + event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement; + } + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && event.clientX != null ) { + var doc = document.documentElement, + body = document.body; + + event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0); + event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0); + } + + // Add which for key events + if ( event.which == null && (event.charCode != null || event.keyCode != null) ) { + event.which = event.charCode != null ? event.charCode : event.keyCode; + } + + // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs) + if ( !event.metaKey && event.ctrlKey ) { + event.metaKey = event.ctrlKey; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && event.button !== undefined ) { + event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) )); + } + + return event; + }, + + // Deprecated, use jQuery.guid instead + guid: 1E8, + + // Deprecated, use jQuery.proxy instead + proxy: jQuery.proxy, + + special: { + ready: { + // Make sure the ready event is setup + setup: jQuery.bindReady, + teardown: jQuery.noop + }, + + live: { + add: function( handleObj ) { + jQuery.event.add( this, + liveConvert( handleObj.origType, handleObj.selector ), + jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) ); + }, + + remove: function( handleObj ) { + jQuery.event.remove( this, liveConvert( handleObj.origType, handleObj.selector ), handleObj ); + } + }, + + beforeunload: { + setup: function( data, namespaces, eventHandle ) { + // We only want to do this special case on windows + if ( jQuery.isWindow( this ) ) { + this.onbeforeunload = eventHandle; + } + }, + + teardown: function( namespaces, eventHandle ) { + if ( this.onbeforeunload === eventHandle ) { + this.onbeforeunload = null; + } + } + } + } +}; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + if ( elem.detachEvent ) { + elem.detachEvent( "on" + type, handle ); + } + }; + +jQuery.Event = function( src ) { + // Allow instantiation without the 'new' keyword + if ( !this.preventDefault ) { + return new jQuery.Event( src ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = (src.defaultPrevented || src.returnValue === false || + src.getPreventDefault && src.getPreventDefault()) ? returnTrue : returnFalse; + + // Event type + } else { + this.type = src; + } + + // timeStamp is buggy for some events on Firefox(#3843) + // So we won't rely on the native value + this.timeStamp = jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +function returnFalse() { + return false; +} +function returnTrue() { + return true; +} + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + preventDefault: function() { + this.isDefaultPrevented = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + + // if preventDefault exists run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // otherwise set the returnValue property of the original event to false (IE) + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + this.isPropagationStopped = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + // if stopPropagation exists run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + // otherwise set the cancelBubble property of the original event to true (IE) + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + }, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse +}; + +// Checks if an event happened on an element within another element +// Used in jQuery.event.special.mouseenter and mouseleave handlers +var withinElement = function( event ) { + // Check if mouse(over|out) are still within the same parent element + var parent = event.relatedTarget; + + // Firefox sometimes assigns relatedTarget a XUL element + // which we cannot access the parentNode property of + try { + + // Chrome does something similar, the parentNode property + // can be accessed but is null. + if ( parent !== document && !parent.parentNode ) { + return; + } + // Traverse up the tree + while ( parent && parent !== this ) { + parent = parent.parentNode; + } + + if ( parent !== this ) { + // set the correct event type + event.type = event.data; + + // handle event if we actually just moused on to a non sub-element + jQuery.event.handle.apply( this, arguments ); + } + + // assuming we've left the element since we most likely mousedover a xul element + } catch(e) { } +}, + +// In case of event delegation, we only need to rename the event.type, +// liveHandler will take care of the rest. +delegate = function( event ) { + event.type = event.data; + jQuery.event.handle.apply( this, arguments ); +}; + +// Create mouseenter and mouseleave events +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + setup: function( data ) { + jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig ); + }, + teardown: function( data ) { + jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement ); + } + }; +}); + +// submit delegation +if ( !jQuery.support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function( data, namespaces ) { + if ( this.nodeName && this.nodeName.toLowerCase() !== "form" ) { + jQuery.event.add(this, "click.specialSubmit", function( e ) { + var elem = e.target, + type = elem.type; + + if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) { + trigger( "submit", this, arguments ); + } + }); + + jQuery.event.add(this, "keypress.specialSubmit", function( e ) { + var elem = e.target, + type = elem.type; + + if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) { + trigger( "submit", this, arguments ); + } + }); + + } else { + return false; + } + }, + + teardown: function( namespaces ) { + jQuery.event.remove( this, ".specialSubmit" ); + } + }; + +} + +// change delegation, happens here so we have bind. +if ( !jQuery.support.changeBubbles ) { + + var changeFilters, + + getVal = function( elem ) { + var type = elem.type, val = elem.value; + + if ( type === "radio" || type === "checkbox" ) { + val = elem.checked; + + } else if ( type === "select-multiple" ) { + val = elem.selectedIndex > -1 ? + jQuery.map( elem.options, function( elem ) { + return elem.selected; + }).join("-") : + ""; + + } else if ( elem.nodeName.toLowerCase() === "select" ) { + val = elem.selectedIndex; + } + + return val; + }, + + testChange = function testChange( e ) { + var elem = e.target, data, val; + + if ( !rformElems.test( elem.nodeName ) || elem.readOnly ) { + return; + } + + data = jQuery._data( elem, "_change_data" ); + val = getVal(elem); + + // the current data will be also retrieved by beforeactivate + if ( e.type !== "focusout" || elem.type !== "radio" ) { + jQuery._data( elem, "_change_data", val ); + } + + if ( data === undefined || val === data ) { + return; + } + + if ( data != null || val ) { + e.type = "change"; + e.liveFired = undefined; + jQuery.event.trigger( e, arguments[1], elem ); + } + }; + + jQuery.event.special.change = { + filters: { + focusout: testChange, + + beforedeactivate: testChange, + + click: function( e ) { + var elem = e.target, type = elem.type; + + if ( type === "radio" || type === "checkbox" || elem.nodeName.toLowerCase() === "select" ) { + testChange.call( this, e ); + } + }, + + // Change has to be called before submit + // Keydown will be called before keypress, which is used in submit-event delegation + keydown: function( e ) { + var elem = e.target, type = elem.type; + + if ( (e.keyCode === 13 && elem.nodeName.toLowerCase() !== "textarea") || + (e.keyCode === 32 && (type === "checkbox" || type === "radio")) || + type === "select-multiple" ) { + testChange.call( this, e ); + } + }, + + // Beforeactivate happens also before the previous element is blurred + // with this event you can't trigger a change event, but you can store + // information + beforeactivate: function( e ) { + var elem = e.target; + jQuery._data( elem, "_change_data", getVal(elem) ); + } + }, + + setup: function( data, namespaces ) { + if ( this.type === "file" ) { + return false; + } + + for ( var type in changeFilters ) { + jQuery.event.add( this, type + ".specialChange", changeFilters[type] ); + } + + return rformElems.test( this.nodeName ); + }, + + teardown: function( namespaces ) { + jQuery.event.remove( this, ".specialChange" ); + + return rformElems.test( this.nodeName ); + } + }; + + changeFilters = jQuery.event.special.change.filters; + + // Handle when the input is .focus()'d + changeFilters.focus = changeFilters.beforeactivate; +} + +function trigger( type, elem, args ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + // Don't pass args or remember liveFired; they apply to the donor event. + var event = jQuery.extend( {}, args[ 0 ] ); + event.type = type; + event.originalEvent = {}; + event.liveFired = undefined; + jQuery.event.handle.call( elem, event ); + if ( event.isDefaultPrevented() ) { + args[ 0 ].preventDefault(); + } +} + +// Create "bubbling" focus and blur events +if ( document.addEventListener ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + jQuery.event.special[ fix ] = { + setup: function() { + this.addEventListener( orig, handler, true ); + }, + teardown: function() { + this.removeEventListener( orig, handler, true ); + } + }; + + function handler( e ) { + e = jQuery.event.fix( e ); + e.type = fix; + return jQuery.event.handle.call( this, e ); + } + }); +} + +jQuery.each(["bind", "one"], function( i, name ) { + jQuery.fn[ name ] = function( type, data, fn ) { + // Handle object literals + if ( typeof type === "object" ) { + for ( var key in type ) { + this[ name ](key, data, type[key], fn); + } + return this; + } + + if ( jQuery.isFunction( data ) || data === false ) { + fn = data; + data = undefined; + } + + var handler = name === "one" ? jQuery.proxy( fn, function( event ) { + jQuery( this ).unbind( event, handler ); + return fn.apply( this, arguments ); + }) : fn; + + if ( type === "unload" && name !== "one" ) { + this.one( type, data, fn ); + + } else { + for ( var i = 0, l = this.length; i < l; i++ ) { + jQuery.event.add( this[i], type, handler, data ); + } + } + + return this; + }; +}); + +jQuery.fn.extend({ + unbind: function( type, fn ) { + // Handle object literals + if ( typeof type === "object" && !type.preventDefault ) { + for ( var key in type ) { + this.unbind(key, type[key]); + } + + } else { + for ( var i = 0, l = this.length; i < l; i++ ) { + jQuery.event.remove( this[i], type, fn ); + } + } + + return this; + }, + + delegate: function( selector, types, data, fn ) { + return this.live( types, data, fn, selector ); + }, + + undelegate: function( selector, types, fn ) { + if ( arguments.length === 0 ) { + return this.unbind( "live" ); + + } else { + return this.die( types, null, fn, selector ); + } + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + + triggerHandler: function( type, data ) { + if ( this[0] ) { + var event = jQuery.Event( type ); + event.preventDefault(); + event.stopPropagation(); + jQuery.event.trigger( event, data, this[0] ); + return event.result; + } + }, + + toggle: function( fn ) { + // Save reference to arguments for access in closure + var args = arguments, + i = 1; + + // link all the functions, so any of them can unbind this click handler + while ( i < args.length ) { + jQuery.proxy( fn, args[ i++ ] ); + } + + return this.click( jQuery.proxy( fn, function( event ) { + // Figure out which function to execute + var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i; + jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 ); + + // Make sure that clicks stop + event.preventDefault(); + + // and execute the function + return args[ lastToggle ].apply( this, arguments ) || false; + })); + }, + + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +}); + +var liveMap = { + focus: "focusin", + blur: "focusout", + mouseenter: "mouseover", + mouseleave: "mouseout" +}; + +jQuery.each(["live", "die"], function( i, name ) { + jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) { + var type, i = 0, match, namespaces, preType, + selector = origSelector || this.selector, + context = origSelector ? this : jQuery( this.context ); + + if ( typeof types === "object" && !types.preventDefault ) { + for ( var key in types ) { + context[ name ]( key, data, types[key], selector ); + } + + return this; + } + + if ( jQuery.isFunction( data ) ) { + fn = data; + data = undefined; + } + + types = (types || "").split(" "); + + while ( (type = types[ i++ ]) != null ) { + match = rnamespaces.exec( type ); + namespaces = ""; + + if ( match ) { + namespaces = match[0]; + type = type.replace( rnamespaces, "" ); + } + + if ( type === "hover" ) { + types.push( "mouseenter" + namespaces, "mouseleave" + namespaces ); + continue; + } + + preType = type; + + if ( type === "focus" || type === "blur" ) { + types.push( liveMap[ type ] + namespaces ); + type = type + namespaces; + + } else { + type = (liveMap[ type ] || type) + namespaces; + } + + if ( name === "live" ) { + // bind live handler + for ( var j = 0, l = context.length; j < l; j++ ) { + jQuery.event.add( context[j], "live." + liveConvert( type, selector ), + { data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } ); + } + + } else { + // unbind live handler + context.unbind( "live." + liveConvert( type, selector ), fn ); + } + } + + return this; + }; +}); + +function liveHandler( event ) { + var stop, maxLevel, related, match, handleObj, elem, j, i, l, data, close, namespace, ret, + elems = [], + selectors = [], + events = jQuery._data( this, "events" ); + + // Make sure we avoid non-left-click bubbling in Firefox (#3861) and disabled elements in IE (#6911) + if ( event.liveFired === this || !events || !events.live || event.target.disabled || event.button && event.type === "click" ) { + return; + } + + if ( event.namespace ) { + namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)"); + } + + event.liveFired = this; + + var live = events.live.slice(0); + + for ( j = 0; j < live.length; j++ ) { + handleObj = live[j]; + + if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) { + selectors.push( handleObj.selector ); + + } else { + live.splice( j--, 1 ); + } + } + + match = jQuery( event.target ).closest( selectors, event.currentTarget ); + + for ( i = 0, l = match.length; i < l; i++ ) { + close = match[i]; + + for ( j = 0; j < live.length; j++ ) { + handleObj = live[j]; + + if ( close.selector === handleObj.selector && (!namespace || namespace.test( handleObj.namespace )) && !close.elem.disabled ) { + elem = close.elem; + related = null; + + // Those two events require additional checking + if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) { + event.type = handleObj.preType; + related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0]; + } + + if ( !related || related !== elem ) { + elems.push({ elem: elem, handleObj: handleObj, level: close.level }); + } + } + } + } + + for ( i = 0, l = elems.length; i < l; i++ ) { + match = elems[i]; + + if ( maxLevel && match.level > maxLevel ) { + break; + } + + event.currentTarget = match.elem; + event.data = match.handleObj.data; + event.handleObj = match.handleObj; + + ret = match.handleObj.origHandler.apply( match.elem, arguments ); + + if ( ret === false || event.isPropagationStopped() ) { + maxLevel = match.level; + + if ( ret === false ) { + stop = false; + } + if ( event.isImmediatePropagationStopped() ) { + break; + } + } + } + + return stop; +} + +function liveConvert( type, selector ) { + return (type && type !== "*" ? type + "." : "") + selector.replace(rperiod, "`").replace(rspace, "&"); +} + +jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup error").split(" "), function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + if ( fn == null ) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.bind( name, data, fn ) : + this.trigger( name ); + }; + + if ( jQuery.attrFn ) { + jQuery.attrFn[ name ] = true; + } +}); + + +/*! + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){ + +var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, + done = 0, + toString = Object.prototype.toString, + hasDuplicate = false, + baseHasDuplicate = true, + rBackslash = /\\/g, + rNonWord = /\W/; + +// Here we check if the JavaScript engine is using some sort of +// optimization where it does not always call our comparision +// function. If that is the case, discard the hasDuplicate value. +// Thus far that includes Google Chrome. +[0, 0].sort(function() { + baseHasDuplicate = false; + return 0; +}); + +var Sizzle = function( selector, context, results, seed ) { + results = results || []; + context = context || document; + + var origContext = context; + + if ( context.nodeType !== 1 && context.nodeType !== 9 ) { + return []; + } + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + var m, set, checkSet, extra, ret, cur, pop, i, + prune = true, + contextXML = Sizzle.isXML( context ), + parts = [], + soFar = selector; + + // Reset the position of the chunker regexp (start from head) + do { + chunker.exec( "" ); + m = chunker.exec( soFar ); + + if ( m ) { + soFar = m[3]; + + parts.push( m[1] ); + + if ( m[2] ) { + extra = m[3]; + break; + } + } + } while ( m ); + + if ( parts.length > 1 && origPOS.exec( selector ) ) { + + if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { + set = posProcess( parts[0] + parts[1], context ); + + } else { + set = Expr.relative[ parts[0] ] ? + [ context ] : + Sizzle( parts.shift(), context ); + + while ( parts.length ) { + selector = parts.shift(); + + if ( Expr.relative[ selector ] ) { + selector += parts.shift(); + } + + set = posProcess( selector, set ); + } + } + + } else { + // Take a shortcut and set the context if the root selector is an ID + // (but not if it'll be faster if the inner selector is an ID) + if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && + Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { + + ret = Sizzle.find( parts.shift(), context, contextXML ); + context = ret.expr ? + Sizzle.filter( ret.expr, ret.set )[0] : + ret.set[0]; + } + + if ( context ) { + ret = seed ? + { expr: parts.pop(), set: makeArray(seed) } : + Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); + + set = ret.expr ? + Sizzle.filter( ret.expr, ret.set ) : + ret.set; + + if ( parts.length > 0 ) { + checkSet = makeArray( set ); + + } else { + prune = false; + } + + while ( parts.length ) { + cur = parts.pop(); + pop = cur; + + if ( !Expr.relative[ cur ] ) { + cur = ""; + } else { + pop = parts.pop(); + } + + if ( pop == null ) { + pop = context; + } + + Expr.relative[ cur ]( checkSet, pop, contextXML ); + } + + } else { + checkSet = parts = []; + } + } + + if ( !checkSet ) { + checkSet = set; + } + + if ( !checkSet ) { + Sizzle.error( cur || selector ); + } + + if ( toString.call(checkSet) === "[object Array]" ) { + if ( !prune ) { + results.push.apply( results, checkSet ); + + } else if ( context && context.nodeType === 1 ) { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) { + results.push( set[i] ); + } + } + + } else { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && checkSet[i].nodeType === 1 ) { + results.push( set[i] ); + } + } + } + + } else { + makeArray( checkSet, results ); + } + + if ( extra ) { + Sizzle( extra, origContext, results, seed ); + Sizzle.uniqueSort( results ); + } + + return results; +}; + +Sizzle.uniqueSort = function( results ) { + if ( sortOrder ) { + hasDuplicate = baseHasDuplicate; + results.sort( sortOrder ); + + if ( hasDuplicate ) { + for ( var i = 1; i < results.length; i++ ) { + if ( results[i] === results[ i - 1 ] ) { + results.splice( i--, 1 ); + } + } + } + } + + return results; +}; + +Sizzle.matches = function( expr, set ) { + return Sizzle( expr, null, null, set ); +}; + +Sizzle.matchesSelector = function( node, expr ) { + return Sizzle( expr, null, null, [node] ).length > 0; +}; + +Sizzle.find = function( expr, context, isXML ) { + var set; + + if ( !expr ) { + return []; + } + + for ( var i = 0, l = Expr.order.length; i < l; i++ ) { + var match, + type = Expr.order[i]; + + if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { + var left = match[1]; + match.splice( 1, 1 ); + + if ( left.substr( left.length - 1 ) !== "\\" ) { + match[1] = (match[1] || "").replace( rBackslash, "" ); + set = Expr.find[ type ]( match, context, isXML ); + + if ( set != null ) { + expr = expr.replace( Expr.match[ type ], "" ); + break; + } + } + } + } + + if ( !set ) { + set = typeof context.getElementsByTagName !== "undefined" ? + context.getElementsByTagName( "*" ) : + []; + } + + return { set: set, expr: expr }; +}; + +Sizzle.filter = function( expr, set, inplace, not ) { + var match, anyFound, + old = expr, + result = [], + curLoop = set, + isXMLFilter = set && set[0] && Sizzle.isXML( set[0] ); + + while ( expr && set.length ) { + for ( var type in Expr.filter ) { + if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { + var found, item, + filter = Expr.filter[ type ], + left = match[1]; + + anyFound = false; + + match.splice(1,1); + + if ( left.substr( left.length - 1 ) === "\\" ) { + continue; + } + + if ( curLoop === result ) { + result = []; + } + + if ( Expr.preFilter[ type ] ) { + match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); + + if ( !match ) { + anyFound = found = true; + + } else if ( match === true ) { + continue; + } + } + + if ( match ) { + for ( var i = 0; (item = curLoop[i]) != null; i++ ) { + if ( item ) { + found = filter( item, match, i, curLoop ); + var pass = not ^ !!found; + + if ( inplace && found != null ) { + if ( pass ) { + anyFound = true; + + } else { + curLoop[i] = false; + } + + } else if ( pass ) { + result.push( item ); + anyFound = true; + } + } + } + } + + if ( found !== undefined ) { + if ( !inplace ) { + curLoop = result; + } + + expr = expr.replace( Expr.match[ type ], "" ); + + if ( !anyFound ) { + return []; + } + + break; + } + } + } + + // Improper expression + if ( expr === old ) { + if ( anyFound == null ) { + Sizzle.error( expr ); + + } else { + break; + } + } + + old = expr; + } + + return curLoop; +}; + +Sizzle.error = function( msg ) { + throw "Syntax error, unrecognized expression: " + msg; +}; + +var Expr = Sizzle.selectors = { + order: [ "ID", "NAME", "TAG" ], + + match: { + ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/, + ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/, + TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/, + CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/, + POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/, + PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ + }, + + leftMatch: {}, + + attrMap: { + "class": "className", + "for": "htmlFor" + }, + + attrHandle: { + href: function( elem ) { + return elem.getAttribute( "href" ); + }, + type: function( elem ) { + return elem.getAttribute( "type" ); + } + }, + + relative: { + "+": function(checkSet, part){ + var isPartStr = typeof part === "string", + isTag = isPartStr && !rNonWord.test( part ), + isPartStrNotTag = isPartStr && !isTag; + + if ( isTag ) { + part = part.toLowerCase(); + } + + for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { + if ( (elem = checkSet[i]) ) { + while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} + + checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ? + elem || false : + elem === part; + } + } + + if ( isPartStrNotTag ) { + Sizzle.filter( part, checkSet, true ); + } + }, + + ">": function( checkSet, part ) { + var elem, + isPartStr = typeof part === "string", + i = 0, + l = checkSet.length; + + if ( isPartStr && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + + for ( ; i < l; i++ ) { + elem = checkSet[i]; + + if ( elem ) { + var parent = elem.parentNode; + checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false; + } + } + + } else { + for ( ; i < l; i++ ) { + elem = checkSet[i]; + + if ( elem ) { + checkSet[i] = isPartStr ? + elem.parentNode : + elem.parentNode === part; + } + } + + if ( isPartStr ) { + Sizzle.filter( part, checkSet, true ); + } + } + }, + + "": function(checkSet, part, isXML){ + var nodeCheck, + doneName = done++, + checkFn = dirCheck; + + if ( typeof part === "string" && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + nodeCheck = part; + checkFn = dirNodeCheck; + } + + checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML ); + }, + + "~": function( checkSet, part, isXML ) { + var nodeCheck, + doneName = done++, + checkFn = dirCheck; + + if ( typeof part === "string" && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + nodeCheck = part; + checkFn = dirNodeCheck; + } + + checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML ); + } + }, + + find: { + ID: function( match, context, isXML ) { + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [m] : []; + } + }, + + NAME: function( match, context ) { + if ( typeof context.getElementsByName !== "undefined" ) { + var ret = [], + results = context.getElementsByName( match[1] ); + + for ( var i = 0, l = results.length; i < l; i++ ) { + if ( results[i].getAttribute("name") === match[1] ) { + ret.push( results[i] ); + } + } + + return ret.length === 0 ? null : ret; + } + }, + + TAG: function( match, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( match[1] ); + } + } + }, + preFilter: { + CLASS: function( match, curLoop, inplace, result, not, isXML ) { + match = " " + match[1].replace( rBackslash, "" ) + " "; + + if ( isXML ) { + return match; + } + + for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { + if ( elem ) { + if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) { + if ( !inplace ) { + result.push( elem ); + } + + } else if ( inplace ) { + curLoop[i] = false; + } + } + } + + return false; + }, + + ID: function( match ) { + return match[1].replace( rBackslash, "" ); + }, + + TAG: function( match, curLoop ) { + return match[1].replace( rBackslash, "" ).toLowerCase(); + }, + + CHILD: function( match ) { + if ( match[1] === "nth" ) { + if ( !match[2] ) { + Sizzle.error( match[0] ); + } + + match[2] = match[2].replace(/^\+|\s*/g, ''); + + // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' + var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec( + match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" || + !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); + + // calculate the numbers (first)n+(last) including if they are negative + match[2] = (test[1] + (test[2] || 1)) - 0; + match[3] = test[3] - 0; + } + else if ( match[2] ) { + Sizzle.error( match[0] ); + } + + // TODO: Move to normal caching system + match[0] = done++; + + return match; + }, + + ATTR: function( match, curLoop, inplace, result, not, isXML ) { + var name = match[1] = match[1].replace( rBackslash, "" ); + + if ( !isXML && Expr.attrMap[name] ) { + match[1] = Expr.attrMap[name]; + } + + // Handle if an un-quoted value was used + match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" ); + + if ( match[2] === "~=" ) { + match[4] = " " + match[4] + " "; + } + + return match; + }, + + PSEUDO: function( match, curLoop, inplace, result, not ) { + if ( match[1] === "not" ) { + // If we're dealing with a complex expression, or a simple one + if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { + match[3] = Sizzle(match[3], null, null, curLoop); + + } else { + var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); + + if ( !inplace ) { + result.push.apply( result, ret ); + } + + return false; + } + + } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { + return true; + } + + return match; + }, + + POS: function( match ) { + match.unshift( true ); + + return match; + } + }, + + filters: { + enabled: function( elem ) { + return elem.disabled === false && elem.type !== "hidden"; + }, + + disabled: function( elem ) { + return elem.disabled === true; + }, + + checked: function( elem ) { + return elem.checked === true; + }, + + selected: function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + parent: function( elem ) { + return !!elem.firstChild; + }, + + empty: function( elem ) { + return !elem.firstChild; + }, + + has: function( elem, i, match ) { + return !!Sizzle( match[3], elem ).length; + }, + + header: function( elem ) { + return (/h\d/i).test( elem.nodeName ); + }, + + text: function( elem ) { + // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) + // use getAttribute instead to test this case + return "text" === elem.getAttribute( 'type' ); + }, + radio: function( elem ) { + return "radio" === elem.type; + }, + + checkbox: function( elem ) { + return "checkbox" === elem.type; + }, + + file: function( elem ) { + return "file" === elem.type; + }, + password: function( elem ) { + return "password" === elem.type; + }, + + submit: function( elem ) { + return "submit" === elem.type; + }, + + image: function( elem ) { + return "image" === elem.type; + }, + + reset: function( elem ) { + return "reset" === elem.type; + }, + + button: function( elem ) { + return "button" === elem.type || elem.nodeName.toLowerCase() === "button"; + }, + + input: function( elem ) { + return (/input|select|textarea|button/i).test( elem.nodeName ); + } + }, + setFilters: { + first: function( elem, i ) { + return i === 0; + }, + + last: function( elem, i, match, array ) { + return i === array.length - 1; + }, + + even: function( elem, i ) { + return i % 2 === 0; + }, + + odd: function( elem, i ) { + return i % 2 === 1; + }, + + lt: function( elem, i, match ) { + return i < match[3] - 0; + }, + + gt: function( elem, i, match ) { + return i > match[3] - 0; + }, + + nth: function( elem, i, match ) { + return match[3] - 0 === i; + }, + + eq: function( elem, i, match ) { + return match[3] - 0 === i; + } + }, + filter: { + PSEUDO: function( elem, match, i, array ) { + var name = match[1], + filter = Expr.filters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + + } else if ( name === "contains" ) { + return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0; + + } else if ( name === "not" ) { + var not = match[3]; + + for ( var j = 0, l = not.length; j < l; j++ ) { + if ( not[j] === elem ) { + return false; + } + } + + return true; + + } else { + Sizzle.error( name ); + } + }, + + CHILD: function( elem, match ) { + var type = match[1], + node = elem; + + switch ( type ) { + case "only": + case "first": + while ( (node = node.previousSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + if ( type === "first" ) { + return true; + } + + node = elem; + + case "last": + while ( (node = node.nextSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + return true; + + case "nth": + var first = match[2], + last = match[3]; + + if ( first === 1 && last === 0 ) { + return true; + } + + var doneName = match[0], + parent = elem.parentNode; + + if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) { + var count = 0; + + for ( node = parent.firstChild; node; node = node.nextSibling ) { + if ( node.nodeType === 1 ) { + node.nodeIndex = ++count; + } + } + + parent.sizcache = doneName; + } + + var diff = elem.nodeIndex - last; + + if ( first === 0 ) { + return diff === 0; + + } else { + return ( diff % first === 0 && diff / first >= 0 ); + } + } + }, + + ID: function( elem, match ) { + return elem.nodeType === 1 && elem.getAttribute("id") === match; + }, + + TAG: function( elem, match ) { + return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match; + }, + + CLASS: function( elem, match ) { + return (" " + (elem.className || elem.getAttribute("class")) + " ") + .indexOf( match ) > -1; + }, + + ATTR: function( elem, match ) { + var name = match[1], + result = Expr.attrHandle[ name ] ? + Expr.attrHandle[ name ]( elem ) : + elem[ name ] != null ? + elem[ name ] : + elem.getAttribute( name ), + value = result + "", + type = match[2], + check = match[4]; + + return result == null ? + type === "!=" : + type === "=" ? + value === check : + type === "*=" ? + value.indexOf(check) >= 0 : + type === "~=" ? + (" " + value + " ").indexOf(check) >= 0 : + !check ? + value && result !== false : + type === "!=" ? + value !== check : + type === "^=" ? + value.indexOf(check) === 0 : + type === "$=" ? + value.substr(value.length - check.length) === check : + type === "|=" ? + value === check || value.substr(0, check.length + 1) === check + "-" : + false; + }, + + POS: function( elem, match, i, array ) { + var name = match[2], + filter = Expr.setFilters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + } + } + } +}; + +var origPOS = Expr.match.POS, + fescape = function(all, num){ + return "\\" + (num - 0 + 1); + }; + +for ( var type in Expr.match ) { + Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) ); + Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) ); +} + +var makeArray = function( array, results ) { + array = Array.prototype.slice.call( array, 0 ); + + if ( results ) { + results.push.apply( results, array ); + return results; + } + + return array; +}; + +// Perform a simple check to determine if the browser is capable of +// converting a NodeList to an array using builtin methods. +// Also verifies that the returned array holds DOM nodes +// (which is not the case in the Blackberry browser) +try { + Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType; + +// Provide a fallback method if it does not work +} catch( e ) { + makeArray = function( array, results ) { + var i = 0, + ret = results || []; + + if ( toString.call(array) === "[object Array]" ) { + Array.prototype.push.apply( ret, array ); + + } else { + if ( typeof array.length === "number" ) { + for ( var l = array.length; i < l; i++ ) { + ret.push( array[i] ); + } + + } else { + for ( ; array[i]; i++ ) { + ret.push( array[i] ); + } + } + } + + return ret; + }; +} + +var sortOrder, siblingCheck; + +if ( document.documentElement.compareDocumentPosition ) { + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { + return a.compareDocumentPosition ? -1 : 1; + } + + return a.compareDocumentPosition(b) & 4 ? -1 : 1; + }; + +} else { + sortOrder = function( a, b ) { + var al, bl, + ap = [], + bp = [], + aup = a.parentNode, + bup = b.parentNode, + cur = aup; + + // The nodes are identical, we can exit early + if ( a === b ) { + hasDuplicate = true; + return 0; + + // If the nodes are siblings (or identical) we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + + // If no parents were found then the nodes are disconnected + } else if ( !aup ) { + return -1; + + } else if ( !bup ) { + return 1; + } + + // Otherwise they're somewhere else in the tree so we need + // to build up a full list of the parentNodes for comparison + while ( cur ) { + ap.unshift( cur ); + cur = cur.parentNode; + } + + cur = bup; + + while ( cur ) { + bp.unshift( cur ); + cur = cur.parentNode; + } + + al = ap.length; + bl = bp.length; + + // Start walking down the tree looking for a discrepancy + for ( var i = 0; i < al && i < bl; i++ ) { + if ( ap[i] !== bp[i] ) { + return siblingCheck( ap[i], bp[i] ); + } + } + + // We ended someplace up the tree so do a sibling check + return i === al ? + siblingCheck( a, bp[i], -1 ) : + siblingCheck( ap[i], b, 1 ); + }; + + siblingCheck = function( a, b, ret ) { + if ( a === b ) { + return ret; + } + + var cur = a.nextSibling; + + while ( cur ) { + if ( cur === b ) { + return -1; + } + + cur = cur.nextSibling; + } + + return 1; + }; +} + +// Utility function for retreiving the text value of an array of DOM nodes +Sizzle.getText = function( elems ) { + var ret = "", elem; + + for ( var i = 0; elems[i]; i++ ) { + elem = elems[i]; + + // Get the text from text nodes and CDATA nodes + if ( elem.nodeType === 3 || elem.nodeType === 4 ) { + ret += elem.nodeValue; + + // Traverse everything else, except comment nodes + } else if ( elem.nodeType !== 8 ) { + ret += Sizzle.getText( elem.childNodes ); + } + } + + return ret; +}; + +// Check to see if the browser returns elements by name when +// querying by getElementById (and provide a workaround) +(function(){ + // We're going to inject a fake input element with a specified name + var form = document.createElement("div"), + id = "script" + (new Date()).getTime(), + root = document.documentElement; + + form.innerHTML = ""; + + // Inject it into the root element, check its status, and remove it quickly + root.insertBefore( form, root.firstChild ); + + // The workaround has to do additional checks after a getElementById + // Which slows things down for other browsers (hence the branching) + if ( document.getElementById( id ) ) { + Expr.find.ID = function( match, context, isXML ) { + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + + return m ? + m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? + [m] : + undefined : + []; + } + }; + + Expr.filter.ID = function( elem, match ) { + var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); + + return elem.nodeType === 1 && node && node.nodeValue === match; + }; + } + + root.removeChild( form ); + + // release memory in IE + root = form = null; +})(); + +(function(){ + // Check to see if the browser returns only elements + // when doing getElementsByTagName("*") + + // Create a fake element + var div = document.createElement("div"); + div.appendChild( document.createComment("") ); + + // Make sure no comments are found + if ( div.getElementsByTagName("*").length > 0 ) { + Expr.find.TAG = function( match, context ) { + var results = context.getElementsByTagName( match[1] ); + + // Filter out possible comments + if ( match[1] === "*" ) { + var tmp = []; + + for ( var i = 0; results[i]; i++ ) { + if ( results[i].nodeType === 1 ) { + tmp.push( results[i] ); + } + } + + results = tmp; + } + + return results; + }; + } + + // Check to see if an attribute returns normalized href attributes + div.innerHTML = ""; + + if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && + div.firstChild.getAttribute("href") !== "#" ) { + + Expr.attrHandle.href = function( elem ) { + return elem.getAttribute( "href", 2 ); + }; + } + + // release memory in IE + div = null; +})(); + +if ( document.querySelectorAll ) { + (function(){ + var oldSizzle = Sizzle, + div = document.createElement("div"), + id = "__sizzle__"; + + div.innerHTML = "

"; + + // Safari can't handle uppercase or unicode characters when + // in quirks mode. + if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { + return; + } + + Sizzle = function( query, context, extra, seed ) { + context = context || document; + + // Only use querySelectorAll on non-XML documents + // (ID selectors don't work in non-HTML documents) + if ( !seed && !Sizzle.isXML(context) ) { + // See if we find a selector to speed up + var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query ); + + if ( match && (context.nodeType === 1 || context.nodeType === 9) ) { + // Speed-up: Sizzle("TAG") + if ( match[1] ) { + return makeArray( context.getElementsByTagName( query ), extra ); + + // Speed-up: Sizzle(".CLASS") + } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) { + return makeArray( context.getElementsByClassName( match[2] ), extra ); + } + } + + if ( context.nodeType === 9 ) { + // Speed-up: Sizzle("body") + // The body element only exists once, optimize finding it + if ( query === "body" && context.body ) { + return makeArray( [ context.body ], extra ); + + // Speed-up: Sizzle("#ID") + } else if ( match && match[3] ) { + var elem = context.getElementById( match[3] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id === match[3] ) { + return makeArray( [ elem ], extra ); + } + + } else { + return makeArray( [], extra ); + } + } + + try { + return makeArray( context.querySelectorAll(query), extra ); + } catch(qsaError) {} + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + var oldContext = context, + old = context.getAttribute( "id" ), + nid = old || id, + hasParent = context.parentNode, + relativeHierarchySelector = /^\s*[+~]/.test( query ); + + if ( !old ) { + context.setAttribute( "id", nid ); + } else { + nid = nid.replace( /'/g, "\\$&" ); + } + if ( relativeHierarchySelector && hasParent ) { + context = context.parentNode; + } + + try { + if ( !relativeHierarchySelector || hasParent ) { + return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra ); + } + + } catch(pseudoError) { + } finally { + if ( !old ) { + oldContext.removeAttribute( "id" ); + } + } + } + } + + return oldSizzle(query, context, extra, seed); + }; + + for ( var prop in oldSizzle ) { + Sizzle[ prop ] = oldSizzle[ prop ]; + } + + // release memory in IE + div = null; + })(); +} + +(function(){ + var html = document.documentElement, + matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector, + pseudoWorks = false; + + try { + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( document.documentElement, "[test!='']:sizzle" ); + + } catch( pseudoError ) { + pseudoWorks = true; + } + + if ( matches ) { + Sizzle.matchesSelector = function( node, expr ) { + // Make sure that attribute selectors are quoted + expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']"); + + if ( !Sizzle.isXML( node ) ) { + try { + if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) { + return matches.call( node, expr ); + } + } catch(e) {} + } + + return Sizzle(expr, null, null, [node]).length > 0; + }; + } +})(); + +(function(){ + var div = document.createElement("div"); + + div.innerHTML = "
"; + + // Opera can't find a second classname (in 9.6) + // Also, make sure that getElementsByClassName actually exists + if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) { + return; + } + + // Safari caches class attributes, doesn't catch changes (in 3.2) + div.lastChild.className = "e"; + + if ( div.getElementsByClassName("e").length === 1 ) { + return; + } + + Expr.order.splice(1, 0, "CLASS"); + Expr.find.CLASS = function( match, context, isXML ) { + if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { + return context.getElementsByClassName(match[1]); + } + }; + + // release memory in IE + div = null; +})(); + +function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + + if ( elem ) { + var match = false; + + elem = elem[dir]; + + while ( elem ) { + if ( elem.sizcache === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 && !isXML ){ + elem.sizcache = doneName; + elem.sizset = i; + } + + if ( elem.nodeName.toLowerCase() === cur ) { + match = elem; + break; + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + + if ( elem ) { + var match = false; + + elem = elem[dir]; + + while ( elem ) { + if ( elem.sizcache === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 ) { + if ( !isXML ) { + elem.sizcache = doneName; + elem.sizset = i; + } + + if ( typeof cur !== "string" ) { + if ( elem === cur ) { + match = true; + break; + } + + } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { + match = elem; + break; + } + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +if ( document.documentElement.contains ) { + Sizzle.contains = function( a, b ) { + return a !== b && (a.contains ? a.contains(b) : true); + }; + +} else if ( document.documentElement.compareDocumentPosition ) { + Sizzle.contains = function( a, b ) { + return !!(a.compareDocumentPosition(b) & 16); + }; + +} else { + Sizzle.contains = function() { + return false; + }; +} + +Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; + + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +var posProcess = function( selector, context ) { + var match, + tmpSet = [], + later = "", + root = context.nodeType ? [context] : context; + + // Position selectors must be done after the filter + // And so must :not(positional) so we move all PSEUDOs to the end + while ( (match = Expr.match.PSEUDO.exec( selector )) ) { + later += match[0]; + selector = selector.replace( Expr.match.PSEUDO, "" ); + } + + selector = Expr.relative[selector] ? selector + "*" : selector; + + for ( var i = 0, l = root.length; i < l; i++ ) { + Sizzle( selector, root[i], tmpSet ); + } + + return Sizzle.filter( later, tmpSet ); +}; + +// EXPOSE +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.filters; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + +})(); + + +var runtil = /Until$/, + rparentsprev = /^(?:parents|prevUntil|prevAll)/, + // Note: This RegExp should be improved, or likely pulled from Sizzle + rmultiselector = /,/, + isSimple = /^.[^:#\[\.,]*$/, + slice = Array.prototype.slice, + POS = jQuery.expr.match.POS, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend({ + find: function( selector ) { + var ret = this.pushStack( "", "find", selector ), + length = 0; + + for ( var i = 0, l = this.length; i < l; i++ ) { + length = ret.length; + jQuery.find( selector, this[i], ret ); + + if ( i > 0 ) { + // Make sure that the results are unique + for ( var n = length; n < ret.length; n++ ) { + for ( var r = 0; r < length; r++ ) { + if ( ret[r] === ret[n] ) { + ret.splice(n--, 1); + break; + } + } + } + } + } + + return ret; + }, + + has: function( target ) { + var targets = jQuery( target ); + return this.filter(function() { + for ( var i = 0, l = targets.length; i < l; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + not: function( selector ) { + return this.pushStack( winnow(this, selector, false), "not", selector); + }, + + filter: function( selector ) { + return this.pushStack( winnow(this, selector, true), "filter", selector ); + }, + + is: function( selector ) { + return !!selector && jQuery.filter( selector, this ).length > 0; + }, + + closest: function( selectors, context ) { + var ret = [], i, l, cur = this[0]; + + if ( jQuery.isArray( selectors ) ) { + var match, selector, + matches = {}, + level = 1; + + if ( cur && selectors.length ) { + for ( i = 0, l = selectors.length; i < l; i++ ) { + selector = selectors[i]; + + if ( !matches[selector] ) { + matches[selector] = jQuery.expr.match.POS.test( selector ) ? + jQuery( selector, context || this.context ) : + selector; + } + } + + while ( cur && cur.ownerDocument && cur !== context ) { + for ( selector in matches ) { + match = matches[selector]; + + if ( match.jquery ? match.index(cur) > -1 : jQuery(cur).is(match) ) { + ret.push({ selector: selector, elem: cur, level: level }); + } + } + + cur = cur.parentNode; + level++; + } + } + + return ret; + } + + var pos = POS.test( selectors ) ? + jQuery( selectors, context || this.context ) : null; + + for ( i = 0, l = this.length; i < l; i++ ) { + cur = this[i]; + + while ( cur ) { + if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { + ret.push( cur ); + break; + + } else { + cur = cur.parentNode; + if ( !cur || !cur.ownerDocument || cur === context ) { + break; + } + } + } + } + + ret = ret.length > 1 ? jQuery.unique(ret) : ret; + + return this.pushStack( ret, "closest", selectors ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + if ( !elem || typeof elem === "string" ) { + return jQuery.inArray( this[0], + // If it receives a string, the selector is used + // If it receives nothing, the siblings are used + elem ? jQuery( elem ) : this.parent().children() ); + } + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + var set = typeof selector === "string" ? + jQuery( selector, context ) : + jQuery.makeArray( selector ), + all = jQuery.merge( this.get(), set ); + + return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? + all : + jQuery.unique( all ) ); + }, + + andSelf: function() { + return this.add( this.prevObject ); + } +}); + +// A painfully simple check to see if an element is disconnected +// from a document (should be improved, where feasible). +function isDisconnected( node ) { + return !node || !node.parentNode || node.parentNode.nodeType === 11; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return jQuery.nth( elem, 2, "nextSibling" ); + }, + prev: function( elem ) { + return jQuery.nth( elem, 2, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( elem.parentNode.firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.makeArray( elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ), + // The variable 'args' was introduced in + // https://github.com/jquery/jquery/commit/52a0238 + // to work around a bug in Chrome 10 (Dev) and should be removed when the bug is fixed. + // http://code.google.com/p/v8/issues/detail?id=1050 + args = slice.call(arguments); + + if ( !runtil.test( name ) ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; + + if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + + return this.pushStack( ret, name, args.join(",") ); + }; +}); + +jQuery.extend({ + filter: function( expr, elems, not ) { + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 ? + jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : + jQuery.find.matches(expr, elems); + }, + + dir: function( elem, dir, until ) { + var matched = [], + cur = elem[ dir ]; + + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + nth: function( cur, result, dir, elem ) { + result = result || 1; + var num = 0; + + for ( ; cur; cur = cur[dir] ) { + if ( cur.nodeType === 1 && ++num === result ) { + break; + } + } + + return cur; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, keep ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep(elements, function( elem, i ) { + var retVal = !!qualifier.call( elem, i, elem ); + return retVal === keep; + }); + + } else if ( qualifier.nodeType ) { + return jQuery.grep(elements, function( elem, i ) { + return (elem === qualifier) === keep; + }); + + } else if ( typeof qualifier === "string" ) { + var filtered = jQuery.grep(elements, function( elem ) { + return elem.nodeType === 1; + }); + + if ( isSimple.test( qualifier ) ) { + return jQuery.filter(qualifier, filtered, !keep); + } else { + qualifier = jQuery.filter( qualifier, filtered ); + } + } + + return jQuery.grep(elements, function( elem, i ) { + return (jQuery.inArray( elem, qualifier ) >= 0) === keep; + }); +} + + + + +var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig, + rtagName = /<([\w:]+)/, + rtbody = /", "" ], + legend: [ 1, "
", "
" ], + thead: [ 1, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + col: [ 2, "", "
" ], + area: [ 1, "", "" ], + _default: [ 0, "", "" ] + }; + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// IE can't serialize and + + + + +
+
+ DataTables with column rendering +
+ +

Preamble

+

Each column has an optional rendering control called mRender which can be used to process the content of each cell before the data is used. mRender has a wide array of options available to it for rendering different types of data (sorting, filtering, display etc), but it can be used very simply to manipulate the content of a cell, as shown here.

+

This example shows the rendering engine version combined with the rendering engine name in the first column, hiding the version column. This technique can be useful for adding links, assigning colours based on content rules and any other form of text manipulation you require.

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
TridentInternet Explorer 4.0Win 95+4X
TridentInternet Explorer 5.0Win 95+5C
TridentInternet Explorer 5.5Win 95+5.5A
TridentInternet Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	$('#example').dataTable( {
+		"aoColumnDefs": [ 
+			{
+				// `data` refers to the data for the cell (defined by `mData`, which
+				// defaults to the column being worked with, in this case is the first
+				// Using `row[0]` is equivalent.
+				"mRender": function ( data, type, row ) {
+					return data +' '+ row[3];
+				},
+				"aTargets": [ 0 ]
+			},
+			{ "bVisible": false,  "aTargets": [ 3 ] },
+			{ "sClass": "center", "aTargets": [ 4 ] }
+		]
+	} );
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/advanced_init/complex_header.html b/docroot/sites/all/libraries/datatables/examples/advanced_init/complex_header.html new file mode 100644 index 00000000..f659308e --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/advanced_init/complex_header.html @@ -0,0 +1,615 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables complex header example (rowspan and colspan) +
+ +

Preamble

+

Complex headers (using colspan / rowspan) can be used to group columns of similar information in DataTables, creating a very powerful visual effect. In addition to the basic behaviour, DataTables can also take colspan and rowspans into account when working with hidden columns. The colspan and rowspan attributes for each cell are automatically calculated and rendered on the page for you. This also allows the ColVis extra for DataTables to work great with hidden columns.

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserDetails
Platform(s)Engine versionCSS grade
Rendering engineBrowserPlatform(s)Engine versionCSS grade
Details
TridentInternet + Explorer 4.0Win 95+4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	$('#example').dataTable( {
+		"aoColumnDefs": [
+			{ "bVisible": false, "aTargets": [2] }
+		]
+	} );
+} );
+ + + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/advanced_init/defaults.html b/docroot/sites/all/libraries/datatables/examples/advanced_init/defaults.html new file mode 100644 index 00000000..6bc0a696 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/advanced_init/defaults.html @@ -0,0 +1,612 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables - setting defaults example +
+ +

Preamble

+

When working with DataTables over multiple pages it is often useful to set the initialisation defaults to common values (for example you might want to set sDom to a common value so all tables get the same layout). This can be done using the $.fn.dataTable.defaults object. This object will take all the same parameters as the DataTables initialisation object, but in this case you are setting the default for all future initialisations of DataTables.

+ +

This example shows the filtering and sorting features of DataTables being disabled by default, which is reflected in the table when it is initialised, as can be seen below.

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
TridentInternet + Explorer 4.0Win 95+ 4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	$.extend( $.fn.dataTable.defaults, {
+		"bFilter": false,
+		"bSort": false
+	} );
+
+	$('#example').dataTable();
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/advanced_init/dom_multiple_elements.html b/docroot/sites/all/libraries/datatables/examples/advanced_init/dom_multiple_elements.html new file mode 100644 index 00000000..6bc36111 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/advanced_init/dom_multiple_elements.html @@ -0,0 +1,611 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables DOM positioning - multiple instances example +
+ +

Preamble

+

As is described by the basic DOM positioning example you can use the sDom initialisation parameter to move DataTables features around the table to where you want them. However you can also use sDom to create multiple instances of these table controls. Simply include the feature's identification letter where you want it to appear, as many times as you wish, and the controls will all sync up.

+

This is shown in the demo below where for four key build-in features are duplicated above and below the table. Note that obviously the table ('t') should be included only once.

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
Trident + Internet + Explorer + 4.0 + Win 95+4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	$('#example').dataTable( {
+		"sDom": '<"top"iflp<"clear">>rt<"bottom"iflp<"clear">>'
+	} );
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/advanced_init/dom_toolbar.html b/docroot/sites/all/libraries/datatables/examples/advanced_init/dom_toolbar.html new file mode 100644 index 00000000..b4289177 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/advanced_init/dom_toolbar.html @@ -0,0 +1,616 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables Custom DOM additions +
+ +

Preamble

+

DataTables inserts DOM elements around the table to control DataTables features, and you can make use of this mechanism as well to insert your own custom elements. In this example a DIV with a class of 'toolbar' is created using sDom, and then HTML is inserted into the created DIV once the table has been initialised. You could put whatever HTML you want into the toolbar and add event handlers etc.

+

For more complex DOM manipulation around the table, you might want to consider making use of DataTables feature plug-in API, which is used for TableTools and other DataTables plug-ins.

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
Trident + Internet + Explorer + 4.0 + Win 95+4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	$('#example').dataTable( {
+		"sDom": '<"toolbar">frtip'
+	} );
+	$("div.toolbar").html('Custom tool bar! Text/images etc.');
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/advanced_init/dt_events.html b/docroot/sites/all/libraries/datatables/examples/advanced_init/dt_events.html new file mode 100644 index 00000000..7be582c0 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/advanced_init/dt_events.html @@ -0,0 +1,622 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables | events example +
+ +

Preamble

+

DataTables can fire a number of custom events which you can bind to, allowing your code to perform custom actions when the events occured. This example shows the use of the sort, filter and page events and will add a nitofication that the event fired to an element on the page to show that they have indeed fired.

+ +

Live example

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
TridentInternet + Explorer 4.0Win 95+ 4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
function eventFired( type ) {
+	var n = document.getElementById('demo_info');
+	n.innerHTML += '<:div>:'+type+' event - '+new Date().getTime()+'<:/div>:';
+	n.scrollTop = n.scrollHeight;		
+}
+
+$(document).ready(function() {
+	$('#example')
+		.bind('sort',   function () { eventFired( 'Sort' ); })
+		.bind('filter', function () { eventFired( 'Filter' ); })
+		.bind('page',   function () { eventFired( 'Page' ); })
+		.dataTable();
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/advanced_init/events_live.html b/docroot/sites/all/libraries/datatables/examples/advanced_init/events_live.html new file mode 100644 index 00000000..c87a719a --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/advanced_init/events_live.html @@ -0,0 +1,644 @@ + + + + + + + DataTables example + + + + + + + +
+
+ DataTables - live events example +
+ +

Preamble

+

Events assigned to the table can be exceptionally useful for user interaction, however you must be aware that DataTables will add and remove rows from the DOM as they are needed (i.e. when paging only the visible elements are actually available in the DOM). As such, this can lead to the odd hiccup when working with events. One of the best ways of dealing with this is through the use of live events, as shown in this example.

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
TridentInternet + Explorer + 4.0 + Win 95+4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	/* Init DataTables */
+	$('#example').dataTable();
+	
+	/* Add events */
+	$('#example tbody tr').live('click', function () {
+		var sTitle;
+		var nTds = $('td', this);
+		var sBrowser = $(nTds[1]).text();
+		var sGrade = $(nTds[4]).text();
+		
+		if ( sGrade == "A" )
+			sTitle =  sBrowser+' will provide a first class (A) level of CSS support.';
+		else if ( sGrade == "C" )
+			sTitle = sBrowser+' will provide a core (C) level of CSS support.';
+		else if ( sGrade == "X" )
+			sTitle = sBrowser+' does not provide CSS support or has a broken implementation. Block CSS.';
+		else
+			sTitle = sBrowser+' will provide an undefined level of CSS support.';
+		
+		alert( sTitle )
+	} );
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/advanced_init/events_post_init.html b/docroot/sites/all/libraries/datatables/examples/advanced_init/events_post_init.html new file mode 100644 index 00000000..e0ec0812 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/advanced_init/events_post_init.html @@ -0,0 +1,667 @@ + + + + + + + DataTables example + + + + + + + +
+
+ DataTables events (post-initialisation) example +
+ +

Preamble

+

Events which are assigned to the table elements are retained by DataTables such that they will still work as you would expect, even after changing the sort order etc. (no need to reapply the event handlers). You can do this at any time, although if you apply the handlers after the table has been initialised there is an extra set. Rather then querying the DOM to get all rows (since they aren't there) you can use the '$' API method that DataTables provides which does a jQuery selector on the whole table and returns a jQuery object.

+

This example shows the tooltip plug-in being applied to the table after initialisation.

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
TridentInternet + Explorer + 4.0 + Win 95+4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	/*
+	 * First step is to create title attributes for the rows in the table
+	 * This isn't needed if the required 'title' attribute is already set in the HTML in the
+	 * DOM 
+	 */
+	$('#example tbody tr').each( function() {
+		var sTitle;
+		var nTds = $('td', this);
+		var sBrowser = $(nTds[1]).text();
+		var sGrade = $(nTds[4]).text();
+		
+		if ( sGrade == "A" )
+			sTitle =  sBrowser+' will provide a first class (A) level of CSS support.';
+		else if ( sGrade == "C" )
+			sTitle = sBrowser+' will provide a core (C) level of CSS support.';
+		else if ( sGrade == "X" )
+			sTitle = sBrowser+' does not provide CSS support or has a broken implementation. Block CSS.';
+		else
+			sTitle = sBrowser+' will provide an undefined level of CSS support.';
+		
+		this.setAttribute( 'title', sTitle );
+	} );
+	
+	/* Init DataTables */
+	var oTable = $('#example').dataTable();
+	
+	/* Apply the tooltips */
+	oTable.$('tr').tooltip( {
+		"delay": 0,
+		"track": true,
+		"fade": 250
+	} );
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/advanced_init/events_pre_init.html b/docroot/sites/all/libraries/datatables/examples/advanced_init/events_pre_init.html new file mode 100644 index 00000000..abcf26ac --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/advanced_init/events_pre_init.html @@ -0,0 +1,666 @@ + + + + + + + DataTables example + + + + + + + +
+
+ DataTables events (pre-initialisation) example +
+ +

Preamble

+

Events which are assigned to the table elements are retained by DataTables such that they will still work as you would expect, even after changing the sort order etc. (no need to reapply the event handlers). If you apply the event handlers before you initialise DataTables, you just do this in the normal way. This is shown in this example where the call $('#example tbody tr[title]').tooltip(); is made before the table is initialised.

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
TridentInternet + Explorer + 4.0 + Win 95+4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	/*
+	 * First step is to create title attributes for the rows in the table
+	 * This isn't needed if the required 'title' attribute is already set in the HTML in the
+	 * DOM 
+	 */
+	$('#example tbody tr').each( function() {
+		var sTitle;
+		var nTds = $('td', this);
+		var sBrowser = $(nTds[1]).text();
+		var sGrade = $(nTds[4]).text();
+		
+		if ( sGrade == "A" )
+			sTitle =  sBrowser+' will provide a first class (A) level of CSS support.';
+		else if ( sGrade == "C" )
+			sTitle = sBrowser+' will provide a core (C) level of CSS support.';
+		else if ( sGrade == "X" )
+			sTitle = sBrowser+' does not provide CSS support or has a broken implementation. Block CSS.';
+		else
+			sTitle = sBrowser+' will provide an undefined level of CSS support.';
+		
+		this.setAttribute( 'title', sTitle );
+	} );
+	
+	/* Apply the tooltips */
+	$('#example tbody tr[title]').tooltip( {
+		"delay": 0,
+		"track": true,
+		"fade": 250
+	} );
+	
+	/* Init DataTables */
+	$('#example').dataTable();
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/advanced_init/footer_callback.html b/docroot/sites/all/libraries/datatables/examples/advanced_init/footer_callback.html new file mode 100644 index 00000000..5a617019 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/advanced_init/footer_callback.html @@ -0,0 +1,650 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables footer callback example +
+ +

Preamble

+

DataTables using the header and footer callback manipulation functions (fnHeaderCallback() and fnFooterCallback()) you can perform some powerful and useful data manipulation. The example given below shows how a callback function can be used to total up visible (and hidden) data, taking into account all of DataTable's features (pagination, filtering etc).

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserEngine versionCSS gradeMarket share (%)
Trident + Internet + Explorer + 4.0 + 4X0.01
TridentInternet + Explorer 5.05C0.1
TridentInternet + Explorer 5.55.5A0.5
TridentInternet + Explorer 66A36
TridentInternet Explorer 77A41
TridentAOL browser (AOL desktop)6A1
GeckoFirefox 1.01.7A0.1
GeckoFirefox 1.51.8A0.5
GeckoFirefox 2.01.8A7
GeckoFirefox 3.01.9A9
GeckoCamino 1.01.8A0.01
GeckoCamino 1.51.8A0.01
GeckoNetscape 7.21.7A0.01
GeckoNetscape Browser 81.7A0.01
GeckoNetscape Navigator 91.8A0.01
GeckoMozilla 1.01A0.01
GeckoMozilla 1.11.1A0.01
GeckoMozilla 1.21.2A0.01
GeckoMozilla 1.31.3A0.01
GeckoMozilla 1.41.4A0.01
GeckoMozilla 1.51.5A0.01
GeckoMozilla 1.61.6A0.01
GeckoMozilla 1.71.7A0.01
GeckoMozilla 1.81.8A0.01
GeckoSeamonkey 1.11.8A0.01
GeckoEpiphany 2.201.8A0.01
WebkitSafari 1.2125.5A0.01
WebkitSafari 1.3312.8A0.01
WebkitSafari 2.0419.3A1
WebkitSafari 3.0522.1A2.2
WebkitOmniWeb 5.5420A0.01
WebkitiPod Touch / iPhone420.1A0.05
WebkitS60413A0.01
PrestoOpera 7.0-A0.01
PrestoOpera 7.5-A0.01
PrestoOpera 8.0-A0.01
PrestoOpera 8.5-A0.01
PrestoOpera 9.0-A0.1
PrestoOpera 9.2-A0.2
PrestoOpera 9.5-A0.8
PrestoOpera for Wii-A0.01
PrestoNokia N800-A0.01
PrestoNintendo DS browser8.5C/A10.01
KHTMLKonqureror 3.13.1C0.01
KHTMLKonqureror 3.33.3A0.01
KHTMLKonqureror 3.53.5A0.01
TasmanInternet Explorer 4.5-X0.01
TasmanInternet Explorer 5.11C0.01
TasmanInternet Explorer 5.21C0.01
MiscNetFront 3.1-C0.01
MiscNetFront 3.4-A0.01
MiscDillo 0.8-X0.01
MiscLinks-X0.01
MiscLynx-X0.01
MiscIE Mobile-C0.01
MiscPSP browser-C0.01
Other browsersAll others-U0.04
Total:
+
+
+ +

Warning! The market share information given in this table is fabricated using a combination of (mild) judgement, the BBC Browser Statistics information and statistics from TheCounter.com. THe lowest usage given to anyone browser is 0.01 for reasons of this example.

+ + +

Initialisation code

+
$(document).ready(function() {
+	$('#example').dataTable( {
+		"fnFooterCallback": function ( nRow, aaData, iStart, iEnd, aiDisplay ) {
+			/*
+			 * Calculate the total market share for all browsers in this table (ie inc. outside
+			 * the pagination)
+			 */
+			var iTotalMarket = 0;
+			for ( var i=0 ; i<aaData.length ; i++ )
+			{
+				iTotalMarket += aaData[i][4]*1;
+			}
+			
+			/* Calculate the market share for browsers on this page */
+			var iPageMarket = 0;
+			for ( var i=iStart ; i<iEnd ; i++ )
+			{
+				iPageMarket += aaData[ aiDisplay[i] ][4]*1;
+			}
+			
+			/* Modify the footer row to match what we want */
+			var nCells = nRow.getElementsByTagName('th');
+			nCells[1].innerHTML = parseInt(iPageMarket * 100)/100 +
+				'% ('+ parseInt(iTotalMarket * 100)/100 +'% total)';
+		}
+	} );
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/advanced_init/highlight.html b/docroot/sites/all/libraries/datatables/examples/advanced_init/highlight.html new file mode 100644 index 00000000..139a90fc --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/advanced_init/highlight.html @@ -0,0 +1,643 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables highlighting via CSS example +
+ +

Preamble

+

When highlighting rows using CSS :hover, you need to be aware of the sorting class which is applied to elements in the column currently being sorted (assuming it is enabled - it is by default). This example shows how to consider this in CSS, with highlighting for each row, and a little tint for the sorting column to maintain it's visibility as the column currently being sorted upon.

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
TridentInternet + Explorer 4.0Win 95+4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+

Javascript:

+
$(document).ready(function() {
+	$('#example').dataTable();
+} );
+ + + +

CSS (note that for this example the selector ".ex_highlight" is used to limit the CSS here to just this example.

+
.ex_highlight #example tbody tr.even:hover, #example tbody tr.even td.highlighted {
+	background-color: #ECFFB3;
+}
+
+.ex_highlight #example tbody tr.odd:hover, #example tbody tr.odd td.highlighted {
+	background-color: #E6FF99;
+}
+
+.ex_highlight_row #example tr.even:hover {
+	background-color: #ECFFB3;
+}
+
+.ex_highlight_row #example tr.even:hover td.sorting_1 {
+	background-color: #DDFF75;
+}
+
+.ex_highlight_row #example tr.even:hover td.sorting_2 {
+	background-color: #E7FF9E;
+}
+
+.ex_highlight_row #example tr.even:hover td.sorting_3 {
+	background-color: #E2FF89;
+}
+
+.ex_highlight_row #example tr.odd:hover {
+	background-color: #E6FF99;
+}
+
+.ex_highlight_row #example tr.odd:hover td.sorting_1 {
+	background-color: #D6FF5C;
+}
+
+.ex_highlight_row #example tr.odd:hover td.sorting_2 {
+	background-color: #E0FF84;
+}
+
+.ex_highlight_row #example tr.odd:hover td.sorting_3 {
+	background-color: #DBFF70;
+}
+
+ + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/advanced_init/html_sort.html b/docroot/sites/all/libraries/datatables/examples/advanced_init/html_sort.html new file mode 100644 index 00000000..71a2b01f --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/advanced_init/html_sort.html @@ -0,0 +1,197 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables HTML sorting example +
+ +

Preamble

+

DataTables will attempt to automatically detect the data types that your table contains, allowing it to accurately sort and filter this data. This example shows automatic type detection of HTML information - note that the sorting is correct on the second column for the visible information. Additional data types can be added through plug-ins. +

Note that prior to DataTables 1.7 the HTML type was not automatically detected, and it was necessary to specify the sType for the column - this is now not needed as seen in this example. If you do want to be able to sort and filter on the HTML information you can specify the sType for the column as 'string'.

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + +
ReflectionLink
DataTablesDataTables
IntegrityA link to Integrity
IntegrityIntegrity
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	$('#example').dataTable();
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/advanced_init/language_file.html b/docroot/sites/all/libraries/datatables/examples/advanced_init/language_file.html new file mode 100644 index 00000000..7ded0177 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/advanced_init/language_file.html @@ -0,0 +1,608 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables language file example +
+ +

Preamble

+

As well as being able to pass language information to DataTables through the initialisation object, you can also store the language information in a file, which DataTables will then read. Useful if you are using server-side processes to switch language. The following example shows DataTables reading a German language file.

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
TridentInternet + Explorer 4.0Win 95+4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	$('#example').dataTable( {
+		"oLanguage": {
+			"sUrl": "media/language/de_DE.txt"
+		}
+	} );
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/advanced_init/length_menu.html b/docroot/sites/all/libraries/datatables/examples/advanced_init/length_menu.html new file mode 100644 index 00000000..a544f0eb --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/advanced_init/length_menu.html @@ -0,0 +1,604 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables defining the length menu example +
+ +

Preamble

+

It is possible to easily customise the options shown in the length menu (by default at the top left of the table) using the aLengthMenu initialisation option. This parameter is either a 1D array of options which will be used for both the displayed option and the value, or a 2D array (shown in this example) which will use the array in the first position as the value, and the array in the second position as the displayed options (useful for language strings such as 'All').

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
TridentInternet + Explorer 4.0Win 95+4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	$('#example').dataTable( {
+		"aLengthMenu": [[10, 25, 50, -1], [10, 25, 50, "All"]]
+	} );
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/advanced_init/localstorage.html b/docroot/sites/all/libraries/datatables/examples/advanced_init/localstorage.html new file mode 100644 index 00000000..0d6c6710 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/advanced_init/localstorage.html @@ -0,0 +1,612 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables - state saving with localStorage +
+ +

Preamble

+

The state saving storage method that is built into DataTables makes use of cookies for compatibility with all browsers. However, cookies have a number of disadvantagies such as requiring increased HTTP bandwidth and a 4K limit. The W3C Web Storage specification defines localStorage as a local storage method which we can use in DataTables to store state without the inherent issues in using cookies.

+

This example shows the use of fnStateSave and fnStateLoad to very simply store the table state in localStorage and then load it back again when needed.

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
TridentInternet + Explorer 4.0Win 95+4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	$('#example').dataTable( {
+		"bStateSave": true
+	} );
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/advanced_init/row_callback.html b/docroot/sites/all/libraries/datatables/examples/advanced_init/row_callback.html new file mode 100644 index 00000000..640f1d20 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/advanced_init/row_callback.html @@ -0,0 +1,624 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables example with row callback +
+ +

Preamble

+

The following example shows how a callback function can be used to format a particular row at draw time. For each row that is generated for display, the fnRowCallback() function is called. It is passed the row node which can then be modified. In this case a trivial example of making the 'grade' column bold if the grade is 'A' is shown (note that this could also be performed using mData as a function, but this is just for example of fnRowCallback!).

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
TridentInternet + Explorer 4.0Win 95+4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	$('#example').dataTable( {
+		"fnRowCallback": function( nRow, aData, iDisplayIndex ) {
+			/* Append the grade to the default row class name */
+			if ( aData[4] == "A" )
+			{
+				$('td:eq(4)', nRow).html( '<b>A</b>' );
+			}
+		},
+		"aoColumnDefs": [ {
+				"sClass": "center",
+				"aTargets": [ -1, -2 ]
+		} ]
+	} );
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/advanced_init/row_grouping.html b/docroot/sites/all/libraries/datatables/examples/advanced_init/row_grouping.html new file mode 100644 index 00000000..bcb08184 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/advanced_init/row_grouping.html @@ -0,0 +1,661 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables row grouping example +
+ +

Preamble

+

Although DataTables doesn't have row grouping built-in (picking one of the many methods available would overly limit the plug-in it was felt), it is most certainly possible to give the look and feel of row grouping. In the example below the 'group' is the browser engine, which is based on the information in the first column (set to hidden). The grouping indicator is added by the fnDrawCallback function, which will parse through the rows which are displayed, and enter a TR element where a new group is found.

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
TridentInternet + Explorer 4.0Win 95+4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	oTable = $('#example').dataTable({
+		"fnDrawCallback": function ( oSettings ) {
+			if ( oSettings.aiDisplay.length == 0 )
+			{
+				return;
+			}
+			
+			var nTrs = $('#example tbody tr');
+			var iColspan = nTrs[0].getElementsByTagName('td').length;
+			var sLastGroup = "";
+			for ( var i=0 ; i<nTrs.length ; i++ )
+			{
+				var iDisplayIndex = oSettings._iDisplayStart + i;
+				var sGroup = oSettings.aoData[ oSettings.aiDisplay[iDisplayIndex] ]._aData[0];
+				if ( sGroup != sLastGroup )
+				{
+					var nGroup = document.createElement( 'tr' );
+					var nCell = document.createElement( 'td' );
+					nCell.colSpan = iColspan;
+					nCell.className = "group";
+					nCell.innerHTML = sGroup;
+					nGroup.appendChild( nCell );
+					nTrs[i].parentNode.insertBefore( nGroup, nTrs[i] );
+					sLastGroup = sGroup;
+				}
+			}
+		},
+		"aoColumnDefs": [
+			{ "bVisible": false, "aTargets": [ 0 ] }
+		],
+		"aaSortingFixed": [[ 0, 'asc' ]],
+		"aaSorting": [[ 1, 'asc' ]],
+		"sDom": 'lfr<"giveHeight"t>ip'
+	});
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/advanced_init/sorting_control.html b/docroot/sites/all/libraries/datatables/examples/advanced_init/sorting_control.html new file mode 100644 index 00000000..83c8eba9 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/advanced_init/sorting_control.html @@ -0,0 +1,625 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables sorting direction control example +
+ +

Preamble

+

At times you may wish to change the default sorting direction for columns (all or some of them) to be 'descending' rather than DataTables' default ascending. This can be done through the use of the aoColumns[].asSorting initialisation parameter. This parameter also allows you to limit the sorting to a single direction, or you could add complex behaviour to the sorting interaction.

+

The example below shows:

+
    +
  • Column 1 - default sorting
  • +
  • Column 2 - ascending sorting only
  • +
  • Column 3 - descending sorting, followed by ascending and then ascending again
  • +
  • Column 4 - descending sorting only
  • +
  • Column 5 - default sorting
  • +
+

It's worth noting that I don't have a good use case for when you might what to use the complex behaviour that is possible with this, but it is there should you want to use it!

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
TridentInternet + Explorer 4.0Win 95+4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	$('#example').dataTable( {
+		"aoColumns": [
+			null,
+			{ "asSorting": [ "asc" ] },
+			{ "asSorting": [ "desc", "asc", "asc" ] },
+			{ "asSorting": [ "desc" ] },
+			null
+		]
+	} );
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/ajax/ajax.html b/docroot/sites/all/libraries/datatables/examples/ajax/ajax.html new file mode 100644 index 00000000..6942ba52 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/ajax/ajax.html @@ -0,0 +1,208 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables AJAX source example +
+ +

Preamble

+

Although DataTables is built from the principle of progressive enhancement, it is often useful to be able to construct a table from an AJAX source. This can be done in one of two ways - either using the aData initialisation parameter which takes an array of data, or using the sAjaxSource initialisation parameter which will have DataTables go to that source with an XHR call and load data from there. This example shows the latter method in action. DataTables expects an object with an array called "aaData" with the data source.

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	$('#example').dataTable( {
+		"bProcessing": true,
+		"sAjaxSource": "sources/arrays.txt"
+	} );
+} );
+ + + +

Server response

+

The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.

+

+			
+			
+			

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/ajax/custom_data_property.html b/docroot/sites/all/libraries/datatables/examples/ajax/custom_data_property.html new file mode 100644 index 00000000..d0798962 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/ajax/custom_data_property.html @@ -0,0 +1,210 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables AJAX source example - reading an arbitrary data source property +
+ +

Preamble

+

By default DataTables will read the data to show in the table from the aaData property of the object returned from the server. By using the initialisation option sAjaxDataProp you can customise this to whatever you wish. This examples shows it being set to 'demo'. Note that this option will also work with server-side processing. Additionally, it is possible to set sAjaxDataProp to be an empty string, which results in DataTables treating the given data source as the table data array (rather than as property of an object).

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	$('#example').dataTable( {
+		"bProcessing": true,
+		"sAjaxSource": "sources/custom_prop.txt",
+		"sAjaxDataProp": "demo"
+	} );
+} );
+ + + +

Server response

+

The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.

+

+			
+			
+			

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/ajax/deep.html b/docroot/sites/all/libraries/datatables/examples/ajax/deep.html new file mode 100644 index 00000000..b5cc7160 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/ajax/deep.html @@ -0,0 +1,222 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables AJAX source example - deep property reading for a data source +
+ +

Preamble

+

The ability of DataTables to read arbitrary object properties as a column data source is extended to n levels of objects, through the use of standard Javascript dotted object notation. For example in this example "platform.details.0" refers to the first element of the array "details", of the object "platform", for each column. Any level of 'dots' can be used.

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	var oTable = $('#example').dataTable( {
+		"bProcessing": true,
+		"sAjaxSource": "sources/deep.txt",
+		"aoColumns": [
+			{ "mData": "engine" },
+			{ "mData": "browser" },
+			{ "mData": "platform.inner" },
+			{ "mData": "platform.details.0" },
+			{ "mData": "platform.details.1" }
+		]
+	} );
+} );
+ + + +

Server response

+

The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.

+

+			
+			
+			

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/ajax/defer_render.html b/docroot/sites/all/libraries/datatables/examples/ajax/defer_render.html new file mode 100644 index 00000000..da7757af --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/ajax/defer_render.html @@ -0,0 +1,210 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables AJAX source example - with deferred rendering +
+ +

Preamble

+

When working with large data sources, you might seek to improve the speed at which DataTables runs. One method to do this is to make use of the build in deferred rendering. Rather than have DataTables create all TR and TD nodes required for the table when the data is loaded, when deferred rendering is enabled, DataTables will only create the nodes required for each individual display - these nodes are then retained incase they are needed again. This can give a significant performance increase, since a lot less work is done at initialisation time.

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	$('#example').dataTable( {
+		"bProcessing": true,
+		"sAjaxSource": "sources/arrays.txt",
+		"bDeferRender": true
+	} );
+} );
+ + + +

Server response

+

The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.

+

+			
+			
+			

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/ajax/null_data_source.html b/docroot/sites/all/libraries/datatables/examples/ajax/null_data_source.html new file mode 100644 index 00000000..55345a99 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/ajax/null_data_source.html @@ -0,0 +1,214 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables AJAX source example - null data source for a column +
+ +

Preamble

+

In some tables it can be useful to not need to specify any data source for a column, as it's content is automatically generated (for example using fnRender). This is fairly common with add, edit and delete columns for a CRUD interface. You can now use the mData set to null to specify that the column has no data source. DataTables will render this column as empty.

+ +

Live example

+
+ + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS gradeEmpty!
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	var oTable = $('#example').dataTable( {
+		"bProcessing": true,
+		"sAjaxSource": "sources/arrays.txt",
+		"aoColumns": [
+			null,
+			null,
+			null,
+			null,
+			null,
+			{ "mData": null }
+		]
+	} );
+} );
+ + + +

Server response

+

The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.

+

+			
+			
+			

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/ajax/objects.html b/docroot/sites/all/libraries/datatables/examples/ajax/objects.html new file mode 100644 index 00000000..f0678dc3 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/ajax/objects.html @@ -0,0 +1,222 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables AJAX source example - array of objects as a data source +
+ +

Preamble

+

By default, DataTables will expect an array of arrays for its data source, with each cell in the table being exactly described in the data source. However, this can often be quite limiting, or not suitable for a particular data source, so it is possible to specify which property of a source object that DataTables should read for each column. In this example the Ajax source returns an array of objects (one object for each row), and will then read the required property for each column.

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	var oTable = $('#example').dataTable( {
+		"bProcessing": true,
+		"sAjaxSource": "sources/objects.txt",
+		"aoColumns": [
+			{ "mData": "engine" },
+			{ "mData": "browser" },
+			{ "mData": "platform" },
+			{ "mData": "version" },
+			{ "mData": "grade" }
+		]
+	} );
+} );
+ + + +

Server response

+

The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.

+

+			
+			
+			

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/ajax/objects_subarrays.html b/docroot/sites/all/libraries/datatables/examples/ajax/objects_subarrays.html new file mode 100644 index 00000000..e7ddac09 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/ajax/objects_subarrays.html @@ -0,0 +1,222 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables AJAX source example - array of objects with sub-arrays as a data source +
+ +

Preamble

+

While the ability of DataTables to read arbitrary objects properties as a data source for any column is very powerful, it actually goes further than single level object properties; it is possible to read a data source for a column from a deeply nested array or property. This is specified in typical Javascript dotted object notation. For example "details.0" (used in this example) refers to the first property in an array called "details". "details.1" refers to the second property, etc. Object properties can also be used - for example "details.version" is perfectly valid, if that property is available in your data source.

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	var oTable = $('#example').dataTable( {
+		"bProcessing": true,
+		"sAjaxSource": "sources/objects_subarrays.txt",
+		"aoColumns": [
+			{ "mData": "engine" },
+			{ "mData": "browser" },
+			{ "mData": "platform" },
+			{ "mData": "details.0" },
+			{ "mData": "details.1" }
+		]
+	} );
+} );
+ + + +

Server response

+

The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.

+

+			
+			
+			

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/ajax/sources/array_only.txt b/docroot/sites/all/libraries/datatables/examples/ajax/sources/array_only.txt new file mode 100644 index 00000000..a8b16d7e --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/ajax/sources/array_only.txt @@ -0,0 +1,59 @@ +[ + ["Trident","Internet Explorer 4.0","Win 95+","4","X"], + ["Trident","Internet Explorer 5.0","Win 95+","5","C"], + ["Trident","Internet Explorer 5.5","Win 95+","5.5","A"], + ["Trident","Internet Explorer 6","Win 98+","6","A"], + ["Trident","Internet Explorer 7","Win XP SP2+","7","A"], + ["Trident","AOL browser (AOL desktop)","Win XP","6","A"], + ["Gecko","Firefox 1.0","Win 98+ / OSX.2+","1.7","A"], + ["Gecko","Firefox 1.5","Win 98+ / OSX.2+","1.8","A"], + ["Gecko","Firefox 2.0","Win 98+ / OSX.2+","1.8","A"], + ["Gecko","Firefox 3.0","Win 2k+ / OSX.3+","1.9","A"], + ["Gecko","Camino 1.0","OSX.2+","1.8","A"], + ["Gecko","Camino 1.5","OSX.3+","1.8","A"], + ["Gecko","Netscape 7.2","Win 95+ / Mac OS 8.6-9.2","1.7","A"], + ["Gecko","Netscape Browser 8","Win 98SE+","1.7","A"], + ["Gecko","Netscape Navigator 9","Win 98+ / OSX.2+","1.8","A"], + ["Gecko","Mozilla 1.0","Win 95+ / OSX.1+",1,"A"], + ["Gecko","Mozilla 1.1","Win 95+ / OSX.1+",1.1,"A"], + ["Gecko","Mozilla 1.2","Win 95+ / OSX.1+",1.2,"A"], + ["Gecko","Mozilla 1.3","Win 95+ / OSX.1+",1.3,"A"], + ["Gecko","Mozilla 1.4","Win 95+ / OSX.1+",1.4,"A"], + ["Gecko","Mozilla 1.5","Win 95+ / OSX.1+",1.5,"A"], + ["Gecko","Mozilla 1.6","Win 95+ / OSX.1+",1.6,"A"], + ["Gecko","Mozilla 1.7","Win 98+ / OSX.1+",1.7,"A"], + ["Gecko","Mozilla 1.8","Win 98+ / OSX.1+",1.8,"A"], + ["Gecko","Seamonkey 1.1","Win 98+ / OSX.2+","1.8","A"], + ["Gecko","Epiphany 2.20","Gnome","1.8","A"], + ["Webkit","Safari 1.2","OSX.3","125.5","A"], + ["Webkit","Safari 1.3","OSX.3","312.8","A"], + ["Webkit","Safari 2.0","OSX.4+","419.3","A"], + ["Webkit","Safari 3.0","OSX.4+","522.1","A"], + ["Webkit","OmniWeb 5.5","OSX.4+","420","A"], + ["Webkit","iPod Touch / iPhone","iPod","420.1","A"], + ["Webkit","S60","S60","413","A"], + ["Presto","Opera 7.0","Win 95+ / OSX.1+","-","A"], + ["Presto","Opera 7.5","Win 95+ / OSX.2+","-","A"], + ["Presto","Opera 8.0","Win 95+ / OSX.2+","-","A"], + ["Presto","Opera 8.5","Win 95+ / OSX.2+","-","A"], + ["Presto","Opera 9.0","Win 95+ / OSX.3+","-","A"], + ["Presto","Opera 9.2","Win 88+ / OSX.3+","-","A"], + ["Presto","Opera 9.5","Win 88+ / OSX.3+","-","A"], + ["Presto","Opera for Wii","Wii","-","A"], + ["Presto","Nokia N800","N800","-","A"], + ["Presto","Nintendo DS browser","Nintendo DS","8.5","C/A1"], + ["KHTML","Konqureror 3.1","KDE 3.1","3.1","C"], + ["KHTML","Konqureror 3.3","KDE 3.3","3.3","A"], + ["KHTML","Konqureror 3.5","KDE 3.5","3.5","A"], + ["Tasman","Internet Explorer 4.5","Mac OS 8-9","-","X"], + ["Tasman","Internet Explorer 5.1","Mac OS 7.6-9","1","C"], + ["Tasman","Internet Explorer 5.2","Mac OS 8-X","1","C"], + ["Misc","NetFront 3.1","Embedded devices","-","C"], + ["Misc","NetFront 3.4","Embedded devices","-","A"], + ["Misc","Dillo 0.8","Embedded devices","-","X"], + ["Misc","Links","Text only","-","X"], + ["Misc","Lynx","Text only","-","X"], + ["Misc","IE Mobile","Windows Mobile 6","-","C"], + ["Misc","PSP browser","PSP","-","C"], + ["Other browsers","All others","-","-","U"] +] \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/ajax/sources/arrays.txt b/docroot/sites/all/libraries/datatables/examples/ajax/sources/arrays.txt new file mode 100644 index 00000000..fcbe36ed --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/ajax/sources/arrays.txt @@ -0,0 +1,59 @@ +{ "aaData": [ + ["Trident","Internet Explorer 4.0","Win 95+","4","X"], + ["Trident","Internet Explorer 5.0","Win 95+","5","C"], + ["Trident","Internet Explorer 5.5","Win 95+","5.5","A"], + ["Trident","Internet Explorer 6","Win 98+","6","A"], + ["Trident","Internet Explorer 7","Win XP SP2+","7","A"], + ["Trident","AOL browser (AOL desktop)","Win XP","6","A"], + ["Gecko","Firefox 1.0","Win 98+ / OSX.2+","1.7","A"], + ["Gecko","Firefox 1.5","Win 98+ / OSX.2+","1.8","A"], + ["Gecko","Firefox 2.0","Win 98+ / OSX.2+","1.8","A"], + ["Gecko","Firefox 3.0","Win 2k+ / OSX.3+","1.9","A"], + ["Gecko","Camino 1.0","OSX.2+","1.8","A"], + ["Gecko","Camino 1.5","OSX.3+","1.8","A"], + ["Gecko","Netscape 7.2","Win 95+ / Mac OS 8.6-9.2","1.7","A"], + ["Gecko","Netscape Browser 8","Win 98SE+","1.7","A"], + ["Gecko","Netscape Navigator 9","Win 98+ / OSX.2+","1.8","A"], + ["Gecko","Mozilla 1.0","Win 95+ / OSX.1+",1,"A"], + ["Gecko","Mozilla 1.1","Win 95+ / OSX.1+",1.1,"A"], + ["Gecko","Mozilla 1.2","Win 95+ / OSX.1+",1.2,"A"], + ["Gecko","Mozilla 1.3","Win 95+ / OSX.1+",1.3,"A"], + ["Gecko","Mozilla 1.4","Win 95+ / OSX.1+",1.4,"A"], + ["Gecko","Mozilla 1.5","Win 95+ / OSX.1+",1.5,"A"], + ["Gecko","Mozilla 1.6","Win 95+ / OSX.1+",1.6,"A"], + ["Gecko","Mozilla 1.7","Win 98+ / OSX.1+",1.7,"A"], + ["Gecko","Mozilla 1.8","Win 98+ / OSX.1+",1.8,"A"], + ["Gecko","Seamonkey 1.1","Win 98+ / OSX.2+","1.8","A"], + ["Gecko","Epiphany 2.20","Gnome","1.8","A"], + ["Webkit","Safari 1.2","OSX.3","125.5","A"], + ["Webkit","Safari 1.3","OSX.3","312.8","A"], + ["Webkit","Safari 2.0","OSX.4+","419.3","A"], + ["Webkit","Safari 3.0","OSX.4+","522.1","A"], + ["Webkit","OmniWeb 5.5","OSX.4+","420","A"], + ["Webkit","iPod Touch / iPhone","iPod","420.1","A"], + ["Webkit","S60","S60","413","A"], + ["Presto","Opera 7.0","Win 95+ / OSX.1+","-","A"], + ["Presto","Opera 7.5","Win 95+ / OSX.2+","-","A"], + ["Presto","Opera 8.0","Win 95+ / OSX.2+","-","A"], + ["Presto","Opera 8.5","Win 95+ / OSX.2+","-","A"], + ["Presto","Opera 9.0","Win 95+ / OSX.3+","-","A"], + ["Presto","Opera 9.2","Win 88+ / OSX.3+","-","A"], + ["Presto","Opera 9.5","Win 88+ / OSX.3+","-","A"], + ["Presto","Opera for Wii","Wii","-","A"], + ["Presto","Nokia N800","N800","-","A"], + ["Presto","Nintendo DS browser","Nintendo DS","8.5","C/A1"], + ["KHTML","Konqureror 3.1","KDE 3.1","3.1","C"], + ["KHTML","Konqureror 3.3","KDE 3.3","3.3","A"], + ["KHTML","Konqureror 3.5","KDE 3.5","3.5","A"], + ["Tasman","Internet Explorer 4.5","Mac OS 8-9","-","X"], + ["Tasman","Internet Explorer 5.1","Mac OS 7.6-9","1","C"], + ["Tasman","Internet Explorer 5.2","Mac OS 8-X","1","C"], + ["Misc","NetFront 3.1","Embedded devices","-","C"], + ["Misc","NetFront 3.4","Embedded devices","-","A"], + ["Misc","Dillo 0.8","Embedded devices","-","X"], + ["Misc","Links","Text only","-","X"], + ["Misc","Lynx","Text only","-","X"], + ["Misc","IE Mobile","Windows Mobile 6","-","C"], + ["Misc","PSP browser","PSP","-","C"], + ["Other browsers","All others","-","-","U"] +] } \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/ajax/sources/arrays_subobjects.txt b/docroot/sites/all/libraries/datatables/examples/ajax/sources/arrays_subobjects.txt new file mode 100644 index 00000000..46d66d71 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/ajax/sources/arrays_subobjects.txt @@ -0,0 +1,515 @@ +{ "aaData": [ + [ + "Trident", + "Internet Explorer 4.0", + "Win 95+", + { + "version": "4", + "grade": "X" + } + ], + [ + "Trident", + "Internet Explorer 5.0", + "Win 95+", + { + "version": "5", + "grade": "C" + } + ], + [ + "Trident", + "Internet Explorer 5.5", + "Win 95+", + { + "version": "5.5", + "grade": "A" + } + ], + [ + "Trident", + "Internet Explorer 6", + "Win 98+", + { + "version": "6", + "grade": "A" + } + ], + [ + "Trident", + "Internet Explorer 7", + "Win XP SP2+", + { + "version": "7", + "grade": "A" + } + ], + [ + "Trident", + "AOL browser (AOL desktop)", + "Win XP", + { + "version": "6", + "grade": "A" + } + ], + [ + "Gecko", + "Firefox 1.0", + "Win 98+ / OSX.2+", + { + "version": "1.7", + "grade": "A" + } + ], + [ + "Gecko", + "Firefox 1.5", + "Win 98+ / OSX.2+", + { + "version": "1.8", + "grade": "A" + } + ], + [ + "Gecko", + "Firefox 2.0", + "Win 98+ / OSX.2+", + { + "version": "1.8", + "grade": "A" + } + ], + [ + "Gecko", + "Firefox 3.0", + "Win 2k+ / OSX.3+", + { + "version": "1.9", + "grade": "A" + } + ], + [ + "Gecko", + "Camino 1.0", + "OSX.2+", + { + "version": "1.8", + "grade": "A" + } + ], + [ + "Gecko", + "Camino 1.5", + "OSX.3+", + { + "version": "1.8", + "grade": "A" + } + ], + [ + "Gecko", + "Netscape 7.2", + "Win 95+ / Mac OS 8.6-9.2", + { + "version": "1.7", + "grade": "A" + } + ], + [ + "Gecko", + "Netscape Browser 8", + "Win 98SE+", + { + "version": "1.7", + "grade": "A" + } + ], + [ + "Gecko", + "Netscape Navigator 9", + "Win 98+ / OSX.2+", + { + "version": "1.8", + "grade": "A" + } + ], + [ + "Gecko", + "Mozilla 1.0", + "Win 95+ / OSX.1+", + { + "version": "1", + "grade": "A" + } + ], + [ + "Gecko", + "Mozilla 1.1", + "Win 95+ / OSX.1+", + { + "version": "1.1", + "grade": "A" + } + ], + [ + "Gecko", + "Mozilla 1.2", + "Win 95+ / OSX.1+", + { + "version": "1.2", + "grade": "A" + } + ], + [ + "Gecko", + "Mozilla 1.3", + "Win 95+ / OSX.1+", + { + "version": "1.3", + "grade": "A" + } + ], + [ + "Gecko", + "Mozilla 1.4", + "Win 95+ / OSX.1+", + { + "version": "1.4", + "grade": "A" + } + ], + [ + "Gecko", + "Mozilla 1.5", + "Win 95+ / OSX.1+", + { + "version": "1.5", + "grade": "A" + } + ], + [ + "Gecko", + "Mozilla 1.6", + "Win 95+ / OSX.1+", + { + "version": "1.6", + "grade": "A" + } + ], + [ + "Gecko", + "Mozilla 1.7", + "Win 98+ / OSX.1+", + { + "version": "1.7", + "grade": "A" + } + ], + [ + "Gecko", + "Mozilla 1.8", + "Win 98+ / OSX.1+", + { + "version": "1.8", + "grade": "A" + } + ], + [ + "Gecko", + "Seamonkey 1.1", + "Win 98+ / OSX.2+", + { + "version": "1.8", + "grade": "A" + } + ], + [ + "Gecko", + "Epiphany 2.20", + "Gnome", + { + "version": "1.8", + "grade": "A" + } + ], + [ + "Webkit", + "Safari 1.2", + "OSX.3", + { + "version": "125.5", + "grade": "A" + } + ], + [ + "Webkit", + "Safari 1.3", + "OSX.3", + { + "version": "312.8", + "grade": "A" + } + ], + [ + "Webkit", + "Safari 2.0", + "OSX.4+", + { + "version": "419.3", + "grade": "A" + } + ], + [ + "Webkit", + "Safari 3.0", + "OSX.4+", + { + "version": "522.1", + "grade": "A" + } + ], + [ + "Webkit", + "OmniWeb 5.5", + "OSX.4+", + { + "version": "420", + "grade": "A" + } + ], + [ + "Webkit", + "iPod Touch / iPhone", + "iPod", + { + "version": "420.1", + "grade": "A" + } + ], + [ + "Webkit", + "S60", + "S60", + { + "version": "413", + "grade": "A" + } + ], + [ + "Presto", + "Opera 7.0", + "Win 95+ / OSX.1+", + { + "version": "-", + "grade": "A" + } + ], + [ + "Presto", + "Opera 7.5", + "Win 95+ / OSX.2+", + { + "version": "-", + "grade": "A" + } + ], + [ + "Presto", + "Opera 8.0", + "Win 95+ / OSX.2+", + { + "version": "-", + "grade": "A" + } + ], + [ + "Presto", + "Opera 8.5", + "Win 95+ / OSX.2+", + { + "version": "-", + "grade": "A" + } + ], + [ + "Presto", + "Opera 9.0", + "Win 95+ / OSX.3+", + { + "version": "-", + "grade": "A" + } + ], + [ + "Presto", + "Opera 9.2", + "Win 88+ / OSX.3+", + { + "version": "-", + "grade": "A" + } + ], + [ + "Presto", + "Opera 9.5", + "Win 88+ / OSX.3+", + { + "version": "-", + "grade": "A" + } + ], + [ + "Presto", + "Opera for Wii", + "Wii", + { + "version": "-", + "grade": "A" + } + ], + [ + "Presto", + "Nokia N800", + "N800", + { + "version": "-", + "grade": "A" + } + ], + [ + "Presto", + "Nintendo DS browser", + "Nintendo DS", + { + "version": "8.5", + "grade": "C/A1" + } + ], + [ + "KHTML", + "Konqureror 3.1", + "KDE 3.1", + { + "version": "3.1", + "grade": "C" + } + ], + [ + "KHTML", + "Konqureror 3.3", + "KDE 3.3", + { + "version": "3.3", + "grade": "A" + } + ], + [ + "KHTML", + "Konqureror 3.5", + "KDE 3.5", + { + "version": "3.5", + "grade": "A" + } + ], + [ + "Tasman", + "Internet Explorer 4.5", + "Mac OS 8-9", + { + "version": "-", + "grade": "X" + } + ], + [ + "Tasman", + "Internet Explorer 5.1", + "Mac OS 7.6-9", + { + "version": "1", + "grade": "C" + } + ], + [ + "Tasman", + "Internet Explorer 5.2", + "Mac OS 8-X", + { + "version": "1", + "grade": "C" + } + ], + [ + "Misc", + "NetFront 3.1", + "Embedded devices", + { + "version": "-", + "grade": "C" + } + ], + [ + "Misc", + "NetFront 3.4", + "Embedded devices", + { + "version": "-", + "grade": "A" + } + ], + [ + "Misc", + "Dillo 0.8", + "Embedded devices", + { + "version": "-", + "grade": "X" + } + ], + [ + "Misc", + "Links", + "Text only", + { + "version": "-", + "grade": "X" + } + ], + [ + "Misc", + "Lynx", + "Text only", + { + "version": "-", + "grade": "X" + } + ], + [ + "Misc", + "IE Mobile", + "Windows Mobile 6", + { + "version": "-", + "grade": "C" + } + ], + [ + "Misc", + "PSP browser", + "PSP", + { + "version": "-", + "grade": "C" + } + ], + [ + "Other browsers", + "All others", + "-", + { + "version": "-", + "grade": "U" + } + ] +] } \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/ajax/sources/custom_prop.txt b/docroot/sites/all/libraries/datatables/examples/ajax/sources/custom_prop.txt new file mode 100644 index 00000000..a65fcf73 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/ajax/sources/custom_prop.txt @@ -0,0 +1,59 @@ +{ "demo": [ + ["Trident","Internet Explorer 4.0","Win 95+","4","X"], + ["Trident","Internet Explorer 5.0","Win 95+","5","C"], + ["Trident","Internet Explorer 5.5","Win 95+","5.5","A"], + ["Trident","Internet Explorer 6","Win 98+","6","A"], + ["Trident","Internet Explorer 7","Win XP SP2+","7","A"], + ["Trident","AOL browser (AOL desktop)","Win XP","6","A"], + ["Gecko","Firefox 1.0","Win 98+ / OSX.2+","1.7","A"], + ["Gecko","Firefox 1.5","Win 98+ / OSX.2+","1.8","A"], + ["Gecko","Firefox 2.0","Win 98+ / OSX.2+","1.8","A"], + ["Gecko","Firefox 3.0","Win 2k+ / OSX.3+","1.9","A"], + ["Gecko","Camino 1.0","OSX.2+","1.8","A"], + ["Gecko","Camino 1.5","OSX.3+","1.8","A"], + ["Gecko","Netscape 7.2","Win 95+ / Mac OS 8.6-9.2","1.7","A"], + ["Gecko","Netscape Browser 8","Win 98SE+","1.7","A"], + ["Gecko","Netscape Navigator 9","Win 98+ / OSX.2+","1.8","A"], + ["Gecko","Mozilla 1.0","Win 95+ / OSX.1+",1,"A"], + ["Gecko","Mozilla 1.1","Win 95+ / OSX.1+",1.1,"A"], + ["Gecko","Mozilla 1.2","Win 95+ / OSX.1+",1.2,"A"], + ["Gecko","Mozilla 1.3","Win 95+ / OSX.1+",1.3,"A"], + ["Gecko","Mozilla 1.4","Win 95+ / OSX.1+",1.4,"A"], + ["Gecko","Mozilla 1.5","Win 95+ / OSX.1+",1.5,"A"], + ["Gecko","Mozilla 1.6","Win 95+ / OSX.1+",1.6,"A"], + ["Gecko","Mozilla 1.7","Win 98+ / OSX.1+",1.7,"A"], + ["Gecko","Mozilla 1.8","Win 98+ / OSX.1+",1.8,"A"], + ["Gecko","Seamonkey 1.1","Win 98+ / OSX.2+","1.8","A"], + ["Gecko","Epiphany 2.20","Gnome","1.8","A"], + ["Webkit","Safari 1.2","OSX.3","125.5","A"], + ["Webkit","Safari 1.3","OSX.3","312.8","A"], + ["Webkit","Safari 2.0","OSX.4+","419.3","A"], + ["Webkit","Safari 3.0","OSX.4+","522.1","A"], + ["Webkit","OmniWeb 5.5","OSX.4+","420","A"], + ["Webkit","iPod Touch / iPhone","iPod","420.1","A"], + ["Webkit","S60","S60","413","A"], + ["Presto","Opera 7.0","Win 95+ / OSX.1+","-","A"], + ["Presto","Opera 7.5","Win 95+ / OSX.2+","-","A"], + ["Presto","Opera 8.0","Win 95+ / OSX.2+","-","A"], + ["Presto","Opera 8.5","Win 95+ / OSX.2+","-","A"], + ["Presto","Opera 9.0","Win 95+ / OSX.3+","-","A"], + ["Presto","Opera 9.2","Win 88+ / OSX.3+","-","A"], + ["Presto","Opera 9.5","Win 88+ / OSX.3+","-","A"], + ["Presto","Opera for Wii","Wii","-","A"], + ["Presto","Nokia N800","N800","-","A"], + ["Presto","Nintendo DS browser","Nintendo DS","8.5","C/A1"], + ["KHTML","Konqureror 3.1","KDE 3.1","3.1","C"], + ["KHTML","Konqureror 3.3","KDE 3.3","3.3","A"], + ["KHTML","Konqureror 3.5","KDE 3.5","3.5","A"], + ["Tasman","Internet Explorer 4.5","Mac OS 8-9","-","X"], + ["Tasman","Internet Explorer 5.1","Mac OS 7.6-9","1","C"], + ["Tasman","Internet Explorer 5.2","Mac OS 8-X","1","C"], + ["Misc","NetFront 3.1","Embedded devices","-","C"], + ["Misc","NetFront 3.4","Embedded devices","-","A"], + ["Misc","Dillo 0.8","Embedded devices","-","X"], + ["Misc","Links","Text only","-","X"], + ["Misc","Lynx","Text only","-","X"], + ["Misc","IE Mobile","Windows Mobile 6","-","C"], + ["Misc","PSP browser","PSP","-","C"], + ["Other browsers","All others","-","-","U"] +] } \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/ajax/sources/deep.txt b/docroot/sites/all/libraries/datatables/examples/ajax/sources/deep.txt new file mode 100644 index 00000000..7a3124bc --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/ajax/sources/deep.txt @@ -0,0 +1,629 @@ +{ "aaData": [ + { + "engine": "Trident", + "browser": "Internet Explorer 4.0", + "platform": { + "inner": "Win 95+", + "details": [ + "4", + "X" + ] + } + }, + { + "engine": "Trident", + "browser": "Internet Explorer 5.0", + "platform": { + "inner": "Win 95+", + "details": [ + "5", + "C" + ] + } + }, + { + "engine": "Trident", + "browser": "Internet Explorer 5.5", + "platform": { + "inner": "Win 95+", + "details": [ + "5.5", + "A" + ] + } + }, + { + "engine": "Trident", + "browser": "Internet Explorer 6", + "platform": { + "inner": "Win 98+", + "details": [ + "6", + "A" + ] + } + }, + { + "engine": "Trident", + "browser": "Internet Explorer 7", + "platform": { + "inner": "Win XP SP2+", + "details": [ + "7", + "A" + ] + } + }, + { + "engine": "Trident", + "browser": "AOL browser (AOL desktop)", + "platform": { + "inner": "Win XP", + "details": [ + "6", + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Firefox 1.0", + "platform": { + "inner": "Win 98+ / OSX.2+", + "details": [ + "1.7", + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Firefox 1.5", + "platform": { + "inner": "Win 98+ / OSX.2+", + "details": [ + "1.8", + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Firefox 2.0", + "platform": { + "inner": "Win 98+ / OSX.2+", + "details": [ + "1.8", + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Firefox 3.0", + "platform": { + "inner": "Win 2k+ / OSX.3+", + "details": [ + "1.9", + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Camino 1.0", + "platform": { + "inner": "OSX.2+", + "details": [ + "1.8", + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Camino 1.5", + "platform": { + "inner": "OSX.3+", + "details": [ + "1.8", + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Netscape 7.2", + "platform": { + "inner": "Win 95+ / Mac OS 8.6-9.2", + "details": [ + "1.7", + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Netscape Browser 8", + "platform": { + "inner": "Win 98SE+", + "details": [ + "1.7", + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Netscape Navigator 9", + "platform": { + "inner": "Win 98+ / OSX.2+", + "details": [ + "1.8", + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.0", + "platform": { + "inner": "Win 95+ / OSX.1+", + "details": [ + 1, + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.1", + "platform": { + "inner": "Win 95+ / OSX.1+", + "details": [ + 1.1, + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.2", + "platform": { + "inner": "Win 95+ / OSX.1+", + "details": [ + 1.2, + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.3", + "platform": { + "inner": "Win 95+ / OSX.1+", + "details": [ + 1.3, + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.4", + "platform": { + "inner": "Win 95+ / OSX.1+", + "details": [ + 1.4, + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.5", + "platform": { + "inner": "Win 95+ / OSX.1+", + "details": [ + 1.5, + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.6", + "platform": { + "inner": "Win 95+ / OSX.1+", + "details": [ + 1.6, + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.7", + "platform": { + "inner": "Win 98+ / OSX.1+", + "details": [ + 1.7, + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.8", + "platform": { + "inner": "Win 98+ / OSX.1+", + "details": [ + 1.8, + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Seamonkey 1.1", + "platform": { + "inner": "Win 98+ / OSX.2+", + "details": [ + "1.8", + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Epiphany 2.20", + "platform": { + "inner": "Gnome", + "details": [ + "1.8", + "A" + ] + } + }, + { + "engine": "Webkit", + "browser": "Safari 1.2", + "platform": { + "inner": "OSX.3", + "details": [ + "125.5", + "A" + ] + } + }, + { + "engine": "Webkit", + "browser": "Safari 1.3", + "platform": { + "inner": "OSX.3", + "details": [ + "312.8", + "A" + ] + } + }, + { + "engine": "Webkit", + "browser": "Safari 2.0", + "platform": { + "inner": "OSX.4+", + "details": [ + "419.3", + "A" + ] + } + }, + { + "engine": "Webkit", + "browser": "Safari 3.0", + "platform": { + "inner": "OSX.4+", + "details": [ + "522.1", + "A" + ] + } + }, + { + "engine": "Webkit", + "browser": "OmniWeb 5.5", + "platform": { + "inner": "OSX.4+", + "details": [ + "420", + "A" + ] + } + }, + { + "engine": "Webkit", + "browser": "iPod Touch / iPhone", + "platform": { + "inner": "iPod", + "details": [ + "420.1", + "A" + ] + } + }, + { + "engine": "Webkit", + "browser": "S60", + "platform": { + "inner": "S60", + "details": [ + "413", + "A" + ] + } + }, + { + "engine": "Presto", + "browser": "Opera 7.0", + "platform": { + "inner": "Win 95+ / OSX.1+", + "details": [ + "-", + "A" + ] + } + }, + { + "engine": "Presto", + "browser": "Opera 7.5", + "platform": { + "inner": "Win 95+ / OSX.2+", + "details": [ + "-", + "A" + ] + } + }, + { + "engine": "Presto", + "browser": "Opera 8.0", + "platform": { + "inner": "Win 95+ / OSX.2+", + "details": [ + "-", + "A" + ] + } + }, + { + "engine": "Presto", + "browser": "Opera 8.5", + "platform": { + "inner": "Win 95+ / OSX.2+", + "details": [ + "-", + "A" + ] + } + }, + { + "engine": "Presto", + "browser": "Opera 9.0", + "platform": { + "inner": "Win 95+ / OSX.3+", + "details": [ + "-", + "A" + ] + } + }, + { + "engine": "Presto", + "browser": "Opera 9.2", + "platform": { + "inner": "Win 88+ / OSX.3+", + "details": [ + "-", + "A" + ] + } + }, + { + "engine": "Presto", + "browser": "Opera 9.5", + "platform": { + "inner": "Win 88+ / OSX.3+", + "details": [ + "-", + "A" + ] + } + }, + { + "engine": "Presto", + "browser": "Opera for Wii", + "platform": { + "inner": "Wii", + "details": [ + "-", + "A" + ] + } + }, + { + "engine": "Presto", + "browser": "Nokia N800", + "platform": { + "inner": "N800", + "details": [ + "-", + "A" + ] + } + }, + { + "engine": "Presto", + "browser": "Nintendo DS browser", + "platform": { + "inner": "Nintendo DS", + "details": [ + "8.5", + "C/A1" + ] + } + }, + { + "engine": "KHTML", + "browser": "Konqureror 3.1", + "platform": { + "inner": "KDE 3.1", + "details": [ + "3.1", + "C" + ] + } + }, + { + "engine": "KHTML", + "browser": "Konqureror 3.3", + "platform": { + "inner": "KDE 3.3", + "details": [ + "3.3", + "A" + ] + } + }, + { + "engine": "KHTML", + "browser": "Konqureror 3.5", + "platform": { + "inner": "KDE 3.5", + "details": [ + "3.5", + "A" + ] + } + }, + { + "engine": "Tasman", + "browser": "Internet Explorer 4.5", + "platform": { + "inner": "Mac OS 8-9", + "details": [ + "-", + "X" + ] + } + }, + { + "engine": "Tasman", + "browser": "Internet Explorer 5.1", + "platform": { + "inner": "Mac OS 7.6-9", + "details": [ + "1", + "C" + ] + } + }, + { + "engine": "Tasman", + "browser": "Internet Explorer 5.2", + "platform": { + "inner": "Mac OS 8-X", + "details": [ + "1", + "C" + ] + } + }, + { + "engine": "Misc", + "browser": "NetFront 3.1", + "platform": { + "inner": "Embedded devices", + "details": [ + "-", + "C" + ] + } + }, + { + "engine": "Misc", + "browser": "NetFront 3.4", + "platform": { + "inner": "Embedded devices", + "details": [ + "-", + "A" + ] + } + }, + { + "engine": "Misc", + "browser": "Dillo 0.8", + "platform": { + "inner": "Embedded devices", + "details": [ + "-", + "X" + ] + } + }, + { + "engine": "Misc", + "browser": "Links", + "platform": { + "inner": "Text only", + "details": [ + "-", + "X" + ] + } + }, + { + "engine": "Misc", + "browser": "Lynx", + "platform": { + "inner": "Text only", + "details": [ + "-", + "X" + ] + } + }, + { + "engine": "Misc", + "browser": "IE Mobile", + "platform": { + "inner": "Windows Mobile 6", + "details": [ + "-", + "C" + ] + } + }, + { + "engine": "Misc", + "browser": "PSP browser", + "platform": { + "inner": "PSP", + "details": [ + "-", + "C" + ] + } + }, + { + "engine": "Other browsers", + "browser": "All others", + "platform": { + "inner": "-", + "details": [ + "-", + "U" + ] + } + } +] } \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/ajax/sources/objects.txt b/docroot/sites/all/libraries/datatables/examples/ajax/sources/objects.txt new file mode 100644 index 00000000..1c3f870b --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/ajax/sources/objects.txt @@ -0,0 +1,401 @@ +{ "aaData": [ + { + "engine": "Trident", + "browser": "Internet Explorer 4.0", + "platform": "Win 95+", + "version": "4", + "grade": "X" + }, + { + "engine": "Trident", + "browser": "Internet Explorer 5.0", + "platform": "Win 95+", + "version": "5", + "grade": "C" + }, + { + "engine": "Trident", + "browser": "Internet Explorer 5.5", + "platform": "Win 95+", + "version": "5.5", + "grade": "A" + }, + { + "engine": "Trident", + "browser": "Internet Explorer 6", + "platform": "Win 98+", + "version": "6", + "grade": "A" + }, + { + "engine": "Trident", + "browser": "Internet Explorer 7", + "platform": "Win XP SP2+", + "version": "7", + "grade": "A" + }, + { + "engine": "Trident", + "browser": "AOL browser (AOL desktop)", + "platform": "Win XP", + "version": "6", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Firefox 1.0", + "platform": "Win 98+ / OSX.2+", + "version": "1.7", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Firefox 1.5", + "platform": "Win 98+ / OSX.2+", + "version": "1.8", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Firefox 2.0", + "platform": "Win 98+ / OSX.2+", + "version": "1.8", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Firefox 3.0", + "platform": "Win 2k+ / OSX.3+", + "version": "1.9", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Camino 1.0", + "platform": "OSX.2+", + "version": "1.8", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Camino 1.5", + "platform": "OSX.3+", + "version": "1.8", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Netscape 7.2", + "platform": "Win 95+ / Mac OS 8.6-9.2", + "version": "1.7", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Netscape Browser 8", + "platform": "Win 98SE+", + "version": "1.7", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Netscape Navigator 9", + "platform": "Win 98+ / OSX.2+", + "version": "1.8", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.0", + "platform": "Win 95+ / OSX.1+", + "version": "1", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.1", + "platform": "Win 95+ / OSX.1+", + "version": "1.1", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.2", + "platform": "Win 95+ / OSX.1+", + "version": "1.2", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.3", + "platform": "Win 95+ / OSX.1+", + "version": "1.3", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.4", + "platform": "Win 95+ / OSX.1+", + "version": "1.4", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.5", + "platform": "Win 95+ / OSX.1+", + "version": "1.5", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.6", + "platform": "Win 95+ / OSX.1+", + "version": "1.6", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.7", + "platform": "Win 98+ / OSX.1+", + "version": "1.7", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.8", + "platform": "Win 98+ / OSX.1+", + "version": "1.8", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Seamonkey 1.1", + "platform": "Win 98+ / OSX.2+", + "version": "1.8", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Epiphany 2.20", + "platform": "Gnome", + "version": "1.8", + "grade": "A" + }, + { + "engine": "Webkit", + "browser": "Safari 1.2", + "platform": "OSX.3", + "version": "125.5", + "grade": "A" + }, + { + "engine": "Webkit", + "browser": "Safari 1.3", + "platform": "OSX.3", + "version": "312.8", + "grade": "A" + }, + { + "engine": "Webkit", + "browser": "Safari 2.0", + "platform": "OSX.4+", + "version": "419.3", + "grade": "A" + }, + { + "engine": "Webkit", + "browser": "Safari 3.0", + "platform": "OSX.4+", + "version": "522.1", + "grade": "A" + }, + { + "engine": "Webkit", + "browser": "OmniWeb 5.5", + "platform": "OSX.4+", + "version": "420", + "grade": "A" + }, + { + "engine": "Webkit", + "browser": "iPod Touch / iPhone", + "platform": "iPod", + "version": "420.1", + "grade": "A" + }, + { + "engine": "Webkit", + "browser": "S60", + "platform": "S60", + "version": "413", + "grade": "A" + }, + { + "engine": "Presto", + "browser": "Opera 7.0", + "platform": "Win 95+ / OSX.1+", + "version": "-", + "grade": "A" + }, + { + "engine": "Presto", + "browser": "Opera 7.5", + "platform": "Win 95+ / OSX.2+", + "version": "-", + "grade": "A" + }, + { + "engine": "Presto", + "browser": "Opera 8.0", + "platform": "Win 95+ / OSX.2+", + "version": "-", + "grade": "A" + }, + { + "engine": "Presto", + "browser": "Opera 8.5", + "platform": "Win 95+ / OSX.2+", + "version": "-", + "grade": "A" + }, + { + "engine": "Presto", + "browser": "Opera 9.0", + "platform": "Win 95+ / OSX.3+", + "version": "-", + "grade": "A" + }, + { + "engine": "Presto", + "browser": "Opera 9.2", + "platform": "Win 88+ / OSX.3+", + "version": "-", + "grade": "A" + }, + { + "engine": "Presto", + "browser": "Opera 9.5", + "platform": "Win 88+ / OSX.3+", + "version": "-", + "grade": "A" + }, + { + "engine": "Presto", + "browser": "Opera for Wii", + "platform": "Wii", + "version": "-", + "grade": "A" + }, + { + "engine": "Presto", + "browser": "Nokia N800", + "platform": "N800", + "version": "-", + "grade": "A" + }, + { + "engine": "Presto", + "browser": "Nintendo DS browser", + "platform": "Nintendo DS", + "version": "8.5", + "grade": "C/A1" + }, + { + "engine": "KHTML", + "browser": "Konqureror 3.1", + "platform": "KDE 3.1", + "version": "3.1", + "grade": "C" + }, + { + "engine": "KHTML", + "browser": "Konqureror 3.3", + "platform": "KDE 3.3", + "version": "3.3", + "grade": "A" + }, + { + "engine": "KHTML", + "browser": "Konqureror 3.5", + "platform": "KDE 3.5", + "version": "3.5", + "grade": "A" + }, + { + "engine": "Tasman", + "browser": "Internet Explorer 4.5", + "platform": "Mac OS 8-9", + "version": "-", + "grade": "X" + }, + { + "engine": "Tasman", + "browser": "Internet Explorer 5.1", + "platform": "Mac OS 7.6-9", + "version": "1", + "grade": "C" + }, + { + "engine": "Tasman", + "browser": "Internet Explorer 5.2", + "platform": "Mac OS 8-X", + "version": "1", + "grade": "C" + }, + { + "engine": "Misc", + "browser": "NetFront 3.1", + "platform": "Embedded devices", + "version": "-", + "grade": "C" + }, + { + "engine": "Misc", + "browser": "NetFront 3.4", + "platform": "Embedded devices", + "version": "-", + "grade": "A" + }, + { + "engine": "Misc", + "browser": "Dillo 0.8", + "platform": "Embedded devices", + "version": "-", + "grade": "X" + }, + { + "engine": "Misc", + "browser": "Links", + "platform": "Text only", + "version": "-", + "grade": "X" + }, + { + "engine": "Misc", + "browser": "Lynx", + "platform": "Text only", + "version": "-", + "grade": "X" + }, + { + "engine": "Misc", + "browser": "IE Mobile", + "platform": "Windows Mobile 6", + "version": "-", + "grade": "C" + }, + { + "engine": "Misc", + "browser": "PSP browser", + "platform": "PSP", + "version": "-", + "grade": "C" + }, + { + "engine": "Other browsers", + "browser": "All others", + "platform": "-", + "version": "-", + "grade": "U" + } +] } \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/ajax/sources/objects_subarrays.txt b/docroot/sites/all/libraries/datatables/examples/ajax/sources/objects_subarrays.txt new file mode 100644 index 00000000..3b6da56c --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/ajax/sources/objects_subarrays.txt @@ -0,0 +1,515 @@ +{ "aaData": [ + { + "engine": "Trident", + "browser": "Internet Explorer 4.0", + "platform": "Win 95+", + "details": [ + "4", + "X" + ] + }, + { + "engine": "Trident", + "browser": "Internet Explorer 5.0", + "platform": "Win 95+", + "details": [ + "5", + "C" + ] + }, + { + "engine": "Trident", + "browser": "Internet Explorer 5.5", + "platform": "Win 95+", + "details": [ + "5.5", + "A" + ] + }, + { + "engine": "Trident", + "browser": "Internet Explorer 6", + "platform": "Win 98+", + "details": [ + "6", + "A" + ] + }, + { + "engine": "Trident", + "browser": "Internet Explorer 7", + "platform": "Win XP SP2+", + "details": [ + "7", + "A" + ] + }, + { + "engine": "Trident", + "browser": "AOL browser (AOL desktop)", + "platform": "Win XP", + "details": [ + "6", + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Firefox 1.0", + "platform": "Win 98+ / OSX.2+", + "details": [ + "1.7", + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Firefox 1.5", + "platform": "Win 98+ / OSX.2+", + "details": [ + "1.8", + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Firefox 2.0", + "platform": "Win 98+ / OSX.2+", + "details": [ + "1.8", + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Firefox 3.0", + "platform": "Win 2k+ / OSX.3+", + "details": [ + "1.9", + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Camino 1.0", + "platform": "OSX.2+", + "details": [ + "1.8", + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Camino 1.5", + "platform": "OSX.3+", + "details": [ + "1.8", + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Netscape 7.2", + "platform": "Win 95+ / Mac OS 8.6-9.2", + "details": [ + "1.7", + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Netscape Browser 8", + "platform": "Win 98SE+", + "details": [ + "1.7", + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Netscape Navigator 9", + "platform": "Win 98+ / OSX.2+", + "details": [ + "1.8", + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.0", + "platform": "Win 95+ / OSX.1+", + "details": [ + 1, + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.1", + "platform": "Win 95+ / OSX.1+", + "details": [ + 1.1, + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.2", + "platform": "Win 95+ / OSX.1+", + "details": [ + 1.2, + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.3", + "platform": "Win 95+ / OSX.1+", + "details": [ + 1.3, + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.4", + "platform": "Win 95+ / OSX.1+", + "details": [ + 1.4, + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.5", + "platform": "Win 95+ / OSX.1+", + "details": [ + 1.5, + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.6", + "platform": "Win 95+ / OSX.1+", + "details": [ + 1.6, + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.7", + "platform": "Win 98+ / OSX.1+", + "details": [ + 1.7, + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.8", + "platform": "Win 98+ / OSX.1+", + "details": [ + 1.8, + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Seamonkey 1.1", + "platform": "Win 98+ / OSX.2+", + "details": [ + "1.8", + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Epiphany 2.20", + "platform": "Gnome", + "details": [ + "1.8", + "A" + ] + }, + { + "engine": "Webkit", + "browser": "Safari 1.2", + "platform": "OSX.3", + "details": [ + "125.5", + "A" + ] + }, + { + "engine": "Webkit", + "browser": "Safari 1.3", + "platform": "OSX.3", + "details": [ + "312.8", + "A" + ] + }, + { + "engine": "Webkit", + "browser": "Safari 2.0", + "platform": "OSX.4+", + "details": [ + "419.3", + "A" + ] + }, + { + "engine": "Webkit", + "browser": "Safari 3.0", + "platform": "OSX.4+", + "details": [ + "522.1", + "A" + ] + }, + { + "engine": "Webkit", + "browser": "OmniWeb 5.5", + "platform": "OSX.4+", + "details": [ + "420", + "A" + ] + }, + { + "engine": "Webkit", + "browser": "iPod Touch / iPhone", + "platform": "iPod", + "details": [ + "420.1", + "A" + ] + }, + { + "engine": "Webkit", + "browser": "S60", + "platform": "S60", + "details": [ + "413", + "A" + ] + }, + { + "engine": "Presto", + "browser": "Opera 7.0", + "platform": "Win 95+ / OSX.1+", + "details": [ + "-", + "A" + ] + }, + { + "engine": "Presto", + "browser": "Opera 7.5", + "platform": "Win 95+ / OSX.2+", + "details": [ + "-", + "A" + ] + }, + { + "engine": "Presto", + "browser": "Opera 8.0", + "platform": "Win 95+ / OSX.2+", + "details": [ + "-", + "A" + ] + }, + { + "engine": "Presto", + "browser": "Opera 8.5", + "platform": "Win 95+ / OSX.2+", + "details": [ + "-", + "A" + ] + }, + { + "engine": "Presto", + "browser": "Opera 9.0", + "platform": "Win 95+ / OSX.3+", + "details": [ + "-", + "A" + ] + }, + { + "engine": "Presto", + "browser": "Opera 9.2", + "platform": "Win 88+ / OSX.3+", + "details": [ + "-", + "A" + ] + }, + { + "engine": "Presto", + "browser": "Opera 9.5", + "platform": "Win 88+ / OSX.3+", + "details": [ + "-", + "A" + ] + }, + { + "engine": "Presto", + "browser": "Opera for Wii", + "platform": "Wii", + "details": [ + "-", + "A" + ] + }, + { + "engine": "Presto", + "browser": "Nokia N800", + "platform": "N800", + "details": [ + "-", + "A" + ] + }, + { + "engine": "Presto", + "browser": "Nintendo DS browser", + "platform": "Nintendo DS", + "details": [ + "8.5", + "C/A1" + ] + }, + { + "engine": "KHTML", + "browser": "Konqureror 3.1", + "platform": "KDE 3.1", + "details": [ + "3.1", + "C" + ] + }, + { + "engine": "KHTML", + "browser": "Konqureror 3.3", + "platform": "KDE 3.3", + "details": [ + "3.3", + "A" + ] + }, + { + "engine": "KHTML", + "browser": "Konqureror 3.5", + "platform": "KDE 3.5", + "details": [ + "3.5", + "A" + ] + }, + { + "engine": "Tasman", + "browser": "Internet Explorer 4.5", + "platform": "Mac OS 8-9", + "details": [ + "-", + "X" + ] + }, + { + "engine": "Tasman", + "browser": "Internet Explorer 5.1", + "platform": "Mac OS 7.6-9", + "details": [ + "1", + "C" + ] + }, + { + "engine": "Tasman", + "browser": "Internet Explorer 5.2", + "platform": "Mac OS 8-X", + "details": [ + "1", + "C" + ] + }, + { + "engine": "Misc", + "browser": "NetFront 3.1", + "platform": "Embedded devices", + "details": [ + "-", + "C" + ] + }, + { + "engine": "Misc", + "browser": "NetFront 3.4", + "platform": "Embedded devices", + "details": [ + "-", + "A" + ] + }, + { + "engine": "Misc", + "browser": "Dillo 0.8", + "platform": "Embedded devices", + "details": [ + "-", + "X" + ] + }, + { + "engine": "Misc", + "browser": "Links", + "platform": "Text only", + "details": [ + "-", + "X" + ] + }, + { + "engine": "Misc", + "browser": "Lynx", + "platform": "Text only", + "details": [ + "-", + "X" + ] + }, + { + "engine": "Misc", + "browser": "IE Mobile", + "platform": "Windows Mobile 6", + "details": [ + "-", + "C" + ] + }, + { + "engine": "Misc", + "browser": "PSP browser", + "platform": "PSP", + "details": [ + "-", + "C" + ] + }, + { + "engine": "Other browsers", + "browser": "All others", + "platform": "-", + "details": [ + "-", + "U" + ] + } +] } \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/api/add_row.html b/docroot/sites/all/libraries/datatables/examples/api/add_row.html new file mode 100644 index 00000000..295d299a --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/api/add_row.html @@ -0,0 +1,221 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables add row example +
+ +

Preamble

+

DataTables adding rows in DataTables is done by assigning the DataTables jQuery object to a variable when initialising it, and then using it's API methods to add a new row. Deleting rows can be done in a similar manner.

+ +

Live example

+

Click to add a new row

+ +
+ + + + + + + + + + + + + + + + + +
Column 1Column 2Column 3Column 4
allanallanallanallan
+
+
+ + +

Initialisation code

+
/* Global var for counter */
+var giCount = 1;
+
+$(document).ready(function() {
+	$('#example').dataTable();
+} );
+
+function fnClickAddRow() {
+	$('#example').dataTable().fnAddData( [
+		giCount+".1",
+		giCount+".2",
+		giCount+".3",
+		giCount+".4" ] );
+	
+	giCount++;
+}
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/api/api_in_init.html b/docroot/sites/all/libraries/datatables/examples/api/api_in_init.html new file mode 100644 index 00000000..c6dc61ff --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/api/api_in_init.html @@ -0,0 +1,615 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables using the DataTables object in the initialiser example +
+ +

Preamble

+

There are times when you may wish to call API functions inside the DataTables callback functions (for example fnInitComplete, fnRowCallback etc). The complicating issue with this is that the object hasn't fully initialised, so you can't assign the result to something like oTable and then use oTable in the callback. However, this is catered for by the execution scope of the callback function. Here this is the DataTables object that is created for the table.

+

In this example you will be able to see that this.$() is used to get all nodes in the table's body and then act on them (in this case added a click event). Note also the value of this stored in the variable that so it can be used inside the jQuery click function, where the execution scope has been changed to the td element!). The action here is to apply the filter with the value of what is in each cell.

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
TridentInternet + Explorer 4.0Win 95+4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	$('#example').dataTable( {
+		"fnInitComplete": function () {
+			var that = this;
+			this.$('td').click( function () {
+				that.fnFilter( this.innerHTML );
+			} );
+		}
+	} );
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/api/counter_column.html b/docroot/sites/all/libraries/datatables/examples/api/counter_column.html new file mode 100644 index 00000000..fa84f37c --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/api/counter_column.html @@ -0,0 +1,690 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables row numbers example +
+ +

Preamble

+

A fairly common requirement for highly interactive tables which are displayed on the web is to have a column which with a 'counter' for the row number. This column should not be sortable, and change dynamically as the sorting and filtering applied to the table is altered by the end user.

+

This example shows how this can be achieved with DataTables, where the first column is the counter column, and is updated when sorting or filtering occurs. Also the first column is marked as un-sortable and initial sorting is applied only on the second column.

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IndexRendering engineBrowserPlatform(s)Engine versionCSS grade
1TridentInternet + Explorer 4.0Win 95+4X
2TridentInternet + Explorer 5.0Win 95+5C
3TridentInternet + Explorer 5.5Win 95+5.5A
4TridentInternet + Explorer 6Win 98+6A
5TridentInternet Explorer 7Win XP SP2+7A
6TridentAOL browser (AOL desktop)Win XP6A
7GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
8GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
9GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
10GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
11GeckoCamino 1.0OSX.2+1.8A
12GeckoCamino 1.5OSX.3+1.8A
13GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
14GeckoNetscape Browser 8Win 98SE+1.7A
15GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
16GeckoMozilla 1.0Win 95+ / OSX.1+1A
17GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
18GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
19GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
20GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
21GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
22GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
23GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
24GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
25GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
26GeckoEpiphany 2.20Gnome1.8A
27WebkitSafari 1.2OSX.3125.5A
28WebkitSafari 1.3OSX.3312.8A
29WebkitSafari 2.0OSX.4+419.3A
30WebkitSafari 3.0OSX.4+522.1A
31WebkitOmniWeb 5.5OSX.4+420A
32WebkitiPod Touch / iPhoneiPod420.1A
33WebkitS60S60413A
34PrestoOpera 7.0Win 95+ / OSX.1+-A
35PrestoOpera 7.5Win 95+ / OSX.2+-A
36PrestoOpera 8.0Win 95+ / OSX.2+-A
37PrestoOpera 8.5Win 95+ / OSX.2+-A
38PrestoOpera 9.0Win 95+ / OSX.3+-A
39PrestoOpera 9.2Win 88+ / OSX.3+-A
40PrestoOpera 9.5Win 88+ / OSX.3+-A
41PrestoOpera for WiiWii-A
42PrestoNokia N800N800-A
43PrestoNintendo DS browserNintendo DS8.5C/A1
44KHTMLKonqureror 3.1KDE 3.13.1C
45KHTMLKonqureror 3.3KDE 3.33.3A
46KHTMLKonqureror 3.5KDE 3.53.5A
47TasmanInternet Explorer 4.5Mac OS 8-9-X
48TasmanInternet Explorer 5.1Mac OS 7.6-91C
49TasmanInternet Explorer 5.2Mac OS 8-X1C
50MiscNetFront 3.1Embedded devices-C
51MiscNetFront 3.4Embedded devices-A
52MiscDillo 0.8Embedded devices-X
53MiscLinksText only-X
54MiscLynxText only-X
55MiscIE MobileWindows Mobile 6-C
56MiscPSP browserPSP-C
57Other browsersAll others--U
IndexRendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	$('#example').dataTable( {
+		"fnDrawCallback": function ( oSettings ) {
+			/* Need to redo the counters if filtered or sorted */
+			if ( oSettings.bSorted || oSettings.bFiltered )
+			{
+				this.$('td:first-child', {"filter":"applied"}).each( function (i) {
+					that.fnUpdate( i+1, this.parentNode, 0, false, false );
+				} );
+			}
+		},
+		"aoColumnDefs": [
+			{ "bSortable": false, "aTargets": [ 0 ] }
+		],
+		"aaSorting": [[ 1, 'asc' ]]
+	} );
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/api/editable.html b/docroot/sites/all/libraries/datatables/examples/api/editable.html new file mode 100644 index 00000000..154baf83 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/api/editable.html @@ -0,0 +1,640 @@ + + + + + + + DataTables example + + + + + + + +
+
+ DataTables editing example +
+ +

Preamble

+

Using DataTables in-combination with the excellent jEditable plugin for jQuery allows you to produce a table which can have individual cells edited. The table can then be updated such that filtering, sorting etc. will all work as expected. This is showing in the demo below.

+

The example shows how a table element can be edited (you could limit to a particular column if you wish using the selector), posted to the server (for saving in a database or whatever) and then placed back into the DataTable. The server's processing in this example simply appends the string '(server updated)' to indicate that something has happened on the server.

+

Note also that this example makes use of the information in the 'ID' attribute of the TR element. This is useful in order to tell the server what row is being updated - this can readily be expended to include column information as required. Further to this, it is worth noting that to use this type of example with DataTables' server-side processing option, you must use fnDrawCallback to apply the event listeners on each draw.

+

Finally, if you are interested in a full CRUD implementation for DataTables, check out the Editor plug-in for DataTables, which provides a flexible and easy to use create, edit and delete environment for DataTables controlled tables with full server interaction.

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
TridentInternet + Explorer + 4.0 + Win 95+4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	/* Init DataTables */
+	var oTable = $('#example').dataTable();
+	
+	/* Apply the jEditable handlers to the table */
+	oTable.$('td').editable( '../examples_support/editable_ajax.php', {
+		"callback": function( sValue, y ) {
+			var aPos = oTable.fnGetPosition( this );
+			oTable.fnUpdate( sValue, aPos[0], aPos[1] );
+		},
+		"submitdata": function ( value, settings ) {
+			return {
+				"row_id": this.parentNode.getAttribute('id'),
+				"column": oTable.fnGetPosition( this )[2]
+			};
+		},
+		"height": "14px",
+		"width": "100%"
+	} );
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/api/form.html b/docroot/sites/all/libraries/datatables/examples/api/form.html new file mode 100644 index 00000000..2c568fa1 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/api/form.html @@ -0,0 +1,680 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables with form elements example +
+ +

Preamble

+

The following example shows how form elements can be used within a DataTables enhanced table. The trick here is that DataTables does not include the DOM elements which are not currently being displayed, therefore you need to add a submit event handler to gather together all of the input elements from the table, and then use the handy jQuery serialize() function to string together the data. It can then be posted to the server as you wish.

+ +

Live example

+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS gradeCheck
TridentInternet + Explorer 4.0Win 95+4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
Rendering engineBrowserPlatform(s)Engine versionCSS gradeCheck
+
+
+
+ + +

Initialisation code

+
var oTable;
+
+$(document).ready(function() {
+	$('#form').submit( function() {
+		var sData = oTable.$('input').serialize();
+		alert( "The following data would have been submitted to the server: \n\n"+sData );
+		return false;
+	} );
+	
+	oTable = $('#example').dataTable();
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/api/highlight.html b/docroot/sites/all/libraries/datatables/examples/api/highlight.html new file mode 100644 index 00000000..f7c56316 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/api/highlight.html @@ -0,0 +1,618 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables highlighting example +
+ +

Preamble

+

The highlighting of rows and columns have be quite useful for attracting attention to where the user's cursor is in the data array. Of course the highlighting of a row is easy enough using CSS, but for column highlighting, you need to use a little bit of Javascript. This example shows that in action on a DataTables enhanced table - this type of effect would be particularly effective on tables with dense information.

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
TridentInternet + Explorer 4.0Win 95+4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	var oTable = $('#example').dataTable( {
+		"bSortClasses": false
+	} );
+	
+	oTable.$('td').hover( function() {
+		var iCol = $('td', this.parentNode).index(this) % 5;
+		$('td:nth-child('+(iCol+1)+')', oTable.$('tr')).addClass( 'highlighted' );
+	}, function() {
+		oTable.$('td.highlighted').removeClass('highlighted');
+	} );
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/api/multi_filter.html b/docroot/sites/all/libraries/datatables/examples/api/multi_filter.html new file mode 100644 index 00000000..648d3213 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/api/multi_filter.html @@ -0,0 +1,676 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables individual column filtering example +
+ +

Preamble

+

The filtering functionality that is provided by DataTables is very useful for quickly search through the information in the table - however the search is global, and you (or the end user) may wish to filter only on a particular column of data. To met this need the DataTables fnFilter() API function allow you to specify a column to limit to search to. Note that this works in-combination with the global search filter. Further note that because the input elements are outside of the control of DataTables, with state saving enabled, stored values are not automatically restored - please see this post in the forum for how to do this.

+

The example below shows a table which has a text input box for each column in the footer element of the table. This allows the data in each column to be quickly filtered upon by the end user.

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
TridentInternet + Explorer 4.0Win 95+4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
+
+
+ + +

Initialisation code

+
var asInitVals = new Array();
+
+$(document).ready(function() {
+	var oTable = $('#example').dataTable( {
+		"oLanguage": {
+			"sSearch": "Search all columns:"
+		}
+	} );
+	
+	$("tfoot input").keyup( function () {
+		/* Filter on the column (the index) of this element */
+		oTable.fnFilter( this.value, $("tfoot input").index(this) );
+	} );
+	
+	
+	
+	/*
+	 * Support functions to provide a little bit of 'user friendlyness' to the textboxes in 
+	 * the footer
+	 */
+	$("tfoot input").each( function (i) {
+		asInitVals[i] = this.value;
+	} );
+	
+	$("tfoot input").focus( function () {
+		if ( this.className == "search_init" )
+		{
+			this.className = "";
+			this.value = "";
+		}
+	} );
+	
+	$("tfoot input").blur( function (i) {
+		if ( this.value == "" )
+		{
+			this.className = "search_init";
+			this.value = asInitVals[$("tfoot input").index(this)];
+		}
+	} );
+} );
+ + +

Note that in the above code, the support functions are provided to ensure that the end user knows what data is being filtered upon. fnFilter() is the function of primary import here.

+ + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/api/multi_filter_select.html b/docroot/sites/all/libraries/datatables/examples/api/multi_filter_select.html new file mode 100644 index 00000000..befe999b --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/api/multi_filter_select.html @@ -0,0 +1,759 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables individual column filtering example (using select menus) +
+ +

Preamble

+

This example is almost identical to individual column example and provides the same functionality, but using <select> menus rather than input elements. The API plug-in function fnGetColumnData from Benedikt Forchhammer provides much of the logic processing required, and integration with a table is almost trivial.

+

One possible interaction chance would be to make use of fnGetColumnData's ability to get filtered data, so you could have the possible filtering values in the select menus to update to only those in the table, rather than all values.

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
TridentInternet + Explorer 4.0Win 95+4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
+
+
+ + +

Initialisation code

+
(function($) {
+/*
+ * Function: fnGetColumnData
+ * Purpose:  Return an array of table values from a particular column.
+ * Returns:  array string: 1d data array 
+ * Inputs:   object:oSettings - dataTable settings object. This is always the last argument past to the function
+ *           int:iColumn - the id of the column to extract the data from
+ *           bool:bUnique - optional - if set to false duplicated values are not filtered out
+ *           bool:bFiltered - optional - if set to false all the table data is used (not only the filtered)
+ *           bool:bIgnoreEmpty - optional - if set to false empty values are not filtered from the result array
+ * Author:   Benedikt Forchhammer <b.forchhammer /AT\ mind2.de>
+ */
+$.fn.dataTableExt.oApi.fnGetColumnData = function ( oSettings, iColumn, bUnique, bFiltered, bIgnoreEmpty ) {
+	// check that we have a column id
+	if ( typeof iColumn == "undefined" ) return new Array();
+	
+	// by default we only want unique data
+	if ( typeof bUnique == "undefined" ) bUnique = true;
+	
+	// by default we do want to only look at filtered data
+	if ( typeof bFiltered == "undefined" ) bFiltered = true;
+	
+	// by default we do not want to include empty values
+	if ( typeof bIgnoreEmpty == "undefined" ) bIgnoreEmpty = true;
+	
+	// list of rows which we're going to loop through
+	var aiRows;
+	
+	// use only filtered rows
+	if (bFiltered == true) aiRows = oSettings.aiDisplay; 
+	// use all rows
+	else aiRows = oSettings.aiDisplayMaster; // all row numbers
+
+	// set up data array	
+	var asResultData = new Array();
+	
+	for (var i=0,c=aiRows.length; i<c; i++) {
+		iRow = aiRows[i];
+		var aData = this.fnGetData(iRow);
+		var sValue = aData[iColumn];
+		
+		// ignore empty values?
+		if (bIgnoreEmpty == true && sValue.length == 0) continue;
+
+		// ignore unique values?
+		else if (bUnique == true && jQuery.inArray(sValue, asResultData) > -1) continue;
+		
+		// else push the value onto the result data array
+		else asResultData.push(sValue);
+	}
+	
+	return asResultData;
+}}(jQuery));
+
+
+function fnCreateSelect( aData )
+{
+	var r='<select><option value=""></option>', i, iLen=aData.length;
+	for ( i=0 ; i<iLen ; i++ )
+	{
+		r += '<option value="'+aData[i]+'">'+aData[i]+'</option>';
+	}
+	return r+'</select>';
+}
+
+
+$(document).ready(function() {
+	/* Initialise the DataTable */
+	var oTable = $('#example').dataTable( {
+		"oLanguage": {
+			"sSearch": "Search all columns:"
+		}
+	} );
+	
+	/* Add a select menu for each TH element in the table footer */
+	$("tfoot th").each( function ( i ) {
+		this.innerHTML = fnCreateSelect( oTable.fnGetColumnData(i) );
+		$('select', this).change( function () {
+			oTable.fnFilter( $(this).val(), i );
+		} );
+	} );
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/api/regex.html b/docroot/sites/all/libraries/datatables/examples/api/regex.html new file mode 100644 index 00000000..2ea7a179 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/api/regex.html @@ -0,0 +1,726 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables filtering API example +
+ +

Preamble

+

Filtering a table is one of the most common user interactions with a DataTables table, and DataTables provides a number of methods for you to control this interaction. There is a global filter, and a filter for each individual column. The global filter acts on each column.

+

Each filter (global or column) can be marked as a regular expression (allowing you to create very complex interactions) and as a smart filter or not. When smart filtering is enabled on a particular filter, DataTables will modify the user input string to a complex regular expression which can make filtering more intuitive.

+

This example allows you to "play" with the various filtering options that DataTables provides.

+ +

Live example

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TargetFilter textTreat as regexUse smart filter
Global filtering
Column 1
Column 2
Column 3
Column 4
Column 5
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
TridentInternet + Explorer 4.0Win 95+4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5,5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1,7A
GeckoFirefox 1.5Win 98+ / OSX.2+1,8A
GeckoFirefox 2.0Win 98+ / OSX.2+1,8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1,9A
GeckoCamino 1.0OSX.2+1,8A
GeckoCamino 1.5OSX.3+1,8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1,7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1,8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1,1A
GeckoMozilla 1.2Win 95+ / OSX.1+1,2A
GeckoMozilla 1.3Win 95+ / OSX.1+1,3A
GeckoMozilla 1.4Win 95+ / OSX.1+1,4A
GeckoMozilla 1.5Win 95+ / OSX.1+1,5A
GeckoMozilla 1.6Win 95+ / OSX.1+1,6A
GeckoMozilla 1.7Win 98+ / OSX.1+1,7A
GeckoMozilla 1.8Win 98+ / OSX.1+1,8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1,8A
GeckoEpiphany 2.20Gnome1,8A
WebkitSafari 1.2OSX.3125,5A
WebkitSafari 1.3OSX.3312,8A
WebkitSafari 2.0OSX.4+419,3A
WebkitSafari 3.0OSX.4+522,1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420,1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8,5C/A1
KHTMLKonqureror 3.1KDE 3.13,1C
KHTMLKonqureror 3.3KDE 3.33,3A
KHTMLKonqureror 3.5KDE 3.53,5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
function fnFilterGlobal ()
+{
+	$('#example').dataTable().fnFilter( 
+		$("#global_filter").val(),
+		null, 
+		$("#global_regex")[0].checked, 
+		$("#global_smart")[0].checked
+	);
+}
+
+function fnFilterColumn ( i )
+{
+	$('#example').dataTable().fnFilter( 
+		$("#col"+(i+1)+"_filter").val(),
+		i, 
+		$("#col"+(i+1)+"_regex")[0].checked, 
+		$("#col"+(i+1)+"_smart")[0].checked
+	);
+}
+
+$(document).ready(function() {
+	$('#example').dataTable();
+	
+	$("#global_filter").keyup( fnFilterGlobal );
+	$("#global_regex").click( fnFilterGlobal );
+	$("#global_smart").click( fnFilterGlobal );
+	
+	$("#col1_filter").keyup( function() { fnFilterColumn( 0 ); } );
+	$("#col1_regex").click(  function() { fnFilterColumn( 0 ); } );
+	$("#col1_smart").click(  function() { fnFilterColumn( 0 ); } );
+	
+	// ... etc for the other four columns
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/api/row_details.html b/docroot/sites/all/libraries/datatables/examples/api/row_details.html new file mode 100644 index 00000000..f7f73dc0 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/api/row_details.html @@ -0,0 +1,705 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables hidden row details example +
+ +

Preamble

+

DataTables has most features enabled by default, so all you need to do to use it with one of your own tables is to call the construction function (as shown below).

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
TridentInternet + Explorer 4.0Win 95+4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
+
+
+ + +

Initialisation code

+
/* Formating function for row details */
+function fnFormatDetails ( oTable, nTr )
+{
+	var aData = oTable.fnGetData( nTr );
+	var sOut = '<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;">';
+	sOut += '<tr><td>Rendering engine:</td><td>'+aData[1]+' '+aData[4]+'</td></tr>';
+	sOut += '<tr><td>Link to source:</td><td>Could provide a link here</td></tr>';
+	sOut += '<tr><td>Extra info:</td><td>And any further details here (images etc)</td></tr>';
+	sOut += '</table>';
+	
+	return sOut;
+}
+
+$(document).ready(function() {
+	/*
+	 * Insert a 'details' column to the table
+	 */
+	var nCloneTh = document.createElement( 'th' );
+	var nCloneTd = document.createElement( 'td' );
+	nCloneTd.innerHTML = '<img src="../examples_support/details_open.png">';
+	nCloneTd.className = "center";
+	
+	$('#example thead tr').each( function () {
+		this.insertBefore( nCloneTh, this.childNodes[0] );
+	} );
+	
+	$('#example tbody tr').each( function () {
+		this.insertBefore(  nCloneTd.cloneNode( true ), this.childNodes[0] );
+	} );
+	
+	/*
+	 * Initialse DataTables, with no sorting on the 'details' column
+	 */
+	var oTable = $('#example').dataTable( {
+		"aoColumnDefs": [
+			{ "bSortable": false, "aTargets": [ 0 ] }
+		],
+		"aaSorting": [[1, 'asc']]
+	});
+	
+	/* Add event listener for opening and closing details
+	 * Note that the indicator for showing which row is open is not controlled by DataTables,
+	 * rather it is done here
+	 */
+	$('#example tbody td img').live('click', function () {
+		var nTr = $(this).parents('tr')[0];
+		if ( oTable.fnIsOpen(nTr) )
+		{
+			/* This row is already open - close it */
+			this.src = "../examples_support/details_open.png";
+			oTable.fnClose( nTr );
+		}
+		else
+		{
+			/* Open this row */
+			this.src = "../examples_support/details_close.png";
+			oTable.fnOpen( nTr, fnFormatDetails(oTable, nTr), 'details' );
+		}
+	} );
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/api/select_row.html b/docroot/sites/all/libraries/datatables/examples/api/select_row.html new file mode 100644 index 00000000..8b6fbc5d --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/api/select_row.html @@ -0,0 +1,630 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables row select example +
+ +

Preamble

+

It can be quite useful at times to provide the user with the option to select rows in a DataTable. This can be done by simply using a click event to add/remove a class on the table rows. The the selected rows are then provided through the custom function fnGetSelected() for later processing.

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
TridentInternet + Explorer 4.0Win 95+4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	/* Add/remove class to a row when clicked on */
+	$('#example tr').click( function() {
+		$(this).toggleClass('row_selected');
+	} );
+	
+	/* Init the table */
+	var oTable = $('#example').dataTable( );
+} );
+
+/*
+ * I don't actually use this here, but it is provided as it might be useful and demonstrates
+ * getting the TR nodes from DataTables
+ */
+function fnGetSelected( oTableLocal )
+{
+	return oTableLocal.$('tr.row_selected');
+}
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/api/select_single_row.html b/docroot/sites/all/libraries/datatables/examples/api/select_single_row.html new file mode 100644 index 00000000..d8fbdfa8 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/api/select_single_row.html @@ -0,0 +1,659 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables row select example +
+ +

Preamble

+

It can be quite useful at times to provide the user with the option to select rows in a DataTable. In this example we use standard jQuery 'click' events to add a class to table rows to indicate that they have been selected. Note that we use oTable.$() when working with rows in the table to ensure that all rows are considered, regardless of paging and filtering.

+ +

Live example

+

Delete selected row

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
TridentInternet + Explorer 4.0Win 95+4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
var oTable;
+
+$(document).ready(function() {
+	/* Add a click handler to the rows - this could be used as a callback */
+	$("#example tbody tr").click( function( e ) {
+		if ( $(this).hasClass('row_selected') ) {
+			$(this).removeClass('row_selected');
+		}
+		else {
+			oTable.$('tr.row_selected').removeClass('row_selected');
+			$(this).addClass('row_selected');
+		}
+	});
+	
+	/* Add a click handler for the delete row */
+	$('#delete').click( function() {
+		var anSelected = fnGetSelected( oTable );
+		if ( anSelected.length !== 0 ) {
+			oTable.fnDeleteRow( anSelected[0] );
+		}
+	} );
+	
+	/* Init the table */
+	oTable = $('#example').dataTable( );
+} );
+
+
+/* Get the rows which are currently selected */
+function fnGetSelected( oTableLocal )
+{
+	return oTableLocal.$('tr.row_selected');
+}
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/api/show_hide.html b/docroot/sites/all/libraries/datatables/examples/api/show_hide.html new file mode 100644 index 00000000..f385c783 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/api/show_hide.html @@ -0,0 +1,630 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables show and hide columns dynamically example +
+ +

Preamble

+

This example shows how you can make use of the fnSetColumnVis() API function to show and hide columns in a table dynamically, after the table has been initialised (we've also got scrolling enabled here, although that is not required for the API function to work).

+ + Toggle column 1
+ Toggle column 2
+ Toggle column 3
+ Toggle column 4
+ Toggle column 5
+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
TridentInternet + Explorer 4.0Win 95+4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	$('#example').dataTable( {
+		"sScrollY": "200px",
+		"bPaginate": false
+	} );
+} );
+
+function fnShowHide( iCol )
+{
+	/* Get the DataTables object again - this is not a recreation, just a get of the object */
+	var oTable = $('#example').dataTable();
+	
+	var bVis = oTable.fnSettings().aoColumns[iCol].bVisible;
+	oTable.fnSetColumnVis( iCol, bVis ? false : true );
+}
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/api/tabs_and_scrolling.html b/docroot/sites/all/libraries/datatables/examples/api/tabs_and_scrolling.html new file mode 100644 index 00000000..c370ad85 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/api/tabs_and_scrolling.html @@ -0,0 +1,456 @@ + + + + + + + DataTables example + + + + + + + +
+
+ DataTables scrolling and jQuery UI tabs +
+ +

Preamble

+

This example shows how DataTables with scrolling can be used together with jQuery UI tabs (or indeed any other method whereby the table is in a hidden (display:none) element when it is initialised). The reason this requires special consideration, is that when DataTables is initialised and it is in a hidden element, the browser doesn't have any measurements with which to give DataTables, and this will require in the misalignment of columns when scrolling is enabled.

+

The method to get around this is to call the fnAdjustColumnSizing API function. This function will calculate the column widths that are needed based on the current data and then redraw the table - which is exactly what is needed when the table becomes visible for the first time. For this we use the 'show' method provided by jQuery UI tables. We check to see if the DataTable has been created or not (note the extra selector for 'div.dataTables_scrollBody', this is added when the DataTable is initialised). If the table has been initialised, we re-size it. An optimisation could be added to re-size only of the first showing of the table.

+ +

Live example

+
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionGrade
Rendering engineBrowserPlatform(s)Engine versionGrade
TridentInternet + Explorer 4.0Win 95+4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionGrade
Rendering engineBrowserPlatform(s)Engine versionGrade
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
+
+
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	$("#tabs").tabs( {
+		"show": function(event, ui) {
+			var table = $.fn.dataTable.fnTables(true);
+			if ( table.length > 0 ) {
+				$(table).dataTable().fnAdjustColumnSizing();
+			}
+		}
+	} );
+	
+	$('table.display').dataTable( {
+		"sScrollY": "200px",
+		"bScrollCollapse": true,
+		"bPaginate": false,
+		"bJQueryUI": true,
+		"aoColumnDefs": [
+			{ "sWidth": "10%", "aTargets": [ -1 ] }
+		]
+	} );
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/basic_init/alt_pagination.html b/docroot/sites/all/libraries/datatables/examples/basic_init/alt_pagination.html new file mode 100644 index 00000000..d9b58ff6 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/basic_init/alt_pagination.html @@ -0,0 +1,609 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables alternative pagination example +
+ +

Preamble

+

The page controls which are used by default in DataTables (forward and backward buttons only) are great for most situations, but there are cases where you may wish to customise the controls presented to the end user. This is made simple by DataTables through its extensible pagination mechanism. There are two types of pagination controls built into DataTables: two_button (default) and full_numbers. To switch between these two types, use the sPaginationType initialisation parameter. You can add additional types of pagination control by extending the $.fn.dataTableExt.oPagination object.

+

Note also that the number of pages which are shown with direct links (the 1, 2, 3...) can be changed by setting the variable jQuery.fn.dataTableExt.oPagination.iFullNumbersShowPages (default 5). Odd numbers are best to keep the display even.

+

The example below shows the full_numbers type of pagination, where 'first', 'previous', 'next' and 'last' buttons are presented, as well as the five pages around the current page.

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
Trident + Internet + Explorer + 4.0 + Win 95+4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	$('#example').dataTable( {
+		"sPaginationType": "full_numbers"
+	} );
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/basic_init/base.html b/docroot/sites/all/libraries/datatables/examples/basic_init/base.html new file mode 100644 index 00000000..ecc619e4 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/basic_init/base.html @@ -0,0 +1,596 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables base example (CDN CSS) +
+ +

Preamble

+

DataTables has most features enabled by default, so all you need to do to use it with one of your own tables is to call the construction function (as shown below).

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
TridentInternet + Explorer 4.0Win 95+ 4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	$('#example').dataTable();
+} );
+ + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/basic_init/base_themeroller.html b/docroot/sites/all/libraries/datatables/examples/basic_init/base_themeroller.html new file mode 100644 index 00000000..2f84d46e --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/basic_init/base_themeroller.html @@ -0,0 +1,592 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables base example (CDN CSS) +
+ +

Preamble

+

DataTables has most features enabled by default, so all you need to do to use it with one of your own tables is to call the construction function (as shown below).

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
TridentInternet + Explorer 4.0Win 95+ 4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	$('#example').dataTable();
+} );
+ + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/basic_init/complex_header.html b/docroot/sites/all/libraries/datatables/examples/basic_init/complex_header.html new file mode 100644 index 00000000..b9ecdcf5 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/basic_init/complex_header.html @@ -0,0 +1,606 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables complex header example (row and colspans) +
+ +

Preamble

+

When using tables to display data, you will often wish to display column information in groups. DataTables fully supports colspan and rowspans in the header, assigning the required sorting listeners to the TH element suitable for that column. Each column must have one TH cell (and only one) which is unique to it for the listeners to be added. The example shown below has the core browser information grouped together.

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserDetails
Platform(s)Engine versionCSS grade
Rendering engineBrowserPlatform(s)Engine versionCSS grade
Details
TridentInternet + Explorer 4.0Win 95+4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	$('#example').dataTable();
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/basic_init/dom.html b/docroot/sites/all/libraries/datatables/examples/basic_init/dom.html new file mode 100644 index 00000000..3603b4ba --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/basic_init/dom.html @@ -0,0 +1,619 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables DOM positioning example +
+ +

Preamble

+

When customising DataTables for your own usage, you might find that the default position of the feature elements (filter input etc) is not quite to your liking. To address this issue DataTables takes inspiration from the CSS 3 Advanced Layout Module and provides the sDom initialisation parameter which can be set to indicate where you which particular features to appear in the DOM. You can also specify div wrapping containers (with classes) to provide complete layout flexibility. The syntax available is:

+
    +
  • l - Length changing
  • +
  • f - Filtering input
  • +
  • t - The table!
  • +
  • i - Information
  • +
  • p - Pagination
  • +
  • r - pRocessing
  • +
  • < and > - div elements
  • +
  • <"class" and > - div with a class
  • +
  • Examples: <"wrapper"flipt>, <lf<t>ip>
  • +
+

In the example below I've moved the table information to the top of the table, and all the interaction elements to the bottom, each wrapper in a container div.

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
Trident + Internet + Explorer + 4.0 + Win 95+4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	$('#example').dataTable( {
+		"sDom": '<"top"i>rt<"bottom"flp><"clear">'
+	} );
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/basic_init/filter_only.html b/docroot/sites/all/libraries/datatables/examples/basic_init/filter_only.html new file mode 100644 index 00000000..f7fa9f0a --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/basic_init/filter_only.html @@ -0,0 +1,609 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables with only the filter feature +
+ +

Preamble

+

Disabling features that you don't wish to use for a particular table is easily done by setting a variable in the initialisation object. In the following example only the filter feature is left enabled (although I've explicitly declared it as enabled).

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
TridentInternet Explorer 4.0Win 95+4X
TridentInternet Explorer 5.0Win 95+5C
TridentInternet Explorer 5.5Win 95+5.5A
TridentInternet Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	$('#example').dataTable( {
+		"bPaginate": false,
+		"bLengthChange": false,
+		"bFilter": true,
+		"bSort": false,
+		"bInfo": false,
+		"bAutoWidth": false
+	} );
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/basic_init/flexible_width.html b/docroot/sites/all/libraries/datatables/examples/basic_init/flexible_width.html new file mode 100644 index 00000000..93279f7f --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/basic_init/flexible_width.html @@ -0,0 +1,602 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables - flexible width example +
+ +

Preamble

+

Often you may want to have your table resize dynamically with the page. Typically this is done by assigning width:100% in your CSS, but this presents a problem for Javascript since it can be very hard to get that relative size, rather than the absolute pixels. As such, if you apply the width attribute to the HTML table + tag, this will be used as the width for the table (overruling any CSS styles).

+

This example shows a table width width="100%" and the container is also flexible width, so as the window is resized, the table will also resize dynamically.

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
TridentInternet + Explorer 4.0Win 95+ 4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	$('#example').dataTable();
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/basic_init/hidden_columns.html b/docroot/sites/all/libraries/datatables/examples/basic_init/hidden_columns.html new file mode 100644 index 00000000..3ffda278 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/basic_init/hidden_columns.html @@ -0,0 +1,604 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables with hidden columns +
+ +

Preamble

+

There are times when you might find it useful to display only a sub-set of the information that was available in the original table. For example you might want to reduce the amount of data shown on screen to make it clearer for the user. This hidden data can still be filtered upon allowing the user access to that data (for example 'tag' information for a row entry), or this can be disabled. In the table below both the platform and engine version columns have been hidden, the former is searchable, the latter is not.

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
TridentInternet Explorer 4.0Win 95+4X
TridentInternet Explorer 5.0Win 95+5C
TridentInternet Explorer 5.5Win 95+5.5A
TridentInternet Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+				$('#example').dataTable( {
+					"aoColumnDefs": [ 
+						{ "bSearchable": false, "bVisible": false, "aTargets": [ 2 ] },
+						{ "bVisible": false, "aTargets": [ 3 ] }
+					] } );
+			} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/basic_init/language.html b/docroot/sites/all/libraries/datatables/examples/basic_init/language.html new file mode 100644 index 00000000..7a34d9e1 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/basic_init/language.html @@ -0,0 +1,612 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables dynamic language +
+ +

Preamble

+

Changing the language information displayed by DataTables is as simple as passing in a language object to the dataTable constructor. The example above shows a different set of English language definitions to be used, rather than the defaults.

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
TridentInternet Explorer 4.0Win 95+4X
TridentInternet Explorer 5.0Win 95+5C
TridentInternet Explorer 5.5Win 95+5.5A
TridentInternet Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+$('#example').dataTable( {
+		"oLanguage": {
+			"sLengthMenu": "Display _MENU_ records per page",
+			"sZeroRecords": "Nothing found - sorry",
+			"sInfo": "Showing _START_ to _END_ of _TOTAL_ records",
+			"sInfoEmpty": "Showing 0 to 0 of 0 records",
+			"sInfoFiltered": "(filtered from _MAX_ total records)"
+		}
+	} );
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/basic_init/multi_col_sort.html b/docroot/sites/all/libraries/datatables/examples/basic_init/multi_col_sort.html new file mode 100644 index 00000000..f9bb4c4e --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/basic_init/multi_col_sort.html @@ -0,0 +1,635 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables multi column and custom sort example +
+ +

Preamble

+

As you would expect with a desktop application, DataTables allows you to sort by multiple columns at the same time. This multiple sorting mechanism is always active if the bSort initialiser is true (it is by default) and the end user can activate it by 'shift' clicking on the column they want to add to the sort. You can also pass in an array of information using the aaSorting initialiser, as I have done in the example below there the first column is sorted as the primary column and the second one then used if the elements in the first column match. As many columns as you wish can be added to the sort.

+

DataTables also provides a method to add your own sorting functions, to extend those built into DataTables. This can be very useful if you wish to sort on data formats such as currency and non-Javascript standard date formats (this natural sort algorithm is a popular useage). This is achieved by extending the jQuery.fn.dataTableExt object with ascending and descending sort functions. In the example below I've added case sensitive sorting functions.

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
TridentInternet + Explorer 4.0Win 95+4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
/* Define two custom functions (asc and desc) for string sorting */
+jQuery.fn.dataTableExt.oSort['string-case-asc']  = function(x,y) {
+	return ((x < y) ? -1 : ((x > y) ?  1 : 0));
+};
+
+jQuery.fn.dataTableExt.oSort['string-case-desc'] = function(x,y) {
+	return ((x < y) ?  1 : ((x > y) ? -1 : 0));
+};
+
+$(document).ready(function() {
+	/* Build the DataTable with third column using our custom sort functions */
+	$('#example').dataTable( {
+		"aaSorting": [ [0,'asc'], [1,'asc'] ],
+		"aoColumns": [
+			null,
+			null,
+			{ "sType": 'string-case' },
+			null,
+			null
+		]
+	} );
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/basic_init/multiple_tables.html b/docroot/sites/all/libraries/datatables/examples/basic_init/multiple_tables.html new file mode 100644 index 00000000..8f442cb2 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/basic_init/multiple_tables.html @@ -0,0 +1,416 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables multiple tables example +
+ +

Preamble

+

Using standard jQuery selector syntax with DataTables it is trivial to initialise multiple tables with a single line of Javascript, as shown below. All tables are completely independent, but share the parameters passed thought the initialiser object (for example if you specific the Spanish language file, all tables will be shown in Spanish).

+ +

Live example

+ +

Trident based browsers

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BrowserPlatform(s)Engine versionCSS grade
Internet + Explorer 4.0Win 95+4X
Internet + Explorer 5.0Win 95+5C
Internet + Explorer 5.5Win 95+5.5A
Internet + Explorer 6Win 98+6A
Internet Explorer 7Win XP SP2+7A
AOL browser (AOL desktop)Win XP6A
+
+
+ + +

Gecko based browsers

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BrowserPlatform(s)Engine versionCSS grade
Firefox 1.0Win 98+ / OSX.2+1.7A
Firefox 1.5Win 98+ / OSX.2+1.8A
Firefox 2.0Win 98+ / OSX.2+1.8A
Firefox 3.0Win 2k+ / OSX.3+1.9A
Camino 1.0OSX.2+1.8A
Camino 1.5OSX.3+1.8A
Netscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
Netscape Browser 8Win 98SE+1.7A
Netscape Navigator 9Win 98+ / OSX.2+1.8A
Mozilla 1.0Win 95+ / OSX.1+1A
Mozilla 1.1Win 95+ / OSX.1+1.1A
Mozilla 1.2Win 95+ / OSX.1+1.2A
Mozilla 1.3Win 95+ / OSX.1+1.3A
Mozilla 1.4Win 95+ / OSX.1+1.4A
Mozilla 1.5Win 95+ / OSX.1+1.5A
Mozilla 1.6Win 95+ / OSX.1+1.6A
Mozilla 1.7Win 98+ / OSX.1+1.7A
Mozilla 1.8Win 98+ / OSX.1+1.8A
Seamonkey 1.1Win 98+ / OSX.2+1.8A
Epiphany 2.20Gnome1.8A
+
+
+ + +

WebKit based browsers (note no platform)

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BrowserEngine versionCSS grade
Safari 1.2125.5A
Safari 1.3312.8A
Safari 2.0419.3A
Safari 3.0522.1A
OmniWeb 5.5420A
iPod Touch / iPhone420.1A
S60413A
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	$('.dataTable').dataTable();
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/basic_init/scroll_x.html b/docroot/sites/all/libraries/datatables/examples/basic_init/scroll_x.html new file mode 100644 index 00000000..2cc55944 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/basic_init/scroll_x.html @@ -0,0 +1,610 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables horizontal scrolling example +
+ +

Preamble

+

This DataTables horizontal scrolling example shows horizontal scrolling on a DataTable, which is very useful for when you have a wide table, with a large number of columns to display, but want to constrain it to a limited horizontal display area. To enable x scrolling simply set the sScrollX parameter to be whatever you want the container wrapper's width to be (any CSS measurement is acceptable, or just a number which is treated as pixels). Note also that sScrollXInner is used here to force the table to be wider than is strictly needed. You may or may not want to include this parameter depending on your application.

+

Also shown in this example is the use of a 'collapsing scroll table' by using bScrollCollapse. When this parameter is set to true, the table size will 'collapse' down to match the number of rows, if the table height is smaller than the scrollable area.

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
Rendering engineBrowserPlatform(s)Engine versionCSS grade
TridentInternet + Explorer 4.0Win 95+4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	$('#example').dataTable( {
+		"sScrollX": "100%",
+		"sScrollXInner": "110%",
+		"bScrollCollapse": true
+	} );
+} );
+ + + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/basic_init/scroll_xy.html b/docroot/sites/all/libraries/datatables/examples/basic_init/scroll_xy.html new file mode 100644 index 00000000..1099e749 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/basic_init/scroll_xy.html @@ -0,0 +1,600 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables horizontal and vertical scrolling example +
+ +

Preamble

+

In this example you can see DataTables doing horizontal and vertical scrolling at the same time. Note also that pagination is enabled, and the scrolling accounts for this.

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
TridentInternet + Explorer 4.0Win 95+4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	$('#example').dataTable( {
+		"sScrollY": 200,
+		"sScrollX": "100%",
+		"sScrollXInner": "110%"
+	} );
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/basic_init/scroll_y.html b/docroot/sites/all/libraries/datatables/examples/basic_init/scroll_y.html new file mode 100644 index 00000000..da6a6ec4 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/basic_init/scroll_y.html @@ -0,0 +1,609 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables vertical scrolling example +
+ +

Preamble

+

This example shows the DataTables table body scrolling in the vertical direction. This can generally be seen as an alternative method to pagination for displaying a large table in a fairly small vertical area, and as such pagination has been disabled here (note that this is not mandatory, it will work just fine with pagination enabled as well!). The example is set up to show grid lines using CSS, which is useful for alignment, both for testing and end user usability. To enable y scrolling simply set the sScrollY parameter to be whatever you want the container wrapper's height to be (any CSS measurement is acceptable, or just a number which is treated as pixels).

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
Rendering engineBrowserPlatform(s)Engine versionCSS grade
TridentInternet + Explorer 4.0Win 95+4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	$('#example').dataTable( {
+		"sScrollY": "200px",
+		"bPaginate": false,
+		"bScrollCollapse": true
+	} );
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/basic_init/scroll_y_infinite.html b/docroot/sites/all/libraries/datatables/examples/basic_init/scroll_y_infinite.html new file mode 100644 index 00000000..31c1cb27 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/basic_init/scroll_y_infinite.html @@ -0,0 +1,610 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables infinite vertical scrolling example +
+ +

Preamble

+

This example shows the DataTables table body scrolling in the vertical direction with infinite scrolling. The idea of infinite scrolling means that data will be added to the table dynamically, as and when needed by the user scrolling the table. A sub-set of the data is loaded initially, and more added as needed (technically of course, it is not "infinite" since it will stop loading data at the end of the data set!). Note that pagination much be enabled for infinite scrolling to work, but the pagination controls will not be shown (they could be, but can cause very confusing user interaction).

+

DataTables' infinite scroll can be used with any of the four data sources supported, and they do not require any modification to work (including server-side scripts).

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
Rendering engineBrowserPlatform(s)Engine versionCSS grade
TridentInternet + Explorer 4.0Win 95+4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	$('#example').dataTable( {
+		"bScrollInfinite": true,
+		"bScrollCollapse": true,
+		"sScrollY": "200px"
+	} );
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/basic_init/scroll_y_theme.html b/docroot/sites/all/libraries/datatables/examples/basic_init/scroll_y_theme.html new file mode 100644 index 00000000..06c04f7a --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/basic_init/scroll_y_theme.html @@ -0,0 +1,609 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables vertical scrolling with jQuery UI ThemeRoller example +
+ +

Preamble

+

This example is an extension of the vertical scrolling example, showing DataTables ability to be themed by jQuery UI's ThemeRoller.

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
Rendering engineBrowserPlatform(s)Engine versionCSS grade
TridentInternet + Explorer 4.0Win 95+4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	$('#example').dataTable( {
+		"sScrollY": 200,
+		"bJQueryUI": true,
+		"sPaginationType": "full_numbers"
+	} );
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/basic_init/state_save.html b/docroot/sites/all/libraries/datatables/examples/basic_init/state_save.html new file mode 100644 index 00000000..04debaf0 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/basic_init/state_save.html @@ -0,0 +1,604 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables state saving example +
+ +

Preamble

+

DataTables can use cookies in the end user's web-browser in order to store it's state after each change in drawing. What this means is that if the user were to reload the page, the table should remain exactly as it was (length, filtering, pagination and sorting). This feature is disabled by default, but can be easily enabled using the bStateSave initialisation parameter as shown in this example. Note also that the duration of the cookie can be set using the iCookieDuration initialisation parameter (which is in seconds).

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
TridentInternet + Explorer 4.0Win 95+4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	$('#example').dataTable( {
+		"bStateSave": true
+	} );
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/basic_init/table_sorting.html b/docroot/sites/all/libraries/datatables/examples/basic_init/table_sorting.html new file mode 100644 index 00000000..6d47c924 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/basic_init/table_sorting.html @@ -0,0 +1,604 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables table sorting example +
+ +

Preamble

+

With DataTables you can alter the sorting characteristics of the table at initialisation time. Using the aaSorting initialisation parameter, you can get the table exactly how you want to present the information. The aaSorting parameter is an array of arrays where the first value is the column to sort on, and the second is 'asc' or 'desc' as required (it is a double array for multi-column sorting). The table below is sorted (descending) by the CSS grade. Note also that the 'Engine version' column is automatically detected as a numeric column and sorted accordingly. Finally, also note that "asSorting" has been defined for the column in question for this example. The reason for this is that DataTables uses ["asc","desc"] for sorting order by default, but we would in this case prefer "desc" to be given first priority.

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
TridentInternet + Explorer 4.0Win 95+4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	$('#example').dataTable( {
+		"aaSorting": [[ 4, "desc" ]]
+	} );
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/basic_init/themes.html b/docroot/sites/all/libraries/datatables/examples/basic_init/themes.html new file mode 100644 index 00000000..d41a9bcf --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/basic_init/themes.html @@ -0,0 +1,598 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables with jQuery UI themes example +
+ +

Preamble

+

Styling widgets such as DataTables can often take a considerable amount of time to fully integrate it into your site/application, with the demo styles as a base. This holds true for all widgets, and the jQuery UI team have addressed this issue by introducing themes through their excellent ThemeRoller. DataTables has full support for ThemeRoller created themes, all you need to do is enable the bJQueryUI flag in the initialisation object, and the required mark-up and classes will be added by DataTables.

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
TridentInternet + Explorer 4.0Win 95+4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	oTable = $('#example').dataTable({
+		"bJQueryUI": true,
+		"sPaginationType": "full_numbers"
+	});
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/basic_init/zero_config.html b/docroot/sites/all/libraries/datatables/examples/basic_init/zero_config.html new file mode 100644 index 00000000..55c1d425 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/basic_init/zero_config.html @@ -0,0 +1,600 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables zero configuration example +
+ +

Preamble

+

DataTables has most features enabled by default, so all you need to do to use it with one of your own tables is to call the construction function (as shown below).

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
TridentInternet + Explorer 4.0Win 95+ 4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	$('#example').dataTable();
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/data_sources/ajax.html b/docroot/sites/all/libraries/datatables/examples/data_sources/ajax.html new file mode 100644 index 00000000..48d5e006 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/data_sources/ajax.html @@ -0,0 +1,208 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables AJAX source example +
+ +

Preamble

+

Although DataTables is built from the principle of progressive enhancement, it is often useful to be able to construct a table from an AJAX source. This can be done in one of two ways - either using the aaData initialisation parameter which takes an array of data, or using the sAjaxSource initialisation parameter which will have DataTables go to that source with an XHR call and load data from there. This example shows the latter method in action. DataTables expects an object with an array called "aaData" with the data source.

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	$('#example').dataTable( {
+		"bProcessing": true,
+		"sAjaxSource": '../ajax/sources/arrays.txt'
+	} );
+} );
+ + + +

Server response

+

The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.

+

+			
+			
+			

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/data_sources/dom.html b/docroot/sites/all/libraries/datatables/examples/data_sources/dom.html new file mode 100644 index 00000000..95ec0ea4 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/data_sources/dom.html @@ -0,0 +1,600 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables zero configuration example +
+ +

Preamble

+

The foundation for DataTables is progressive enhancement, so it is very adept at reading table information directly from the DOM. Therefore, if your user's browser is capable the user will get a DataTables enhanced experience. Otherwise they get the plain HTML.

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
TridentInternet + Explorer 4.0Win 95+4X
TridentInternet + Explorer 5.0Win 95+5C
TridentInternet + Explorer 5.5Win 95+5.5A
TridentInternet + Explorer 6Win 98+6A
TridentInternet Explorer 7Win XP SP2+7A
TridentAOL browser (AOL desktop)Win XP6A
GeckoFirefox 1.0Win 98+ / OSX.2+1.7A
GeckoFirefox 1.5Win 98+ / OSX.2+1.8A
GeckoFirefox 2.0Win 98+ / OSX.2+1.8A
GeckoFirefox 3.0Win 2k+ / OSX.3+1.9A
GeckoCamino 1.0OSX.2+1.8A
GeckoCamino 1.5OSX.3+1.8A
GeckoNetscape 7.2Win 95+ / Mac OS 8.6-9.21.7A
GeckoNetscape Browser 8Win 98SE+1.7A
GeckoNetscape Navigator 9Win 98+ / OSX.2+1.8A
GeckoMozilla 1.0Win 95+ / OSX.1+1A
GeckoMozilla 1.1Win 95+ / OSX.1+1.1A
GeckoMozilla 1.2Win 95+ / OSX.1+1.2A
GeckoMozilla 1.3Win 95+ / OSX.1+1.3A
GeckoMozilla 1.4Win 95+ / OSX.1+1.4A
GeckoMozilla 1.5Win 95+ / OSX.1+1.5A
GeckoMozilla 1.6Win 95+ / OSX.1+1.6A
GeckoMozilla 1.7Win 98+ / OSX.1+1.7A
GeckoMozilla 1.8Win 98+ / OSX.1+1.8A
GeckoSeamonkey 1.1Win 98+ / OSX.2+1.8A
GeckoEpiphany 2.20Gnome1.8A
WebkitSafari 1.2OSX.3125.5A
WebkitSafari 1.3OSX.3312.8A
WebkitSafari 2.0OSX.4+419.3A
WebkitSafari 3.0OSX.4+522.1A
WebkitOmniWeb 5.5OSX.4+420A
WebkitiPod Touch / iPhoneiPod420.1A
WebkitS60S60413A
PrestoOpera 7.0Win 95+ / OSX.1+-A
PrestoOpera 7.5Win 95+ / OSX.2+-A
PrestoOpera 8.0Win 95+ / OSX.2+-A
PrestoOpera 8.5Win 95+ / OSX.2+-A
PrestoOpera 9.0Win 95+ / OSX.3+-A
PrestoOpera 9.2Win 88+ / OSX.3+-A
PrestoOpera 9.5Win 88+ / OSX.3+-A
PrestoOpera for WiiWii-A
PrestoNokia N800N800-A
PrestoNintendo DS browserNintendo DS8.5C/A1
KHTMLKonqureror 3.1KDE 3.13.1C
KHTMLKonqureror 3.3KDE 3.33.3A
KHTMLKonqureror 3.5KDE 3.53.5A
TasmanInternet Explorer 4.5Mac OS 8-9-X
TasmanInternet Explorer 5.1Mac OS 7.6-91C
TasmanInternet Explorer 5.2Mac OS 8-X1C
MiscNetFront 3.1Embedded devices-C
MiscNetFront 3.4Embedded devices-A
MiscDillo 0.8Embedded devices-X
MiscLinksText only-X
MiscLynxText only-X
MiscIE MobileWindows Mobile 6-C
MiscPSP browserPSP-C
Other browsersAll others--U
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	$('#example').dataTable();
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/data_sources/js_array.html b/docroot/sites/all/libraries/datatables/examples/data_sources/js_array.html new file mode 100644 index 00000000..b6c95b23 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/data_sources/js_array.html @@ -0,0 +1,269 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables dynamic creation example +
+ +

Preamble

+

At times you will wish to be able to create a table from dynamic information passed directly to DataTables, rather than having it read from the document. This is achieved using the "aaData" array in the initialisation object. A table node must first be created before the initialiser is called (as shown in the code below). This is also useful for optimisation - if you are able to format the data as required, this method can save a lot of DOM parsing to create a table.

+ +

Live example

+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	$('#demo').html( '<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"></table>' );
+	$('#example').dataTable( {
+		"aaData": [
+			/* Reduced data set */
+			[ "Trident", "Internet Explorer 4.0", "Win 95+", 4, "X" ],
+			[ "Trident", "Internet Explorer 5.0", "Win 95+", 5, "C" ],
+			[ "Trident", "Internet Explorer 5.5", "Win 95+", 5.5, "A" ],
+			[ "Trident", "Internet Explorer 6.0", "Win 98+", 6, "A" ],
+			[ "Trident", "Internet Explorer 7.0", "Win XP SP2+", 7, "A" ],
+			[ "Gecko", "Firefox 1.5", "Win 98+ / OSX.2+", 1.8, "A" ],
+			[ "Gecko", "Firefox 2", "Win 98+ / OSX.2+", 1.8, "A" ],
+			[ "Gecko", "Firefox 3", "Win 2k+ / OSX.3+", 1.9, "A" ],
+			[ "Webkit", "Safari 1.2", "OSX.3", 125.5, "A" ],
+			[ "Webkit", "Safari 1.3", "OSX.3", 312.8, "A" ],
+			[ "Webkit", "Safari 2.0", "OSX.4+", 419.3, "A" ],
+			[ "Webkit", "Safari 3.0", "OSX.4+", 522.1, "A" ]
+		],
+		"aoColumns": [
+			{ "sTitle": "Engine" },
+			{ "sTitle": "Browser" },
+			{ "sTitle": "Platform" },
+			{ "sTitle": "Version", "sClass": "center" },
+			{ "sTitle": "Grade", "sClass": "center" }
+		]
+	} );	
+} );
+ + + + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/data_sources/server_side.html b/docroot/sites/all/libraries/datatables/examples/data_sources/server_side.html new file mode 100644 index 00000000..75eb8aa4 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/data_sources/server_side.html @@ -0,0 +1,390 @@ + + + + + + + DataTables example + + + + + + +
+
+ DataTables server-side processing example +
+ +

Preamble

+

There are many ways to get your data into DataTables, and if you are working with seriously large databases, you might want to consider using the server-side options that DataTables provides. Basically all of the paging, filtering, sorting etc that DataTables does can be handed off to a server (or any other data source - Google Gears or Adobe Air for example!) and DataTables is just an events and display module.

+

The example here shows a very simple display of the CSS data (used in all my other examples), but in this instance coming from the server on each draw. Filtering, multi-column sorting etc all work as you would expect.

+ +

Live example

+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Rendering engineBrowserPlatform(s)Engine versionCSS grade
Loading data from server
Rendering engineBrowserPlatform(s)Engine versionCSS grade
+
+
+ + +

Initialisation code

+
$(document).ready(function() {
+	$('#example').dataTable( {
+		"bProcessing": true,
+		"bServerSide": true,
+		"sAjaxSource": "../server_side/scripts/server_processing.php"
+	} );
+} );
+ + + +

Server response

+

The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.

+

+			
+			
+			

Server side (PHP) code

+
<?php
+	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+	 * Easy set variables
+	 */
+	
+	/* Array of database columns which should be read and sent back to DataTables. Use a space where
+	 * you want to insert a non-database field (for example a counter or static image)
+	 */
+	$aColumns = array( 'engine', 'browser', 'platform', 'version', 'grade' );
+	
+	/* Indexed column (used for fast and accurate table cardinality) */
+	$sIndexColumn = "id";
+	
+	/* DB table to use */
+	$sTable = "ajax";
+	
+	/* Database connection information */
+	$gaSql['user']       = "";
+	$gaSql['password']   = "";
+	$gaSql['db']         = "";
+	$gaSql['server']     = "localhost";
+	
+	/* REMOVE THIS LINE (it just includes my SQL connection user/pass) */
+	include( $_SERVER['DOCUMENT_ROOT']."/datatables/mysql.php" );
+	
+	
+	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+	 * If you just want to use the basic configuration for DataTables with PHP server-side, there is
+	 * no need to edit below this line
+	 */
+	
+	/* 
+	 * MySQL connection
+	 */
+	$gaSql['link'] =  mysql_pconnect( $gaSql['server'], $gaSql['user'], $gaSql['password']  ) or
+		die( 'Could not open connection to server' );
+	
+	mysql_select_db( $gaSql['db'], $gaSql['link'] ) or 
+		die( 'Could not select database '. $gaSql['db'] );
+	
+	
+	/* 
+	 * Paging
+	 */
+	$sLimit = "";
+	if ( isset( $_GET['iDisplayStart'] ) && $_GET['iDisplayLength'] != '-1' )
+	{
+		$sLimit = "LIMIT ".intval( $_GET['iDisplayStart'] ).", ".
+			intval( $_GET['iDisplayLength'] );
+	}
+	
+	
+	/*
+	 * Ordering
+	 */
+	$sOrder = "";
+	if ( isset( $_GET['iSortCol_0'] ) )
+	{
+		$sOrder = "ORDER BY  ";
+		for ( $i=0 ; $i<intval( $_GET['iSortingCols'] ) ; $i++ )
+		{
+			if ( $_GET[ 'bSortable_'.intval($_GET['iSortCol_'.$i]) ] == "true" )
+			{
+				$sOrder .= "`".$aColumns[ intval( $_GET['iSortCol_'.$i] ) ]."` ".
+					($_GET['sSortDir_'.$i]==='asc' ? 'asc' : 'desc') .", ";
+			}
+		}
+		
+		$sOrder = substr_replace( $sOrder, "", -2 );
+		if ( $sOrder == "ORDER BY" )
+		{
+			$sOrder = "";
+		}
+	}
+	
+	
+	/* 
+	 * Filtering
+	 * NOTE this does not match the built-in DataTables filtering which does it
+	 * word by word on any field. It's possible to do here, but concerned about efficiency
+	 * on very large tables, and MySQL's regex functionality is very limited
+	 */
+	$sWhere = "";
+	if ( isset($_GET['sSearch']) && $_GET['sSearch'] != "" )
+	{
+		$sWhere = "WHERE (";
+		for ( $i=0 ; $i<count($aColumns) ; $i++ )
+		{
+			$sWhere .= "`".$aColumns[$i]."` LIKE '%".mysql_real_escape_string( $_GET['sSearch'] )."%' OR ";
+		}
+		$sWhere = substr_replace( $sWhere, "", -3 );
+		$sWhere .= ')';
+	}
+	
+	/* Individual column filtering */
+	for ( $i=0 ; $i<count($aColumns) ; $i++ )
+	{
+		if ( isset($_GET['bSearchable_'.$i]) && $_GET['bSearchable_'.$i] == "true" && $_GET['sSearch_'.$i] != '' )
+		{
+			if ( $sWhere == "" )
+			{
+				$sWhere = "WHERE ";
+			}
+			else
+			{
+				$sWhere .= " AND ";
+			}
+			$sWhere .= "`".$aColumns[$i]."` LIKE '%".mysql_real_escape_string($_GET['sSearch_'.$i])."%' ";
+		}
+	}
+	
+	
+	/*
+	 * SQL queries
+	 * Get data to display
+	 */
+	$sQuery = "
+		SELECT SQL_CALC_FOUND_ROWS `".str_replace(" , ", " ", implode("`, `", $aColumns))."`
+		FROM   $sTable
+		$sWhere
+		$sOrder
+		$sLimit
+		";
+	$rResult = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error());
+	
+	/* Data set length after filtering */
+	$sQuery = "
+		SELECT FOUND_ROWS()
+	";
+	$rResultFilterTotal = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error());
+	$aResultFilterTotal = mysql_fetch_array($rResultFilterTotal);
+	$iFilteredTotal = $aResultFilterTotal[0];
+	
+	/* Total data set length */
+	$sQuery = "
+		SELECT COUNT(`".$sIndexColumn."`)
+		FROM   $sTable
+	";
+	$rResultTotal = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error());
+	$aResultTotal = mysql_fetch_array($rResultTotal);
+	$iTotal = $aResultTotal[0];
+	
+	
+	/*
+	 * Output
+	 */
+	$output = array(
+		"sEcho" => intval($_GET['sEcho']),
+		"iTotalRecords" => $iTotal,
+		"iTotalDisplayRecords" => $iFilteredTotal,
+		"aaData" => array()
+	);
+	
+	while ( $aRow = mysql_fetch_array( $rResult ) )
+	{
+		$row = array();
+		for ( $i=0 ; $i<count($aColumns) ; $i++ )
+		{
+			if ( $aColumns[$i] == "version" )
+			{
+				/* Special output formatting for 'version' column */
+				$row[] = ($aRow[ $aColumns[$i] ]=="0") ? '-' : $aRow[ $aColumns[$i] ];
+			}
+			else if ( $aColumns[$i] != ' ' )
+			{
+				/* General output */
+				$row[] = $aRow[ $aColumns[$i] ];
+			}
+		}
+		$output['aaData'][] = $row;
+	}
+	
+	echo json_encode( $output );
+?>
+ + +

Other examples

+ + + + + + +
+ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/examples_support/de_DE.txt b/docroot/sites/all/libraries/datatables/examples/examples_support/de_DE.txt new file mode 100644 index 00000000..9f39e3e9 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/examples_support/de_DE.txt @@ -0,0 +1,17 @@ +{ + "sProcessing": "Bitte warten...", + "sLengthMenu": "_MENU_ Einträge anzeigen", + "sZeroRecords": "Keine Einträge vorhanden.", + "sInfo": "_START_ bis _END_ von _TOTAL_ Einträgen", + "sInfoEmpty": "0 bis 0 von 0 Einträgen", + "sInfoFiltered": "(gefiltert von _MAX_ Einträgen)", + "sInfoPostFix": "", + "sSearch": "Suchen", + "sUrl": "", + "oPaginate": { + "sFirst": "Erster", + "sPrevious": "Zurück", + "sNext": "Nächster", + "sLast": "Letzter" + } +} \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/examples_support/details_close.png b/docroot/sites/all/libraries/datatables/examples/examples_support/details_close.png new file mode 100644 index 00000000..fcc23c63 Binary files /dev/null and b/docroot/sites/all/libraries/datatables/examples/examples_support/details_close.png differ diff --git a/docroot/sites/all/libraries/datatables/examples/examples_support/details_open.png b/docroot/sites/all/libraries/datatables/examples/examples_support/details_open.png new file mode 100644 index 00000000..6f034d0f Binary files /dev/null and b/docroot/sites/all/libraries/datatables/examples/examples_support/details_open.png differ diff --git a/docroot/sites/all/libraries/datatables/examples/examples_support/editable_ajax.php b/docroot/sites/all/libraries/datatables/examples/examples_support/editable_ajax.php new file mode 100644 index 00000000..4f448b04 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/examples_support/editable_ajax.php @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/examples_support/index.html b/docroot/sites/all/libraries/datatables/examples/examples_support/index.html new file mode 100644 index 00000000..3bf1b6af --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/examples_support/index.html @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/examples_support/infiniteScroll.php b/docroot/sites/all/libraries/datatables/examples/examples_support/infiniteScroll.php new file mode 100644 index 00000000..f543dd40 --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/examples_support/infiniteScroll.php @@ -0,0 +1,97 @@ + \ No newline at end of file diff --git a/docroot/sites/all/libraries/datatables/examples/examples_support/jquery-ui-tabs.js b/docroot/sites/all/libraries/datatables/examples/examples_support/jquery-ui-tabs.js new file mode 100755 index 00000000..7b72633d --- /dev/null +++ b/docroot/sites/all/libraries/datatables/examples/examples_support/jquery-ui-tabs.js @@ -0,0 +1,65 @@ +/*! + * jQuery UI 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI + */ +(function(c){c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.2",plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=0;e0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a=0)&&c(a).is(":focusable")}})}})(jQuery); +;/*! + * jQuery UI Widget 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Widget + */ +(function(b){var j=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add(this).each(function(){b(this).triggerHandler("remove")});return j.call(b(this),a,c)})};b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=function(h){return!!b.data(h,a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend({},c.options);b[e][a].prototype= +b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):d;if(e&&d.substring(0,1)==="_")return h;e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==undefined){h=i;return false}}):this.each(function(){var g= +b.data(this,a);if(g){d&&g.option(d);g._init()}else b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){this.element=b(c).data(this.widgetName,this);this.options=b.extend(true,{},this.options,b.metadata&&b.metadata.get(c)[this.widgetName],a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create(); +this._init()},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(a,c){var d=a,e=this;if(arguments.length===0)return b.extend({},e.options);if(typeof a==="string"){if(c===undefined)return this.options[a];d={};d[a]=c}b.each(d,function(f, +h){e._setOption(f,h)});return e},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",c);return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a= +b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery); +;/* + * jQuery UI Tabs 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Tabs + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function(d){function s(){return++u}function v(){return++w}var u=0,w=0;d.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"
",remove:null,select:null,show:null,spinner:"Loading…",tabTemplate:'
  • #{label}
  • '},_create:function(){this._tabify(true)},_setOption:function(c,e){if(c=="selected")this.options.collapsible&& +e==this.options.selected||this.select(e);else{this.options[c]=e;this._tabify()}},_tabId:function(c){return c.title&&c.title.replace(/\s/g,"_").replace(/[^A-Za-z0-9\-_:\.]/g,"")||this.options.idPrefix+s()},_sanitizeSelector:function(c){return c.replace(/:/g,"\\:")},_cookie:function(){var c=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+v());return d.cookie.apply(null,[c].concat(d.makeArray(arguments)))},_ui:function(c,e){return{tab:c,panel:e,index:this.anchors.index(c)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var c= +d(this);c.html(c.data("label.tabs")).removeData("label.tabs")})},_tabify:function(c){function e(g,f){g.css({display:""});!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}this.list=this.element.find("ol,ul").eq(0);this.lis=d("li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);var a=this,b=this.options,h=/^#.+/;this.anchors.each(function(g,f){var j=d(f).attr("href"),l=j.split("#")[0],p;if(l&&(l===location.toString().split("#")[0]|| +(p=d("base")[0])&&l===p.href)){j=f.hash;f.href=j}if(h.test(j))a.panels=a.panels.add(a._sanitizeSelector(j));else if(j!="#"){d.data(f,"href.tabs",j);d.data(f,"load.tabs",j.replace(/#.*$/,""));j=a._tabId(f);f.href="#"+j;f=d("#"+j);if(!f.length){f=d(b.panelTemplate).attr("id",j).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(a.panels[g-1]||a.list);f.data("destroy.tabs",true)}a.panels=a.panels.add(f)}else b.disabled.push(g)});if(c){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all"); +this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(b.selected===undefined){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){b.selected=g;return false}});if(typeof b.selected!="number"&&b.cookie)b.selected=parseInt(a._cookie(),10);if(typeof b.selected!="number"&&this.lis.filter(".ui-tabs-selected").length)b.selected= +this.lis.index(this.lis.filter(".ui-tabs-selected"));b.selected=b.selected||(this.lis.length?0:-1)}else if(b.selected===null)b.selected=-1;b.selected=b.selected>=0&&this.anchors[b.selected]||b.selected<0?b.selected:0;b.disabled=d.unique(b.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return a.lis.index(g)}))).sort();d.inArray(b.selected,b.disabled)!=-1&&b.disabled.splice(d.inArray(b.selected,b.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active"); +if(b.selected>=0&&this.anchors.length){this.panels.eq(b.selected).removeClass("ui-tabs-hide");this.lis.eq(b.selected).addClass("ui-tabs-selected ui-state-active");a.element.queue("tabs",function(){a._trigger("show",null,a._ui(a.anchors[b.selected],a.panels[b.selected]))});this.load(b.selected)}d(window).bind("unload",function(){a.lis.add(a.anchors).unbind(".tabs");a.lis=a.anchors=a.panels=null})}else b.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"));this.element[b.collapsible?"addClass": +"removeClass"]("ui-tabs-collapsible");b.cookie&&this._cookie(b.selected,b.cookie);c=0;for(var i;i=this.lis[c];c++)d(i)[d.inArray(c,b.disabled)!=-1&&!d(i).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");b.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(b.event!="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+g)};this.lis.bind("mouseover.tabs", +function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(b.fx)if(d.isArray(b.fx)){m=b.fx[0];o=b.fx[1]}else m=o=b.fx;var q=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal",function(){e(f,o);a._trigger("show", +null,a._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");a._trigger("show",null,a._ui(g,f[0]))},r=m?function(g,f){f.animate(m,m.duration||"normal",function(){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);a.element.dequeue("tabs")})}:function(g,f){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");a.element.dequeue("tabs")};this.anchors.bind(b.event+".tabs", +function(){var g=this,f=d(this).closest("li"),j=a.panels.filter(":not(.ui-tabs-hide)"),l=d(a._sanitizeSelector(this.hash));if(f.hasClass("ui-tabs-selected")&&!b.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||a._trigger("select",null,a._ui(this,l[0]))===false){this.blur();return false}b.selected=a.anchors.index(this);a.abort();if(b.collapsible)if(f.hasClass("ui-tabs-selected")){b.selected=-1;b.cookie&&a._cookie(b.selected,b.cookie);a.element.queue("tabs",function(){r(g, +j)}).dequeue("tabs");this.blur();return false}else if(!j.length){b.cookie&&a._cookie(b.selected,b.cookie);a.element.queue("tabs",function(){q(g,l)});a.load(a.anchors.index(this));this.blur();return false}b.cookie&&a._cookie(b.selected,b.cookie);if(l.length){j.length&&a.element.queue("tabs",function(){r(g,j)});a.element.queue("tabs",function(){q(g,l)});a.load(a.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier.";d.browser.msie&&this.blur()});this.anchors.bind("click.tabs", +function(){return false})},destroy:function(){var c=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var e=d.data(this,"href.tabs");if(e)this.href=e;var a=d(this).unbind(".tabs");d.each(["href","load","cache"],function(b,h){a.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this, +"destroy.tabs")?d(this).remove():d(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});c.cookie&&this._cookie(null,c.cookie);return this},add:function(c,e,a){if(a===undefined)a=this.anchors.length;var b=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,c).replace(/#\{label\}/g,e));c=!c.indexOf("#")?c.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs", +true);var i=d("#"+c);i.length||(i=d(h.panelTemplate).attr("id",c).data("destroy.tabs",true));i.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(a>=this.lis.length){e.appendTo(this.list);i.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[a]);i.insertBefore(this.panels[a])}h.disabled=d.map(h.disabled,function(k){return k>=a?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");i.removeClass("ui-tabs-hide"); +this.element.queue("tabs",function(){b._trigger("show",null,b._ui(b.anchors[0],b.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[a],this.panels[a]));return this},remove:function(c){var e=this.options,a=this.lis.eq(c).remove(),b=this.panels.eq(c).remove();if(a.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(c+(c+1=c?--h:h});this._tabify();this._trigger("remove", +null,this._ui(a.find("a")[0],b[0]));return this},enable:function(c){var e=this.options;if(d.inArray(c,e.disabled)!=-1){this.lis.eq(c).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(a){return a!=c});this._trigger("enable",null,this._ui(this.anchors[c],this.panels[c]));return this}},disable:function(c){var e=this.options;if(c!=e.selected){this.lis.eq(c).addClass("ui-state-disabled");e.disabled.push(c);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[c],this.panels[c]))}return this}, +select:function(c){if(typeof c=="string")c=this.anchors.index(this.anchors.filter("[href$="+c+"]"));else if(c===null)c=-1;if(c==-1&&this.options.collapsible)c=this.options.selected;this.anchors.eq(c).trigger(this.options.event+".tabs");return this},load:function(c){var e=this,a=this.options,b=this.anchors.eq(c)[0],h=d.data(b,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(b,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(c).addClass("ui-state-processing"); +if(a.spinner){var i=d("span",b);i.data("label.tabs",i.html()).html(a.spinner)}this.xhr=d.ajax(d.extend({},a.ajaxOptions,{url:h,success:function(k,n){d(e._sanitizeSelector(b.hash)).html(k);e._cleanup();a.cache&&d.data(b,"cache.tabs",true);e._trigger("load",null,e._ui(e.anchors[c],e.panels[c]));try{a.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[c],e.panels[c]));try{a.ajaxOptions.error(k,n,c,b)}catch(m){}}}));e.element.dequeue("tabs");return this}}, +abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},url:function(c,e){this.anchors.eq(c).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.2"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(c,e){var a=this,b=this.options,h=a._rotate||(a._rotate= +function(i){clearTimeout(a.rotation);a.rotation=setTimeout(function(){var k=b.selected;a.select(++k: + * http://www.dyve.net/jquery/?editable + * + */ + +/** + * Version 1.7.1 + * + * ** means there is basic unit tests for this parameter. + * + * @name Jeditable + * @type jQuery + * @param String target (POST) URL or function to send edited content to ** + * @param Hash options additional options + * @param String options[method] method to use to send edited content (POST or PUT) ** + * @param Function options[callback] Function to run after submitting edited content ** + * @param String options[name] POST parameter name of edited content + * @param String options[id] POST parameter name of edited div id + * @param Hash options[submitdata] Extra parameters to send when submitting edited content. + * @param String options[type] text, textarea or select (or any 3rd party input type) ** + * @param Integer options[rows] number of rows if using textarea ** + * @param Integer options[cols] number of columns if using textarea ** + * @param Mixed options[height] 'auto', 'none' or height in pixels ** + * @param Mixed options[width] 'auto', 'none' or width in pixels ** + * @param String options[loadurl] URL to fetch input content before editing ** + * @param String options[loadtype] Request type for load url. Should be GET or POST. + * @param String options[loadtext] Text to display while loading external content. + * @param Mixed options[loaddata] Extra parameters to pass when fetching content before editing. + * @param Mixed options[data] Or content given as paramameter. String or function.** + * @param String options[indicator] indicator html to show when saving + * @param String options[tooltip] optional tooltip text via title attribute ** + * @param String options[event] jQuery event such as 'click' of 'dblclick' ** + * @param String options[submit] submit button value, empty means no button ** + * @param String options[cancel] cancel button value, empty means no button ** + * @param String options[cssclass] CSS class to apply to input form. 'inherit' to copy from parent. ** + * @param String options[style] Style to apply to input form 'inherit' to copy from parent. ** + * @param String options[select] true or false, when true text is highlighted ?? + * @param String options[placeholder] Placeholder text or html to insert when element is empty. ** + * @param String options[onblur] 'cancel', 'submit', 'ignore' or function ?? + * + * @param Function options[onsubmit] function(settings, original) { ... } called before submit + * @param Function options[onreset] function(settings, original) { ... } called before reset + * @param Function options[onerror] function(settings, original, xhr) { ... } called on error + * + * @param Hash options[ajaxoptions] jQuery Ajax options. See docs.jquery.com. + * + */ + +(function($) { + + $.fn.editable = function(target, options) { + + if ('disable' == target) { + $(this).data('disabled.editable', true); + return; + } + if ('enable' == target) { + $(this).data('disabled.editable', false); + return; + } + if ('destroy' == target) { + $(this) + .unbind($(this).data('event.editable')) + .removeData('disabled.editable') + .removeData('event.editable'); + return; + } + + var settings = $.extend({}, $.fn.editable.defaults, {target:target}, options); + + /* setup some functions */ + var plugin = $.editable.types[settings.type].plugin || function() { }; + var submit = $.editable.types[settings.type].submit || function() { }; + var buttons = $.editable.types[settings.type].buttons + || $.editable.types['defaults'].buttons; + var content = $.editable.types[settings.type].content + || $.editable.types['defaults'].content; + var element = $.editable.types[settings.type].element + || $.editable.types['defaults'].element; + var reset = $.editable.types[settings.type].reset + || $.editable.types['defaults'].reset; + var callback = settings.callback || function() { }; + var onedit = settings.onedit || function() { }; + var onsubmit = settings.onsubmit || function() { }; + var onreset = settings.onreset || function() { }; + var onerror = settings.onerror || reset; + + /* show tooltip */ + if (settings.tooltip) { + $(this).attr('title', settings.tooltip); + } + + settings.autowidth = 'auto' == settings.width; + settings.autoheight = 'auto' == settings.height; + + return this.each(function() { + + /* save this to self because this changes when scope changes */ + var self = this; + + /* inlined block elements lose their width and height after first edit */ + /* save them for later use as workaround */ + var savedwidth = $(self).width(); + var savedheight = $(self).height(); + + /* save so it can be later used by $.editable('destroy') */ + $(this).data('event.editable', settings.event); + + /* if element is empty add something clickable (if requested) */ + if (!$.trim($(this).html())) { + $(this).html(settings.placeholder); + } + + $(this).bind(settings.event, function(e) { + + /* abort if disabled for this element */ + if (true === $(this).data('disabled.editable')) { + return; + } + + /* prevent throwing an exeption if edit field is clicked again */ + if (self.editing) { + return; + } + + /* abort if onedit hook returns false */ + if (false === onedit.apply(this, [settings, self])) { + return; + } + + /* prevent default action and bubbling */ + e.preventDefault(); + e.stopPropagation(); + + /* remove tooltip */ + if (settings.tooltip) { + $(self).removeAttr('title'); + } + + /* figure out how wide and tall we are, saved width and height */ + /* are workaround for http://dev.jquery.com/ticket/2190 */ + if (0 == $(self).width()) { + //$(self).css('visibility', 'hidden'); + settings.width = savedwidth; + settings.height = savedheight; + } else { + if (settings.width != 'none') { + settings.width = + settings.autowidth ? $(self).width() : settings.width; + } + if (settings.height != 'none') { + settings.height = + settings.autoheight ? $(self).height() : settings.height; + } + } + //$(this).css('visibility', ''); + + /* remove placeholder text, replace is here because of IE */ + if ($(this).html().toLowerCase().replace(/(;|")/g, '') == + settings.placeholder.toLowerCase().replace(/(;|")/g, '')) { + $(this).html(''); + } + + self.editing = true; + self.revert = $(self).html(); + $(self).html(''); + + /* create the form object */ + var form = $('
    '); + + /* apply css or style or both */ + if (settings.cssclass) { + if ('inherit' == settings.cssclass) { + form.attr('class', $(self).attr('class')); + } else { + form.attr('class', settings.cssclass); + } + } + + if (settings.style) { + if ('inherit' == settings.style) { + form.attr('style', $(self).attr('style')); + /* IE needs the second line or display wont be inherited */ + form.css('display', $(self).css('display')); + } else { + form.attr('style', settings.style); + } + } + + /* add main input element to form and store it in input */ + var input = element.apply(form, [settings, self]); + + /* set input content via POST, GET, given data or existing value */ + var input_content; + + if (settings.loadurl) { + var t = setTimeout(function() { + input.disabled = true; + content.apply(form, [settings.loadtext, settings, self]); + }, 100); + + var loaddata = {}; + loaddata[settings.id] = self.id; + if ($.isFunction(settings.loaddata)) { + $.extend(loaddata, settings.loaddata.apply(self, [self.revert, settings])); + } else { + $.extend(loaddata, settings.loaddata); + } + $.ajax({ + type : settings.loadtype, + url : settings.loadurl, + data : loaddata, + async : false, + success: function(result) { + window.clearTimeout(t); + input_content = result; + input.disabled = false; + } + }); + } else if (settings.data) { + input_content = settings.data; + if ($.isFunction(settings.data)) { + input_content = settings.data.apply(self, [self.revert, settings]); + } + } else { + input_content = self.revert; + } + content.apply(form, [input_content, settings, self]); + + input.attr('name', settings.name); + + /* add buttons to the form */ + buttons.apply(form, [settings, self]); + + /* add created form to self */ + $(self).append(form); + + /* attach 3rd party plugin if requested */ + plugin.apply(form, [settings, self]); + + /* focus to first visible form element */ + $(':input:visible:enabled:first', form).focus(); + + /* highlight input contents when requested */ + if (settings.select) { + input.select(); + } + + /* discard changes if pressing esc */ + input.keydown(function(e) { + if (e.keyCode == 27) { + e.preventDefault(); + //self.reset(); + reset.apply(form, [settings, self]); + } + }); + + /* discard, submit or nothing with changes when clicking outside */ + /* do nothing is usable when navigating with tab */ + var t; + if ('cancel' == settings.onblur) { + input.blur(function(e) { + /* prevent canceling if submit was clicked */ + t = setTimeout(function() { + reset.apply(form, [settings, self]); + }, 500); + }); + } else if ('submit' == settings.onblur) { + input.blur(function(e) { + /* prevent double submit if submit was clicked */ + t = setTimeout(function() { + form.submit(); + }, 200); + }); + } else if ($.isFunction(settings.onblur)) { + input.blur(function(e) { + settings.onblur.apply(self, [input.val(), settings]); + }); + } else { + input.blur(function(e) { + /* TODO: maybe something here */ + }); + } + + form.submit(function(e) { + + if (t) { + clearTimeout(t); + } + + /* do no submit */ + e.preventDefault(); + + /* call before submit hook. */ + /* if it returns false abort submitting */ + if (false !== onsubmit.apply(form, [settings, self])) { + /* custom inputs call before submit hook. */ + /* if it returns false abort submitting */ + if (false !== submit.apply(form, [settings, self])) { + + /* check if given target is function */ + if ($.isFunction(settings.target)) { + var str = settings.target.apply(self, [input.val(), settings]); + $(self).html(str); + self.editing = false; + callback.apply(self, [self.innerHTML, settings]); + /* TODO: this is not dry */ + if (!$.trim($(self).html())) { + $(self).html(settings.placeholder); + } + } else { + /* add edited content and id of edited element to POST */ + var submitdata = {}; + submitdata[settings.name] = input.val(); + submitdata[settings.id] = self.id; + /* add extra data to be POST:ed */ + if ($.isFunction(settings.submitdata)) { + $.extend(submitdata, settings.submitdata.apply(self, [self.revert, settings])); + } else { + $.extend(submitdata, settings.submitdata); + } + + /* quick and dirty PUT support */ + if ('PUT' == settings.method) { + submitdata['_method'] = 'put'; + } + + /* show the saving indicator */ + $(self).html(settings.indicator); + + /* defaults for ajaxoptions */ + var ajaxoptions = { + type : 'POST', + data : submitdata, + dataType: 'html', + url : settings.target, + success : function(result, status) { + if (ajaxoptions.dataType == 'html') { + $(self).html(result); + } + self.editing = false; + callback.apply(self, [result, settings]); + if (!$.trim($(self).html())) { + $(self).html(settings.placeholder); + } + }, + error : function(xhr, status, error) { + onerror.apply(form, [settings, self, xhr]); + } + }; + + /* override with what is given in settings.ajaxoptions */ + $.extend(ajaxoptions, settings.ajaxoptions); + $.ajax(ajaxoptions); + + } + } + } + + /* show tooltip again */ + $(self).attr('title', settings.tooltip); + + return false; + }); + }); + + /* privileged methods */ + this.reset = function(form) { + /* prevent calling reset twice when blurring */ + if (this.editing) { + /* before reset hook, if it returns false abort reseting */ + if (false !== onreset.apply(form, [settings, self])) { + $(self).html(self.revert); + self.editing = false; + if (!$.trim($(self).html())) { + $(self).html(settings.placeholder); + } + /* show tooltip again */ + if (settings.tooltip) { + $(self).attr('title', settings.tooltip); + } + } + } + }; + }); + + }; + + + $.editable = { + types: { + defaults: { + element : function(settings, original) { + var input = $(''); + $(this).append(input); + return(input); + }, + content : function(string, settings, original) { + $(':input:first', this).val(string); + }, + reset : function(settings, original) { + original.reset(this); + }, + buttons : function(settings, original) { + var form = this; + if (settings.submit) { + /* if given html string use that */ + if (settings.submit.match(/>$/)) { + var submit = $(settings.submit).click(function() { + if (submit.attr("type") != "submit") { + form.submit(); + } + }); + /* otherwise use button with given string as text */ + } else { + var submit = $(' +
    + + +

    (Note: if you use a KHTML +based browser and are having difficulties loading the sample output, try +saving it to a file first.)

    + + + +

    + User input has been disabled for remote connections. +

    + + + + \ No newline at end of file diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/examples.php b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/examples.php new file mode 100755 index 00000000..06a541c2 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/examples.php @@ -0,0 +1,96 @@ + + + + + + + +

    Samples

    + +

    Below are some sample files. The PDF version is generated on the fly by dompdf. (The source HTML & CSS for +these files is included in the test/ directory of the distribution +package.)

    + + array(), + "dom" => array(), + "image" => array(), + "page" => array(), + "encoding" => array(), + "script" => array(), + "quirks" => array(), + "other" => array(), +); + +//if dompdf.php runs in virtual server root, dirname does not return empty folder but '/' or '\' (windows). +//This leads to a duplicate separator in unix etc. and an error in Windows. Therefore strip off. + +$dompdf = dirname(dirname($_SERVER["PHP_SELF"])); +if ( $dompdf == '/' || $dompdf == '\\') { + $dompdf = ''; +} + +$dompdf .= "/dompdf.php?base_path=" . rawurlencode("www/test/"); + + +foreach ( $test_files as $file ) { + preg_match("@[\\/](([^_]+)_?(.*))\.(".implode("|", $extensions).")$@i", $file, $matches); + $prefix = $matches[2]; + + if ( array_key_exists($prefix, $sections) ) { + $sections[$prefix][] = array($file, $matches[3]); + } + else { + $sections["other"][] = array($file, $matches[1]); + } +} + +foreach ( $sections as $section => $files ) { + echo "

    $section

    "; + + echo "
      "; + foreach ( $files as $file ) { + $filename = basename($file[0]); + $title = $file[1]; + $arrow = "images/arrow_0" . rand(1, 6) . ".gif"; + echo "
    • \n"; + echo " + [HTML] + [PDF] "; + echo $title; + echo "
    • \n"; + } + echo "
    "; +} +?> + + \ No newline at end of file diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/fonts.php b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/fonts.php new file mode 100755 index 00000000..66bf4b19 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/fonts.php @@ -0,0 +1,193 @@ + + + +

    Font manager

    + + + +

    Installed fonts

    + + + + + + + + + + + + + + + + + + + + $variants) { ?> + + + $path) { + if ($i > 0) { + echo ""; + } + + echo " + "; + + foreach ($extensions as $ext) { + $v = ""; + $class = ""; + + if (is_readable("$path.$ext")) { + // if not cache file + if (strpos($ext, ".php") === false) { + $class = "ok"; + $v = $ext; + } + + // cache file + else { + // check if old cache format + $content = file_get_contents("$path.$ext", null, null, null, 50); + if (strpos($content, '$this->')) { + $v = "DEPREC."; + } + else { + ob_start(); + $d = include("$path.$ext"); + ob_end_clean(); + + if ($d == 1) + $v = "DEPREC."; + else { + $class = "ok"; + $v = $d["_version_"]; + } + } + } + } + + echo ""; + } + + echo ""; + $i++; + } + ?> + + +
    Font familyVariantsFile versions
    TTFAFMAFM cacheUFMUFM cache
    + (default)'; + ?> +
    + $name : $path
    +
    $v
    + +

    Install new fonts

    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Name
    Normal
    Bold
    Bold italic
    Italic
    +
    + + + \ No newline at end of file diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/foot.inc b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/foot.inc new file mode 100755 index 00000000..81b1819f --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/foot.inc @@ -0,0 +1,10 @@ +
    + + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/functions.inc.php b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/functions.inc.php new file mode 100755 index 00000000..714975f4 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/functions.inc.php @@ -0,0 +1,53 @@ +Authenticate to access this section'; +} + +function get_php_self(){ + return isset($_SERVER['PHP_SELF']) ? htmlentities(strip_tags($_SERVER['PHP_SELF'],''), ENT_QUOTES, 'UTF-8') : ''; +} + +// From apc.php +function auth_check() { + if ( isset($_GET["login"]) && DOMPDF_ADMIN_PASSWORD == "password" ) { + $_SESSION["auth_message"] = "The password must be changed in 'dompdf_config.custom.inc.php'"; + return false; + } + else { + $_SESSION["auth_message"] = null; + } + + if ( isset($_GET["login"]) || isset($_SERVER["PHP_AUTH_USER"]) ) { + + if (!isset($_SERVER["PHP_AUTH_USER"]) || + !isset($_SERVER["PHP_AUTH_PW"]) || + $_SERVER["PHP_AUTH_USER"] != DOMPDF_ADMIN_USERNAME || + $_SERVER["PHP_AUTH_PW"] != DOMPDF_ADMIN_PASSWORD) { + + $PHP_SELF = get_php_self(); + + header('WWW-Authenticate: Basic realm="DOMPDF Login"'); + header('HTTP/1.0 401 Unauthorized'); + + echo << +

    Rejected!

    + Wrong Username or Password!
     
      + Continue... + +EOB; + exit; + } + + else { + $_SESSION["auth_message"] = null; + $_SESSION["authenticated"] = true; + return true; + } + } +} \ No newline at end of file diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/head.inc b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/head.inc new file mode 100755 index 00000000..0c4e29e7 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/head.inc @@ -0,0 +1,54 @@ +'; +} + +function li_star() { + return '
  • '; +} + +auth_check(); + +?> + + + + dompdf - The PHP 5 HTML to PDF Converter + + + + + + + + + + + + + + + +
    \ No newline at end of file diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/arrow_01.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/arrow_01.gif new file mode 100755 index 00000000..0a49fe88 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/arrow_01.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/arrow_02.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/arrow_02.gif new file mode 100755 index 00000000..d5f3c378 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/arrow_02.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/arrow_03.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/arrow_03.gif new file mode 100755 index 00000000..66ce13e8 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/arrow_03.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/arrow_04.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/arrow_04.gif new file mode 100755 index 00000000..a4898407 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/arrow_04.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/arrow_05.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/arrow_05.gif new file mode 100755 index 00000000..f5a62cf0 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/arrow_05.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/arrow_06.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/arrow_06.gif new file mode 100755 index 00000000..7ccdf5ce Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/arrow_06.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/css2.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/css2.png new file mode 100755 index 00000000..9fcaead5 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/css2.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/dompdf_simple.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/dompdf_simple.png new file mode 100755 index 00000000..1362ba0e Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/dompdf_simple.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/favicon.ico b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/favicon.ico new file mode 100755 index 00000000..4c4c7c29 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/favicon.ico differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/favicon.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/favicon.png new file mode 100755 index 00000000..a6de7bdb Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/favicon.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/h_bar.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/h_bar.gif new file mode 100755 index 00000000..a55e2f1c Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/h_bar.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/left_arrow.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/left_arrow.gif new file mode 100755 index 00000000..ecfae80f Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/left_arrow.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/logo.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/logo.png new file mode 100755 index 00000000..3fb7ad67 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/logo.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/logo.xcf b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/logo.xcf new file mode 100755 index 00000000..f78f35fc Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/logo.xcf differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/php5-power-micro.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/php5-power-micro.png new file mode 100755 index 00000000..19c4953b Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/php5-power-micro.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/small_logo.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/small_logo.png new file mode 100755 index 00000000..0b8517dc Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/small_logo.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/star_01.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/star_01.gif new file mode 100755 index 00000000..e110f505 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/star_01.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/star_02.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/star_02.gif new file mode 100755 index 00000000..75de4600 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/star_02.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/star_03.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/star_03.gif new file mode 100755 index 00000000..b3733cd8 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/star_03.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/star_04.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/star_04.gif new file mode 100755 index 00000000..3735525c Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/star_04.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/star_05.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/star_05.gif new file mode 100755 index 00000000..4983634d Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/star_05.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/title.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/title.gif new file mode 100755 index 00000000..9d2574e8 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/title.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/v_bar.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/v_bar.gif new file mode 100755 index 00000000..ccbc3fe3 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/v_bar.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/xhtml10.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/xhtml10.png new file mode 100755 index 00000000..30f1e8e6 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/images/xhtml10.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/jquery-1.4.2.js b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/jquery-1.4.2.js new file mode 100755 index 00000000..42998400 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/jquery-1.4.2.js @@ -0,0 +1,154 @@ +/*! + * jQuery JavaScript Library v1.4.2 + * http://jquery.com/ + * + * Copyright 2010, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2010, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Sat Feb 13 22:33:48 2010 -0500 + */ +(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/, +Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&& +(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this, +a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b=== +"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this, +function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b
    a"; +var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected, +parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent= +false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n= +s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true, +applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando]; +else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this, +a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b=== +w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i, +cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected= +c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); +a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g, +function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split("."); +k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a), +C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B=0){a.type= +e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&& +f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive; +if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data", +e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a, +"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a, +d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, +e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift(); +t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D|| +g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, +CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m, +g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, +text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, +setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return hl[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h= +h[3];l=0;for(m=h.length;l=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== +"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g, +h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&& +q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML=""; +if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="

    ";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}(); +(function(){var g=s.createElement("div");g.innerHTML="
    ";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}: +function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var j=d;j0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j= +{},i;if(f&&a.length){e=0;for(var o=a.length;e-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a=== +"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", +d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? +a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType=== +1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/"},F={option:[1,""],legend:[1,"
    ","
    "],thead:[1,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],col:[2,"","
    "],area:[1,"",""],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div
    ","
    "];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= +c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, +wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, +prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, +this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); +return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja, +""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]); +return this}else{e=0;for(var j=d.length;e0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["", +""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]===""&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e= +c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]? +c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja= +function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter= +Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a, +"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f= +a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b= +a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=//gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!== +"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("
    ").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this}, +serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), +function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href, +global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&& +e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)? +"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache=== +false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B= +false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since", +c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E|| +d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x); +g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status=== +1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b=== +"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional; +if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration=== +"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]|| +c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start; +this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now= +this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem, +e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b
    "; +a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b); +c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a, +d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top- +f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset": +"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in +e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window); \ No newline at end of file diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/setup.php b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/setup.php new file mode 100755 index 00000000..69351da3 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/setup.php @@ -0,0 +1,287 @@ + + + +

    Setup

    + + + +

    System Configuration

    + + array( + "required" => "5.0", + "value" => phpversion(), + "result" => version_compare(phpversion(), "5.0"), + ), + "DOMDocument extension" => array( + "required" => true, + "value" => phpversion("DOM"), + "result" => class_exists("DOMDocument"), + ), + "PCRE" => array( + "required" => true, + "value" => phpversion("pcre"), + "result" => function_exists("preg_match") && @preg_match("/./u", "a"), + "failure" => "PCRE is required with Unicode support (the \"u\" modifier)", + ), + "Zlib" => array( + "required" => true, + "value" => phpversion("zlib"), + "result" => function_exists("gzcompress"), + "fallback" => "Recommended to compress PDF documents", + ), + "MBString extension" => array( + "required" => true, + "value" => phpversion("mbstring"), + "result" => function_exists("mb_send_mail"), // Should never be reimplemented in dompdf + "fallback" => "Recommended, will use fallback functions", + ), + "GD" => array( + "required" => true, + "value" => phpversion("gd"), + "result" => function_exists("imagecreate"), + "fallback" => "Required if you have images in your documents", + ), + "APC" => array( + "required" => "For better performances", + "value" => phpversion("apc"), + "result" => function_exists("apc_fetch"), + "fallback" => "Recommended for better performances", + ), + "GMagick or IMagick" => array( + "required" => "Better with transparent PNG images", + "value" => null, + "result" => extension_loaded("gmagick") || extension_loaded("imagick"), + "fallback" => "Recommended for better performances", + ), +); + +if (($gm = extension_loaded("gmagick")) || ($im = extension_loaded("imagick"))) { + $server_configs["GMagick or IMagick"]["value"] = ($im ? "IMagick ".phpversion("imagick") : "GMagick ".phpversion("gmagick")); +} + +?> + + + + + + + + + $server_config) { ?> + + + + + + + +
    RequiredPresent
    "> + No. ".$server_config["fallback"].""; + } + if (isset($server_config["failure"])) { + echo "
    ".$server_config["failure"]."
    "; + } + } + ?> +
    + +

    DOMPDF Configuration

    + + array( + "desc" => "Root directory of DOMPDF", + "success" => "read", + ), + "DOMPDF_INC_DIR" => array( + "desc" => "Include directory of DOMPDF", + "success" => "read", + ), + "DOMPDF_LIB_DIR" => array( + "desc" => "Third-party libraries directory of DOMPDF", + "success" => "read", + ), + "DOMPDF_FONT_DIR" => array( + "desc" => "Additional fonts directory", + "success" => "read", + ), + "DOMPDF_FONT_CACHE" => array( + "desc" => "Font metrics cache", + "success" => "write", + ), + "DOMPDF_TEMP_DIR" => array( + "desc" => "Temporary folder", + "success" => "write", + ), + "DOMPDF_CHROOT" => array( + "desc" => "Restricted path", + "success" => "read", + ), + "DOMPDF_UNICODE_ENABLED" => array( + "desc" => "Unicode support (thanks to additionnal fonts)", + ), + "DOMPDF_ENABLE_FONTSUBSETTING" => array( + "desc" => "Enable font subsetting, will make smaller documents when using Unicode fonts", + ), + "DOMPDF_PDF_BACKEND" => array( + "desc" => "Backend library that makes the outputted file (PDF, image)", + "success" => "backend", + ), + "DOMPDF_DEFAULT_MEDIA_TYPE" => array( + "desc" => "Default media type (print, screen, ...)", + ), + "DOMPDF_DEFAULT_PAPER_SIZE" => array( + "desc" => "Default paper size (A4, letter, ...)", + ), + "DOMPDF_DEFAULT_FONT" => array( + "desc" => "Default font, used if the specified font in the CSS stylesheet was not found", + ), + "DOMPDF_DPI" => array( + "desc" => "DPI scale of the document", + ), + "DOMPDF_ENABLE_PHP" => array( + "desc" => "Inline PHP support", + ), + "DOMPDF_ENABLE_JAVASCRIPT" => array( + "desc" => "Inline JavaScript support", + ), + "DOMPDF_ENABLE_REMOTE" => array( + "desc" => "Allow remote stylesheets and images", + "success" => "remote", + ), + "DOMPDF_ENABLE_CSS_FLOAT" => array( + "desc" => "Enable CSS float support (experimental)", + ), + "DOMPDF_ENABLE_HTML5PARSER" => array( + "desc" => "Enable the HTML5 parser (experimental)", + ), + "DEBUGPNG" => array( + "desc" => "Debug PNG images", + ), + "DEBUGKEEPTEMP" => array( + "desc" => "Keep temporary image files", + ), + "DEBUGCSS" => array( + "desc" => "Debug CSS", + ), + "DEBUG_LAYOUT" => array( + "desc" => "Debug layout", + ), + "DEBUG_LAYOUT_LINES" => array( + "desc" => "Debug text lines layout", + ), + "DEBUG_LAYOUT_BLOCKS" => array( + "desc" => "Debug block elements layout", + ), + "DEBUG_LAYOUT_INLINE" => array( + "desc" => "Debug inline elements layout", + ), + "DEBUG_LAYOUT_PADDINGBOX" => array( + "desc" => "Debug padding boxes layout", + ), + "DOMPDF_LOG_OUTPUT_FILE" => array( + "desc" => "The file in which dompdf will write warnings and messages", + "success" => "write", + ), + "DOMPDF_FONT_HEIGHT_RATIO" => array( + "desc" => "The line height ratio to apply to get a render like web browsers", + ), + "DOMPDF_AUTOLOAD_PREPEND" => array( + "desc" => "Prepend the dompdf autoload function to the SPL autoload functions already registered instead of appending it", + ), + "DOMPDF_ADMIN_USERNAME" => array( + "desc" => "The username required to access restricted sections", + "secret" => true, + ), + "DOMPDF_ADMIN_PASSWORD" => array( + "desc" => "The password required to access restricted sections", + "secret" => true, + "success" => "auth", + ), +); +?> + + + + + + + + + + $value) { ?> + + + + + + + + +
    Config nameValueDescriptionStatus
    + + >
    + + + \ No newline at end of file diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/style.css b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/style.css new file mode 100755 index 00000000..ea6e5706 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/style.css @@ -0,0 +1,255 @@ +body, select { + color: #7d7a7a; + font-family: 'trebuchet ms', verdana, sans-serif; + font-size: 13px; +} + +a:link, a:visited, a:active { + color: #5F83BA; + text-decoration: none; +} + +a:hover { + color: #5f83ba; + text-decoration: underline; +} + +img { + border: none; +} + +pre, +code { + font-size: 0.8em; + font-family: "lucida console", monospace; +} + +pre { + background-color: #f8f8f8; + padding: 10px; +} + +select { + font-weight: bold; +} + +h2 { + margin: 0.3em 0; +} + +.bar { + background-image: url('images/h_bar.gif'); + background-repeat: repeat-x; + background-position: bottom right; +} + +#header { + height: 50px; + line-height: 30px; +} + +#footer { + font-size: 0.75em; + padding-top: 12px; + background-image: url('images/h_bar.gif'); + background-repeat: repeat-x; + background-position: top left; + height: 35px; + vertical-align: middle; + clear: both; +} + +#logo { + position: absolute; + top: 0px; + right: 0px; + border: none; +} + +.badges { + float: right; +} + +#left_col, #content { + vertical-align: top; +} +/* +#left_col { + padding: 3px 3px 2em 3px; + margin-top: 2px; + width: 210px; + padding-right: 10px; + background-image: url('images/v_bar.gif'); + background-repeat: repeat-y; + background-position: top right; +} +*/ + +#left_col { + padding: 3px 3px 3em 3px; + margin-top: 2px; + width: 120px; + padding-right: 10px; + float: left; +} + +#left_col h2 { + font-size: 1.0em; + margin-top: 0.5em; + margin-bottom: 0.25em; +} + +#left_col ul { + margin-top: 0.25em; + padding-left: 0px; + margin-left: 0px; + position: fixed; +} + +#left_col ul li { list-style-position: inside; } + +#left_col iframe { margin-left: 40px; margin-top: 10px; } + +#content { + margin-left: 120px; + padding: 1em 1em 1em 2em; + min-width: 800px; + background-image: url('images/v_bar.gif'); + background-repeat: repeat-y; + background-position: top left; +} + +.message { + margin-top: 1em; + border: 1px dashed #5E83BA; +} + +#content li { + margin-top: 0.3em; + vertical-align: top; +} + +#content>*>li { + margin-right: 40px; /* keep things in line */ +} + +#content h2 { + text-align: left; + color: #4A9166; +} + +#content h3 { + margin-top: 2em; +} + +#content p { + text-align: justify; +} + +#content table td, +#content table th { + padding: 0.3em; +} + +#content table td.input { + white-space: nowrap; + font-family: "lucida console", monospace; + font-size: 0.8em; +} + +#content textarea { + padding: 4px; + width: 100%; + border: 1px dashed #5F83BA; + -moz-box-shadow: inset 3px 3px 3px rgba(0,0,0,0.1); + -webkit-box-shadow: inset 3px 3px 3px rgba(0,0,0,0.1); + box-shadow: inset 3px 3px 3px rgba(0,0,0,0.1); +} + +#content button { + color: #6d6a6a; + font-family: 'trebuchet ms', verdana, sans-serif; +} + +#preview { + float: right; + height: 800px; + min-width: 400px; + width: 60%; + border: 1px solid #666; + margin-left: 1em; + -moz-box-shadow: 0px 0px 6px rgba(0,0,0,0.5); + -webkit-box-shadow: 0px 0px 6px rgba(0,0,0,0.5); + box-shadow: 0px 0px 6px rgba(0,0,0,0.5); +} + +table.setup { + border: 1px solid #ccc; + border-collapse: collapse; +} + +table.setup td, +table.setup th { + border: 1px solid #ccc; +} + +table.setup th { + background-color: #ddd; +} + +table.setup td.title { + background-color: #f6f6f6; +} + +table.setup td.ok, +table.setup tr:hover td.ok { + background-color: #9e4; +} + +table.setup td.failed, +table.setup tr:hover td.failed { + background-color: #f43; + color: white; +} + +table.setup td.warning, +table.setup tr:hover td.warning { + background-color: #FCC612; +} + +table.setup tr:hover td { + background-color: #EBF1F7; +} + +table.setup tr:hover td.title { + background-color: #D0E0F2; +} + +input[type="file"] { + width: 30em; +} + +/* Method definitions from phpdoc */ +.method-definition { + background-image: url('images/h_bar.gif'); + background-position: bottom center; + background-repeat: repeat-x; + padding: 10px 10px 20px 10px; + margin-bottom: 1em; +} + +.method-title { + color: #5F83BA; +} + +.var-name, +.method-name, +.method-title { + font-weight: bold; +} + +.var-type, +.method-result { + color: #4A9166; + font-style: italic; +} diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/backgroundcolor_fontdecoration_pageborder.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/backgroundcolor_fontdecoration_pageborder.html new file mode 100755 index 00000000..3b8dfd64 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/backgroundcolor_fontdecoration_pageborder.html @@ -0,0 +1,139 @@ + + + + + + + + +
    +

    Background color, text decoration, page border

    +

    see more testcases with background images in image_variants.html

    + +
    +
    + +

     

    + +

    Text

    +

    Link

    + +

     

    + +

    +block +inline +block +_underlinex +block +_underline stylex +block +_line-through stylex +block +_overline stylex +block +
    + +

     

    + +

    +block +inline +block +_underlinex +block +_underline stylex +block +_line-through stylex +block +_overline stylex +block +
    + +

     

    + +

    +block +inline +block +_underlinex +block +_underline stylex +block +_line-through stylex +block +_overline stylex +block +
    + +

     

    + +

    +block +inline +block +_underlinex +block +_underline stylex +block +_line-through stylex +block +_overline stylex +block +
    +

     

    + +

    +block +inline + +underline sdfjsfh sdfs sfd sf sf sdfsdfasf asdfasdfa asdfasdf asdf asdfas dfasdf afsafasf asdfasdasdf adfasfasdf + +block +
    + +

     

    + +

    +block +inline +block +underline +block +underline style +block +
    + +

     

    + +

    +The PHP 5 HTML to PDF converter +

    + +

    Fill fill fill fill fill fill fill fill

    +

    Fill fill fill fill fill fill fill fill

    +

    Fill fill fill fill fill fill fill fill

    +

    Fill fill fill fill fill fill fill fill

    +

    Fill fill fill fill fill fill fill fill

    +

    Fill fill fill fill fill fill fill fill

    +

    Fill fill fill fill fill fill fill fill

    +
    + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css/common.css b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css/common.css new file mode 100755 index 00000000..eb8c732b --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css/common.css @@ -0,0 +1,128 @@ +/* Notes +-----------------------------------------------------------------------*/ +.note_form { + display: none; +} + + +/* Page +-----------------------------------------------------------------------*/ +.page { + background-color: white; + padding: 20px; + font-size: 0.7em; + margin-bottom: 15px; + margin-right: 5px; +} + +.page table.header td h1 { + margin: 0px; +} + +.page table.header { + border-bottom: 1px solid black; +} + +.page h1 { + text-align: center; + color: black; + font-style: normal; + font-size: 2em; +} + +.page h2 { + text-align: center; + color: black; +} + +.page h3 { + color: black; + font-size: 1em; +} + +.page p { + text-align: justify; + font-size: 1em; +} + +.page em { + font-weight: bold; + font-style: normal; + text-decoration: underline; + margin-left: 1%; + margin-right: 1%; + +} + +.money_table { + width: 85%; + margin-left: auto; + margin-right: auto; +} + +.money { + text-align: right; + padding-right: 20px; +} + +.money_field { + text-align: right; + padding: 0px 15px 5px 15px; + font-weight: bold; +} + +.total_label { + border-top: 2px double black; + font-weight: bold; +} + +.total_field { + border-top: 2px double black; + text-align: right; + padding: 0px 15px 5px 15px; + font-weight: bold; +} + +.written_field { + border-bottom: 0.1pt solid black; +} + +.page .indent * { margin-left: 4em; } + +.checkbox { + border: 1px solid black; + padding: 1px 2px; + font-size: 7px; + font-weight: bold; +} + +table.fax_head { + width: 100%; + font-weight: bold; + font-size: 1.1em; + border-bottom: 1px solid black; +} + +/* Sales-agreement specific +-----------------------------------------------------------------------*/ +table.sa_signature_box { + margin: 2em auto 2em auto; +} + +table.sa_signature_box tr td { + padding-top: 1.5em; + vertical-align: top; + white-space: nowrap; +} + +.special_conditions { + font-style: italic; + margin-left: 2em; + white-space: pre; + font-weight: bold; +} + +.page h2 { + text-align: left; +} + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css/importabs.css b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css/importabs.css new file mode 100755 index 00000000..928c5c3a --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css/importabs.css @@ -0,0 +1,2 @@ +p.importabs {background-color:#ffffc0;} + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css/importall.css b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css/importall.css new file mode 100755 index 00000000..a3ef7651 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css/importall.css @@ -0,0 +1,2 @@ +li.import {background-color:#ffffc0;} + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css/importdisplay.css b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css/importdisplay.css new file mode 100755 index 00000000..8b0ca47b --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css/importdisplay.css @@ -0,0 +1,2 @@ +p.import {background-color:#c0c0ff;} + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css/importprint.css b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css/importprint.css new file mode 100755 index 00000000..2f28d3aa --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css/importprint.css @@ -0,0 +1,2 @@ +p.import {background-color:#eeeeee;} + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css/importsub.css b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css/importsub.css new file mode 100755 index 00000000..fcfcdb13 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css/importsub.css @@ -0,0 +1,2 @@ +p.importsub {background-color:#ffffc0;} + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css/linkall.css b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css/linkall.css new file mode 100755 index 00000000..aca92b4f --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css/linkall.css @@ -0,0 +1,2 @@ +li.link {background-color:#ffffc0;} + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css/linkdefault.css b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css/linkdefault.css new file mode 100755 index 00000000..9b1d6e54 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css/linkdefault.css @@ -0,0 +1,2 @@ +li.link {color:#ff0000;} + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css/linkdisplay.css b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css/linkdisplay.css new file mode 100755 index 00000000..28d564a1 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css/linkdisplay.css @@ -0,0 +1,2 @@ +p.link {background-color:#c0c0ff;} + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css/linkprint.css b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css/linkprint.css new file mode 100755 index 00000000..f6ad0b3a --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css/linkprint.css @@ -0,0 +1,2 @@ +p.link {background-color:#eeeeee;} + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css/print_static.css b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css/print_static.css new file mode 100755 index 00000000..dedab40c --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css/print_static.css @@ -0,0 +1,701 @@ +/* Default style definitions */ + +@import url(common.css); + +@page { + margin: 0.25in; +} + +/* General +-----------------------------------------------------------------------*/ +body { + background-color: transparent; + color: black; + font-family: "verdana", "sans-serif"; + margin: 0px; + padding-top: 0px; + font-size: 1em; +} + +@media print { + p { margin: 2px; } +} + +h1 { + font-size: 1.1em; + font-style: italic; +} + +h2 { + font-size: 1.05em; +} + +img { + border: none; +} + +pre { + font-family: "verdana", "sans-serif"; + font-size: 0.7em; +} + +ul { + list-style-type: circle; + list-style-position: inside; + margin: 0px; + padding: 3px; +} + +li.alpha { + list-style-type: lower-alpha; + margin-left: 15px; +} + +p { + font-size: 0.8em; +} + +a:link, +a:visited { + /* font-weight: bold; */ + text-decoration: none; + color: black; +} + +a:hover { + text-decoration: underline; +} + +#body { + padding-bottom: 2em; + padding-top: 5px; +} + +#body pre { +} + +.center { + text-align: center; +} + +.right { + text-align: right; +} + +#money { + text-align: right; + padding-right: 20px; +} + +/* Footer +-----------------------------------------------------------------------*/ +#footer { + color: black; +} + +#copyright { + padding: 5px; + font-size: 0.6em; + background-color: white; +} + +#footer_spacer_row { + width: 100%; +} + +#footer_spacer_row td { + padding: 0px; + border-bottom: 1px solid #000033; + background-color: #F7CF07; + height: 2px; + font-size: 2px; + line-height: 2px; +} + +#logos { + padding: 5px; + float: right; +} + +/* Section Header +-----------------------------------------------------------------------*/ +#section_header { + text-align: center; +} + +#job_header { + text-align: left; + background-color: white; + margin-left: 5px; + padding: 5px; + border: 1px dashed black; +} + +#job_info { + font-weight: bold; +} + +.header_details td { + font-size: 0.6em; +} + +.header_label { + padding-left: 20px; +} + +.header_field { + padding-left: 5px; + font-weight: bold; +} + +/* Content +-----------------------------------------------------------------------*/ +#content { + padding: 0.2em 1% 0.2em 1%; + min-height: 15em; +} + +.page_buttons { + text-align: center; + margin: 3px; + font-size: 0.7em; + white-space: nowrap; + font-weight: bold; + width: 74%; +} + +.link_bar { + font-size: 0.7em; + text-align: center; + margin: auto; +/* white-space: nowrap; */ +} + +.link_bar a { + white-space: nowrap; + font-weight: bold; +} + +.page_menu li { + margin: 5px; + font-size: 0.8em; +} + +/* Detail +-----------------------------------------------------------------------*/ +.detail_table { + border-top: 1px solid black; + border-bottom: 1px solid black; + padding: 3px; + margin: 15px; +} + +.detail_head td { + background-color: #ddd; + color: black; + font-weight: bold; + padding: 3px; + font-size: 0.75em; + text-align: center; +} + +.detail_label { + padding: 3px; + font-size: 0.75em; + width: 16%; + border-top: 1px solid #fff; + border-bottom: 1px solid #fff; + background-color: #ddd; +} + +.detail_field { + width: 33%; + font-size: 0.8em; + color: ; + text-align: center; + padding: 3px; +} + +.detail_sub_table { + font-size: 1em; +} + +.detail_spacer_row td { + border-top: 1px solid white; + border-bottom: 1px solid white; + background-color: #999; + font-size: 2px; + line-height: 2px; +} + +#narrow { + width: 50%; +} + +.operation { + width: 1%; +} + +.summary_spacer_row { + font-size: 0.1em; +} + +.bar { + border-top: 1px solid black; +} + +/* Forms +-----------------------------------------------------------------------*/ +.form { + border-top: 1px solid black; + border-bottom: 1px solid black; + margin-top: 10px; +} + +.form td { + padding: 3px; +} + +.form th, .form_head td { + background-color: #ddd + border-bottom: 1px solid black; + color: black; + padding: 3px; + text-align: center; + font-size: 0.65em; + font-weight: bold; +} + +.form_head a:link, +.form_head a:visited { + color: black; +} + +.form_head a:hover { +} + +.sub_form_head td { + border: none; + font-size: 0.9em; + white-space: nowrap; +} + +.form input { + color: black; + background-color: white; + border: 1px solid black; + padding: 1px 2px 1px 2px; + text-decoration: none; + font-size: 1em; +} + +.form textarea { + color: black; + background-color: white; + border: 1px solid black; + font-size: 1em; +} + +.form select { + color: black; + background-color: white; + font-size: 1em; +} + +.button, a.button { + color: black; + background-color: white; + border: 1px solid black; + font-weight: normal; + white-space: nowrap; + text-decoration: none; +} + +a.button { + display: inline-block; + text-align: center; + padding: 2px; +} + +a.button:hover { + text-decoration: none; + color: black; +} + +.form_field { + color: black; + background-color: white; + font-size: 0.7em; +} + +.form_label { + color: black; + background-color: #ddd; + font-size: 0.7em; + padding: 3px; +} + +/* +.form_foot { + background-color: #E5D9C3; + font-size: 0.6em; +} +*/ + +.form_foot td { + background-color: #ddd + border-bottom: 1px solid black; + color: black; + padding: 3px; + text-align: center; + font-size: 0.65em; + font-weight: bold; +} + +.form_foot a:link, +.form_foot a:visited { + color: black; +} + +.form_foot a:hover { + color: black; +} + +.no_border_input input { + border: none; +} + +.no_wrap { + white-space: nowrap; +} + +tr.row_form td { + white-space: nowrap; +} + +/* Wizards +-----------------------------------------------------------------------*/ +.wizard { + font-size: 0.8em; + border-top: 1px solid black; +} + +#no_border { + border: none; +} + +.wizard p { + text-indent: 2%; +} + +.wizard td { + padding: 3px; +/* padding-left: 3px; + padding-right: 3px; + padding-bottom: 3px;*/ +} + +.wizard input { + color: black; + background-color: white; + border: 1px solid black; + padding: 1px 2px 1px 2px; + text-decoration: none; +} + +.wizard textarea { + color: black; + background-color: white; + border: 1px solid black; +} + +.wizard select { + color: black; + background-color: white; + border: 1px solid black; +} + +.wizard_head { + color: black; + font-weight: bold; +} + +.wizard_buttons { + border-top: 1px solid black; + padding-top: 3px; +} + +.wizard_buttons a { + background-color: white; + border: 1px solid black; + padding: 2px 3px 2px 3px; +} + +/* List +-----------------------------------------------------------------------*/ +.list_table, +.notif_list_table { + color: black; + padding-bottom: 4px; + background-color: white; +} + +.list_table td, +.notif_list_table td { + padding: 3px 5px 3px 5px; +} + +.list_table input { + color: black; + background-color: white; + border: 1px solid black; + padding: 1px 2px 1px 2px; + text-decoration: none; +} + +.list_head, +.notif_list_head { + font-weight: bold; + background-color: #ddd; + font-size: 0.65em; +} + +.list_head td, +.notif_list_head td { + border-top: 1px solid black; + border-bottom: 1px solid black; + color: black; + text-align: center; + white-space: nowrap; +} + +.list_head a:link, +.list_head a:visited, +.notif_list_head a:link, +.notif_list_head a:visited { + color: black; +} + +.list_head a:hover, +.notif_list_head a:hover { +} + +.list_foot { + font-weight: bold; + background-color: #ddd; + font-size: 0.65em; +} + +.list_foot td { + border-top: 1px solid black; + border-bottom: 1px solid black; + color: black; + text-align: right; + white-space: nowrap; +} + +.sub_list_head td { + border: none; + font-size: 0.7em; +} + +.odd_row td { +/* background-color: #EDF2F7; + border-top: 2px solid #FFFFff;*/ + background-color: transparent; + border-bottom: 0.9px solid #ddd; /* 0.9 so table borders take precedence */ +} + +.even_row td { +/* background-color: #F8EEE4; + border-top: 3px solid #FFFFff;*/ + background-color: #f6f6f6; + border-bottom: 0.9px solid #ddd; +} + +.spacer_row td { + line-height: 2px; + font-size: 2px; +} + +.phone_table td { + border: none; + font-size: 0.8em; +} + +div.notif_list_text { + margin-bottom: 1px; + font-size: 1.1em; +} + +.notif_list_row td.notif_list_job { + text-align: center; + font-weight: bold; + font-size: 0.65em; +} + +.notif_list_row td.notif_list_dismiss table td { + text-align: center; + font-size: 1em; + border: none; + padding: 0px 2px 0px 2px; +} + +.notif_list_row td { + padding: 5px 5px 7px 5px; + border-bottom: 1px dotted #ddd; + background-color: white; + font-size: 0.6em; +} + +.notif_list_row:hover td { + background-color: #ddd; +} + +/* Page +-----------------------------------------------------------------------*/ +.page { + border: none; + padding: 0in; + margin-right: 0.1in; + margin-left: 0.1in; + /*margin: 0.33in 0.33in 0.4in 0.33in; */ + background-color: transparent; +} + +.page table.header h1{ + font-size: 12pt; +} + +.page>h2, +.page>p { + margin-top: 2pt; + margin-bottom: 2pt; +} + +.page h2 { + page-break-after: avoid; +} + +.money_table { + border-collapse: collapse; + font-size: 6pt; +} + +/* Tree +-----------------------------------------------------------------------*/ +.tree_div { + display: none; + background-color: #ddd; + border: 1px solid #333; +} + +.tree_div .tree_step_bottom_border { + border-bottom: 1px dashed #8B9DBE; +} + +.tree_div .button, .tree_row_table .button, +.tree_div .no_button { + width: 110px; + font-size: 0.7em; + padding: 3px; + text-align: center; +} + +/* +.tree_div .button a, .tree_row_table .button a { + text-decoration: none; + color: #114C8D; +} +*/ + +.tree_row_desc { + font-weight: bold; + font-size: 0.7em; + text-indent: -10px; +} + +.tree_row_info { + font-size: 0.7em; + width: 200px; +} + +.tree_div_head a, +.tree_row_desc a { + color: #000033; + text-decoration: none; +} + +.tree_div_head { + font-weight: bold; + font-size: 0.7em; +} + +/* Summaries +-----------------------------------------------------------------------*/ +.summary { + border: 1px solid black; + background-color: white; + padding: 1%; + font-size: 0.8em; +} + +.summary h1 { + color: black; + font-style: normal; +} + +/* Sales-agreement specific +-----------------------------------------------------------------------*/ +table.sa_signature_box { + margin: 2em auto 2em auto; +} + +table.sa_signature_box tr td { + padding-top: 1.25em; + vertical-align: top; + white-space: nowrap; +} + +.special_conditions { + font-style: italic; + margin-left: 2em; + white-space: pre; +} + +.sa_head * { + font-size: 7pt; +} + +/* Change order specific +-----------------------------------------------------------------------*/ +table.change_order_items { + font-size: 8pt; + width: 100%; + border-collapse: collapse; + margin-top: 2em; + margin-bottom: 2em; +} + +table.change_order_items>tbody { + border: 1px solid black; +} + +table.change_order_items>tbody>tr>th { + border-bottom: 1px solid black; +} + +table.change_order_items>tbody>tr>td { + border-right: 1px solid black; + padding: 0.5em; +} + +td.change_order_total_col { + padding-right: 4pt; + text-align: right; +} + +td.change_order_unit_col { + padding-left: 2pt; + text-align: left; +} \ No newline at end of file diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_2d_transforms.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_2d_transforms.html new file mode 100755 index 00000000..96abed3d --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_2d_transforms.html @@ -0,0 +1,87 @@ + + + + + + + + + + + + +

    none

    +
     
    + +

    rotate

    +
     
    + +

    scale

    +
     
    +
     
    +
     
    +
     
    + +

    translate

    +
     
    +
     
    +
     
    +
     
    + +

    skew

    +
     
    +
     
    +
     
    +
     
    + +

    mixed

    +
     
    + + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_at_font_face.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_at_font_face.html new file mode 100755 index 00000000..5b4ad485 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_at_font_face.html @@ -0,0 +1,41 @@ + + + + + + + + + + + +

    Give You Glory

    +

    + Grumpy wizards make toxic brew for the evil Queen and Jack +

    + +

    Wallpoet

    +

    + Grumpy wizards make toxic brew for the evil Queen and Jack +

    + +

    Love Ya Like A Sister

    +

    + Grumpy wizards make toxic brew for the evil Queen and Jack +

    + + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_baseline.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_baseline.html new file mode 100755 index 00000000..af8bfb51 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_baseline.html @@ -0,0 +1,53 @@ + + + + + + + + +

    +(enter your text here) +

    + +

    +suptestsub +

    + + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_border.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_border.html new file mode 100755 index 00000000..f08086ef --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_border.html @@ -0,0 +1,163 @@ + + + + + + + + + + + + + + + + + + + + + +
    dotteddashedsoliddouble
    grooveridgeinsetoutset
    + +

    partial attributes merged

    + +
    border:thin solid red;
    +
    border:red thin solid;
    +
    { border:thin solid; }{border:blue; } (merged, reset all - color has no effect)
    +
    { border:thin solid; }{border-color:green; } (merged, overwrite only color)
    +
    { border:thin solid; }{border:blue; } (merged, reset all - color has no effect)
    +
    { border:thin solid; }{border-color:green; } (merged, overwrite only color)
    +
    { border:thin blue solid; }{border-color:green; } (merged, overwrite only color)
    +
    { border:thin blue solid; }{border-style:dashed; } (merged, overwrite only style)
    +
    { border:thin blue solid; }{border-width:thick; } (merged, overwrite only width)
    +
    { border:thin blue solid; }{border-width:medium; } (merged, overwrite only width)
    +
    { border:thin blue solid; }{border-width:3pt; } (merged, overwrite only width)
    + +

    top:

    + +
    border-top:thin solid red;
    +
    border-top:red thin solid;
    +
    { border-top:thin solid; }{border-top-color:green; } (merged, overwrite only color)
    +
    { border-top:thin solid; }{border-top:blue; } (merged, reset all - color has no effect)
    + +

    right left bottom:

    + +
    border-right:thin solid red;
    +
    border-left:thin solid red;
    +
    border-bottom:thin solid red;
    + +

    Individual Attributes

    +
    {border:thin blue solid;}{border-top-color:red;}
    +
    {border:thin blue solid;}{border-right-color:red;}
    +
    {border:thin blue solid;}{border-bottom-color:red;}
    +
    {border:thin blue solid;}{border-left-color:red;}
    + +
    {border:thin blue solid;}{border-top-style:dashed;}
    +
    {border:thin blue solid;}{border-right-style:dashed;}
    +
    {border:thin blue solid;}{border-bottom-style:dashed;}
    +
    {border:thin blue solid;}{border-left-style:dashed;}
    + +
    {border:thin blue solid;}{border-top-width:medium;}
    +
    {border:thin blue solid;}{border-right-width:medium;}
    +
    {border:thin blue solid;}{border-bottom-width:medium;}
    +
    {border:thin blue solid;}{border-left-width:medium;}
    + +

    Individual side specific Attributes

    + +
    {border:thin blue solid;}{border-color:red;}
    +
    {border:thin blue solid;}{border-color:red green;}
    +
    {border:thin blue solid;}{border-color:red green blue;}
    +
    {border:thin blue solid;}{border-color:red green blue gray;}
    + +
    {border:thin blue solid;}{border-style:dashed;}
    +
    {border:thin blue solid;}{border-style:dashed dotted;}
    +
    {border:thin blue solid;}{border-style:dashed dotted double;}
    +
    {border:thin blue solid;}{border-style:dashed dotted double groove;}
    + +
    {border:thin blue solid;}{border-width:1pt;}
    +
    {border:thin blue solid;}{border-width:1pt 2pt;}
    +
    {border:thin blue solid;}{border-width:1pt 2pt 3pt;}
    +
    {border:thin blue solid;}{border-width:1pt 2pt 3pt 4pt;}
    + +
    +

    Misc. values

    + +
    +
    +
    +
    +
    +
    + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_color_cmyk.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_color_cmyk.html new file mode 100755 index 00000000..46a719e6 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_color_cmyk.html @@ -0,0 +1,51 @@ + + + + + + + + + + +All these rectangles should look red: + +
    + +
    + +
    + +
    + +
    + +
    +
    +
    + +CMYK JPEG:
    + + +

    +CMYK: +
    + +
    + +
    + +
    + + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_content.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_content.html new file mode 100755 index 00000000..4558df51 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_content.html @@ -0,0 +1,47 @@ + + + + + + + + + Look at the HTML source ! + +

    quote <q>

    +

    to

    + +

    +

    +

    + + + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_float.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_float.html new file mode 100755 index 00000000..b775b8e2 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_float.html @@ -0,0 +1,57 @@ + + + + + + + + + +
    + + Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed non risus. S + uspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. + Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. + + + Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. + Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim. Pellentesque congue. + Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue. + Praesent egestas leo in pede. Praesent blandit odio eu enim. + Pellentesque sed dui ut augue blandit sodales. + Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam nibh. + Mauris ac mauris sed pede pellentesque fermentum. + +
    + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_font_selection.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_font_selection.html new file mode 100755 index 00000000..4067cac5 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_font_selection.html @@ -0,0 +1,115 @@ + + + + + + + +

    Font Selection

    + +

    Available font-family:

    +
      +
    • serif (default) (Aliases: times, times-roman)
    • +
    • sans-serif (Aliases: helvetica)
    • +
    • monospace (Aliases: fixed, courier)
    • +
    +

    Available font-style:

    +
      +
    • normal (default)
    • +
    • italic
    • +
    +

    Available font-weight:

    +
      +
    • normal (default)
    • +
    • bold
    • +
    +

    Other variations are falling back to a combination of the above

    +

    Special fonts

    +
      +
    • symbol
    • +
    • zapfdingbats
    • +
    + +

    Font selection

    + +

    abcdefghijk ABCDEFGHIJK - (Helvetica) - (sans-serif) - sans-serif

    +

    abcdefghijk ABCDEFGHIJK - (Helvetica) - (sans-serif) - helvetica

    +

    abcdefghijk ABCDEFGHIJK - (Times-Roman) - (serif) - serif

    +

    abcdefghijk ABCDEFGHIJK - (Times-Roman) - (serif) - times

    +

    abcdefghijk ABCDEFGHIJK - (Times-Roman) - (serif) - times-roman

    +

    abcdefghijk ABCDEFGHIJK - (Courier)- (monospace) - mononospace

    +

    abcdefghijk ABCDEFGHIJK - (Courier)- (monospace) - fixed

    +

    abcdefghijk ABCDEFGHIJK - (Courier)- (monospace) - courier

    + +

    Font search path

    + +

    abcdefghijk ABCDEFGHIJK - serif - "font-family:dummy1,dummy2;"

    +

    abcdefghijk ABCDEFGHIJK - sans-serif - "font-family:dummy1,dummy2,sans-serif;"

    +

    abcdefghijk ABCDEFGHIJK - sans-serif - "font-family:sans-serif,dummy1,dummy2;"

    +

    abcdefghijk ABCDEFGHIJK - sans-serif - "font-family:sans-serif,courier;"

    + +

    Font variations

    + +

    abcdefghijk ABCDEFGHIJK - serif - normal - "font-style:normal; font-weight:normal;"

    +

    abcdefghijk ABCDEFGHIJK - serif - normal - "font-style:normal; font-weight:lighter;"

    +

    abcdefghijk ABCDEFGHIJK - serif - normal - "font-style:normal; font-weight:100;"

    +

    abcdefghijk ABCDEFGHIJK - serif - normal - "font-style:normal; font-weight:200;"

    +

    abcdefghijk ABCDEFGHIJK - serif - normal - "font-style:normal; font-weight:300;"

    +

    abcdefghijk ABCDEFGHIJK - serif - normal - "font-style:normal; font-weight:400;"

    +

    abcdefghijk ABCDEFGHIJK - serif - normal - "font-style:normal; font-weight:500;"

    +

    abcdefghijk ABCDEFGHIJK - serif - bold - "font-style:normal; font-weight:600;"

    +

    abcdefghijk ABCDEFGHIJK - serif - bold - "font-style:normal; font-weight:700;"

    +

    abcdefghijk ABCDEFGHIJK - serif - bold - "font-style:normal; font-weight:800;"

    +

    abcdefghijk ABCDEFGHIJK - serif - bold - "font-style:normal; font-weight:900;"

    +

    abcdefghijk ABCDEFGHIJK - serif - bold - "font-style:normal; font-weight:bold;"

    +

    abcdefghijk ABCDEFGHIJK - serif - bold - "font-style:normal; font-weight:bolder;"

    +

    abcdefghijk ABCDEFGHIJK - serif - italic - "font-style:italic; font-weight:normal;"

    +

    abcdefghijk ABCDEFGHIJK - serif - italic - "font-style:oblique; font-weight:normal;"

    +

    abcdefghijk ABCDEFGHIJK - serif - bold_italic - "font-style:italic; font-weight:bold;"

    +

    abcdefghijk ABCDEFGHIJK - serif - normal - "font-variant:small-caps; font-style:normal; font-weight:normal;"

    + +

    Font size

    +

    abcdefghijk ABCDEFGHIJK - xx-small

    +

    abcdefghijk ABCDEFGHIJK - x-small

    +

    abcdefghijk ABCDEFGHIJK - small

    +

    abcdefghijk ABCDEFGHIJK - medium

    +

    abcdefghijk ABCDEFGHIJK - large

    +

    abcdefghijk ABCDEFGHIJK - x-large

    +

    abcdefghijk ABCDEFGHIJK - xx-large

    +

    abcdefghijk ABCDEFGHIJK - 10pt

    +

    abcdefghijk ABCDEFGHIJK - 12pt

    +

    abcdefghijk ABCDEFGHIJK - l4pt

    +

    abcdefghijk ABCDEFGHIJK - smaller

    +

    abcdefghijk ABCDEFGHIJK - larger

    + +

    Line height

    +

    abcdefghijk ABCDEFGHIJK
    abcdefghijk ABCDEFGHIJK 100%

    +

    abcdefghijk ABCDEFGHIJK
    abcdefghijk ABCDEFGHIJK 120%

    +

    abcdefghijk ABCDEFGHIJK
    abcdefghijk ABCDEFGHIJK 140%

    +

    abcdefghijk ABCDEFGHIJK
    abcdefghijk ABCDEFGHIJK 100%

    +

    abcdefghijk ABCDEFGHIJK
    abcdefghijk ABCDEFGHIJK 120%

    +

    abcdefghijk ABCDEFGHIJK
    abcdefghijk ABCDEFGHIJK 140%

    + +

    Font combined setting

    +

    style="font:italic small-caps bold 14pt/160% sans-serif;"
    (all attributes)

    +

    style="font:normal 10pt/160% sans-serif;"
    (partial attributes)

    +

    style="font:700 10pt/160% sans-serif;"
    (partial attributes)

    +

    style="font:small sans-serif;"
    (partial attributes)

    +
    + +

    inherit style="font:italic small-caps bold 14pt/160% sans-serif;" :

    + +

    +style="font:small sans-serif;"
    +(partial attributes - reset inherited)
    +style="font-weight:bold;"
    +(partial overwrite)

    +(resume partial attributes) +

    + +

    continue inherited

    + +
    + + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_important_flag.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_important_flag.html new file mode 100755 index 00000000..a98ae1a3 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_important_flag.html @@ -0,0 +1,54 @@ + + + + + + + + +

    Handling of "!important" property flag

    +

    +Normally later css style properties defined later are overriding earlier ones.
    +Except if they are marked with the flag "!important".
    +Those can only be overridden by style properties which are also marked "!important". +

    + +

    There are two classes of property overriding

    +
      +
    • inherit (nested html tags)
    • +
    • merging (more css properties to the same html tag)
    • +
    +

    This is handled similarly for all styles, so we check only examples here

    + +

    ul { line-height:160% }

    + +

    merge a { border-bottom:dashed 1pt red !important; text-decoration:none !important; }

    + +

    dummy links, text decoration/border bottom:

    + + + +

    Inherit .monospace { font-family:monospace !important; }

    +

    font family selection:

    +
      +
    • (default)
    • +
    • font-family:sans-serif; (ignored)
    • +
    • font-family:sans-serif!important; (override)
    • +
    + + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_letter_spacing.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_letter_spacing.html new file mode 100755 index 00000000..fb813cbb --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_letter_spacing.html @@ -0,0 +1,102 @@ + + + + + + + + +
    +

    This has letter spacing of 5px

    +

    This has letter spacing of 4px

    +

    This has letter spacing of 3px

    +

    This has letter spacing of 2px

    +

    This has letter spacing of 1px

    +

    This has normal letter spacing

    +

    This has letter spacing of -1px

    +

    This has letter spacing of -2px

    +

    This has letter spacing of -3px

    +

    This has letter spacing of -4px

    +

    This has letter spacing of -5px

    +
    + +
    +

    This has letter spacing of 5px

    +

    This has letter spacing of 4px

    +

    This has letter spacing of 3px

    +

    This has letter spacing of 2px

    +

    This has letter spacing of 1px

    +

    This has normal letter spacing

    +

    This has letter spacing of -1px

    +

    This has letter spacing of -2px

    +

    This has letter spacing of -3px

    +

    This has letter spacing of -4px

    +

    This has letter spacing of -5px

    +
    + +
    +

    This has letter spacing of 5px

    +

    This has letter spacing of 4px

    +

    This has letter spacing of 3px

    +

    This has letter spacing of 2px

    +

    This has letter spacing of 1px

    +

    This has normal letter spacing

    +

    This has letter spacing of -1px

    +

    This has letter spacing of -2px

    +

    This has letter spacing of -3px

    +

    This has letter spacing of -4px

    +

    This has letter spacing of -5px

    +
    + +
    +

    This has letter spacing of 5px. This has letter spacing of 5px. This has letter spacing of 5px.

    +

    This has letter spacing of 4px. This has letter spacing of 4px. This has letter spacing of 4px.

    +

    This has letter spacing of 3px. This has letter spacing of 3px. This has letter spacing of 3px.

    +

    This has letter spacing of 2px. This has letter spacing of 2px. This has letter spacing of 2px.

    +

    This has letter spacing of 1px. This has letter spacing of 1px. This has letter spacing of 1px.

    +

    This has normal letter spacing. This has normal letter spacing. This has normal letter spacing.

    +

    This has letter spacing of -1px. This has letter spacing of -1px. This has letter spacing of -1px.

    +

    This has letter spacing of -2px. This has letter spacing of -2px. This has letter spacing of -2px.

    +

    This has letter spacing of -3px. This has letter spacing of -3px. This has letter spacing of -3px.

    +

    This has letter spacing of -4px. This has letter spacing of -4px. This has letter spacing of -4px.

    +

    This has letter spacing of -5px. This has letter spacing of -5px. This has letter spacing of -5px.

    +
    + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_line_height.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_line_height.html new file mode 100755 index 00000000..95bffe16 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_line_height.html @@ -0,0 +1,63 @@ + + + + +CSS Line Height Inheritance + + + +

    Use only <number> for line-height

    +

    unless you like solving inexplicable inheritance problems or setting an explicit line-height on every element

    +

    div {line-height: 1}; div div {font-size: 200%}

    +
    The quick brown fox
    jumps over the crazy +
    The quick brown fox
    jumps over the crazy
    +

    div {line-height: 1em}; div div {font-size: 200%}

    +
    The quick brown fox
    jumps over the crazy +
    The quick brown fox
    jumps over the crazy
    +

    div {line-height: 100%}; div div {font-size: 200%}

    +
    The quick brown fox
    jumps over the crazy +
    The quick brown fox
    jumps over the crazy
    +
    +

    When rendered according to the +css 2.1 spec, +the 200% text in the second two div divs, those for which line-height of the parent +are specified in em or %, will overlap, the child divs being 1/2 the height of their containing +divs; while the first div div will be 2/3 the height of its containing div, +and its text won't overlap. The overlapping text in the latter div divs is because the spec requires the calculated +line-height specified in em or % be inherited by the children. In contrast, it is <number> itself that is inherited by +the children, which allows the line-height specified to be applied in reference to the font-size of the child div instead of +the ancestor.

    +
    +IE has an additional problem with line-height. +
    +
    + +
    + +Valid HTML 4.01! +
    +Last Modified
    2005.11.29
    © Felix Miata
    +Felix's Home +
    + + + \ No newline at end of file diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_margin.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_margin.html new file mode 100755 index 00000000..0efdc932 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_margin.html @@ -0,0 +1,38 @@ + + + + + + + + +

    (margin: 1em;) The PHP Development +Team would like to announce the immediate availability of PHP 5.0.1. This is +a maintenance release that in addition to many non-critical bug fixes also +includes new UNIX and Windows installation docs which are now auto-generated +from the PHP Manual.

    + +

    (margin: 1em 1em 1em +50%;) PHP 4.3.9RC1 has been released for testing. This is the first +release candidate and should have a very low number of problems and/or +bugs. Nevertheless, please download and test it as much as possible on +real-life applications to uncover any remaining issues.

    + +

    (margin: 4em 1em 4em +1em;) PHP Tunisie has just released the second issue of its monthly +french PHP Magazine. In this issue you'll find a large plan on PostgreSQL, +Databases abstractions with PHP, your mini template engine, an article on +images generation with PHP, the migration towards PHP5 with +EasyPHP1.7... And many other articles and latests PHP news.

    + +

    (margin: 1em auto 1em +auto;) The traditional International PHP Conference 2004 will be +taking place from 7th November to 10th November in Frankfurt (FFM). The Call +for Papers has been issued, so if you have an interesting talk, the +organizers would love to hear about it! You can expect a gathering of PHP +experts and core developers.

    + + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_media.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_media.html new file mode 100755 index 00000000..f3e59776 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_media.html @@ -0,0 +1,150 @@ + + + + + + + + + +

    css @media media types

    +

    +Depending on dompdf_config.inc.php setting DOMPDF_DEFAULT_MEDIA_TYPE here the +background color appeares different: +

    +
      +
    • print: light gray
    • +
    • screen: light blue
    • +
    • projection: light yellow
    • +
    + +

    css @import media types

    +

    +Depending on dompdf_config.inc.php setting DOMPDF_DEFAULT_MEDIA_TYPE here the +background color appeares different: +

    +
      +
    • print: light gray
    • +
    • screen or projection: light blue
    • +
    • all: this line yellow
    • +
    + +

    yellow by import css from subfolder

    + +

    yellow by import css from absolute local folder. +Note: Only works if www\test\images/importabs.css was copied to /absimagetest/importabs.css +

    + + +

    css link media types

    + +
      +
    • print: light gray
    • +
    • screen or projection: light blue
    • + +
    + + +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    +

    x

    + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_multiple_class.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_multiple_class.html new file mode 100755 index 00000000..c4f68d5d --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_multiple_class.html @@ -0,0 +1,18 @@ + + + + + + +

    class="a"

    +

    class="b"

    +

    class="c"

    +

    class="a b"

    +

    class="a b c"

    + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_nth_child.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_nth_child.html new file mode 100755 index 00000000..d47ed2af --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_nth_child.html @@ -0,0 +1,121 @@ + + + + +CSS Selector :nth-child + + + + + + + +

    nth-child(1)

    +
    +

    1

    +

    2

    +

    3

    +

    4

    +

    5

    +
    + +

    nth-child(3)

    +
    +

    1

    +

    2

    +

    3

    +

    4

    +

    5

    +
    + +

    nth-child(odd)

    +
    +

    1

    +

    2

    +

    3

    +

    4

    +

    5

    +
    + +

    nth-child(even)

    +
    +

    1

    +

    2

    +

    3

    +

    4

    +

    5

    +
    + +

    nth-child(n)

    +
    +

    1

    +

    2

    +

    3

    +

    4

    +

    5

    +
    + +

    nth-child(3n)

    +
    +

    1

    +

    2

    +

    3

    +

    4

    +

    5

    +
    + +

    nth-child(n+2)

    +
    +

    1

    +

    2

    +

    3

    +

    4

    +

    5

    +
    + +

    nth-child(2n+1)

    +
    +

    1

    +

    2

    +

    3

    +

    4

    +

    5

    +
    + +

    nth-child(3n-2)

    +
    +

    1

    +

    2

    +

    3

    +

    4

    +

    5

    +
    + + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_opacity.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_opacity.html new file mode 100755 index 00000000..c7672bdf --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_opacity.html @@ -0,0 +1,107 @@ + + + + + + + +

    Nested block elements

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

    Inline elements

    + + + ab + cb + ef + gh + ij + kl + mn + op + qr + st + + +
    + + + ab + cb + ef + gh + ij + kl + mn + op + qr + st + + +
    0.1
    +
    0.2
    +
    0.3
    +
    0.4
    +
    0.5
    +
    0.6
    +
    0.7
    +
    0.8
    +
    0.9
    +
    1.0
    + +
    1.0 opacity
    +
    No opacity
    + +
    +
    +
    +
    +
    +
    +
    + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_outline.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_outline.html new file mode 100755 index 00000000..00ce313e --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_outline.html @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + +
    The dotted gray line is the border box
    dotteddashedsoliddouble
    grooveridgeinsetoutset
    + +

    partial attributes merged

    + +
    outline:thin solid red;
    +
    outline:red thin solid;
    +
    { outline:thin solid; }{outline:blue; } (merged, reset all - color has no effect)
    +
    { outline:thin solid; }{outline-color:green; } (merged, overwrite only color)
    +
    { outline:thin solid; }{outline:blue; } (merged, reset all - color has no effect)
    +
    { outline:thin solid; }{outline-color:green; } (merged, overwrite only color)
    +
    { outline:thin blue solid; }{outline-color:green; } (merged, overwrite only color)
    +
    { outline:thin blue solid; }{outline-style:dashed; } (merged, overwrite only style)
    +
    { outline:thin blue solid; }{outline-width:thick; } (merged, overwrite only width)
    +
    { outline:thin blue solid; }{outline-width:medium; } (merged, overwrite only width)
    +
    { outline:thin blue solid; }{outline-width:3pt; } (merged, overwrite only width)
    + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_overflow_hidden.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_overflow_hidden.html new file mode 100755 index 00000000..a2bd2915 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_overflow_hidden.html @@ -0,0 +1,38 @@ + + + + + + + +

    overflow: hidden

    +
    + + Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed non risus. + Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. +
    + +

    overflow: visible

    +
    + + Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed non risus. + Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. +
    + + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_position_absolute.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_position_absolute.html new file mode 100755 index 00000000..ebfc7ea3 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_position_absolute.html @@ -0,0 +1,60 @@ + + + + + +Printed document + + + + + + + + +
    + top/left +
    +
    + top/right +
    +
    + top/left/right +
    + +
    + top/left/right/bottom +
    + +
    + bottom/right +
    +
    + bottom/left +
    +
    + bottom/left/right +
    + + + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_position_all.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_position_all.html new file mode 100755 index 00000000..4214a628 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_position_all.html @@ -0,0 +1,379 @@ + + + + + +Printed document + + + + + + + +

    Examples from
    http://www.barelyfitz.com/screencast/html-training/css/positioning/

    + +position: static +
    +

    div-before

    + +
    +
    +

    div-1

    + +
    +

    div-1a

    +

    Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer pretium dui sit amet felis. Integer sit amet diam. Phasellus ultrices viverra velit.

    +
    + +
    +

    div-1b

    +

    Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer pretium dui sit amet felis. Integer sit amet diam. Phasellus ultrices viverra velit. Nam mattis, arcu ut bibendum commodo, magna nisi tincidunt tortor, quis accumsan augue ipsum id lorem.

    +
    + +

    div-1c

    +
    +
    + +

    div-after

    +
    + +position: relative +
    +

    div-before

    + +
    +
    +

    div-1

    + +
    +

    div-1a

    +

    Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer pretium dui sit amet felis. Integer sit amet diam. Phasellus ultrices viverra velit.

    +
    + +
    +

    div-1b

    +

    Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer pretium dui sit amet felis. Integer sit amet diam. Phasellus ultrices viverra velit. Nam mattis, arcu ut bibendum commodo, magna nisi tincidunt tortor, quis accumsan augue ipsum id lorem.

    +
    + +

    div-1c

    +
    +
    + +

    div-after

    +
    + +position: absolute +
    +

    div-before

    + +
    +
    +

    div-1

    + +
    +

    div-1a

    +

    Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer pretium dui sit amet felis. Integer sit amet diam. Phasellus ultrices viverra velit.

    +
    + +
    +

    div-1b

    +

    Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer pretium dui sit amet felis. Integer sit amet diam. Phasellus ultrices viverra velit. Nam mattis, arcu ut bibendum commodo, magna nisi tincidunt tortor, quis accumsan augue ipsum id lorem.

    +
    + +

    div-1c

    +
    +
    + +

    div-after

    +
    + +position: relative + position: absolute +
    +

    div-before

    + +
    +
    +

    div-1

    + +
    +

    div-1a

    +

    Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer pretium dui sit amet felis. Integer sit amet diam. Phasellus ultrices viverra velit.

    +
    + +
    +

    div-1b

    +

    Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer pretium dui sit amet felis. Integer sit amet diam. Phasellus ultrices viverra velit. Nam mattis, arcu ut bibendum commodo, magna nisi tincidunt tortor, quis accumsan augue ipsum id lorem.

    +
    + +

    div-1c

    +
    +
    + +

    div-after

    +
    + +two column absolute +
    +

    div-before

    + +
    +
    +

    div-1

    + +
    +

    div-1a

    +

    Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer pretium dui sit amet felis. Integer sit amet diam. Phasellus ultrices viverra velit.

    +
    + +
    +

    div-1b

    +

    Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer pretium dui sit amet felis. Integer sit amet diam. Phasellus ultrices viverra velit. Nam mattis, arcu ut bibendum commodo, magna nisi tincidunt tortor, quis accumsan augue ipsum id lorem.

    +
    + +

    div-1c

    +
    +
    + +

    div-after

    +
    + +two column absolute height +
    +

    div-before

    + +
    +
    +

    div-1

    + +
    +

    div-1a

    +

    Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer pretium dui sit amet felis. Integer sit amet diam. Phasellus ultrices viverra velit.

    +
    + +
    +

    div-1b

    +

    Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer pretium dui sit amet felis. Integer sit amet diam. Phasellus ultrices viverra velit. Nam mattis, arcu ut bibendum commodo, magna nisi tincidunt tortor, quis accumsan augue ipsum id lorem.

    +
    + +

    div-1c

    +
    +
    + +

    div-after

    +
    + +float +
    +

    div-before

    + +
    +
    +

    div-1

    + +
    +

    div-1a

    +

    Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer pretium dui sit amet felis. Integer sit amet diam. Phasellus ultrices viverra velit.

    +
    + +
    +

    div-1b

    +

    Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer pretium dui sit amet felis. Integer sit amet diam. Phasellus ultrices viverra velit. Nam mattis, arcu ut bibendum commodo, magna nisi tincidunt tortor, quis accumsan augue ipsum id lorem.

    +
    + +

    div-1c

    +
    +
    + +

    div-after

    +
    + +float columns +
    +

    div-before

    + +
    +
    +

    div-1

    + +
    +

    div-1a

    +

    Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer pretium dui sit amet felis. Integer sit amet diam. Phasellus ultrices viverra velit.

    +
    + +
    +

    div-1b

    +

    Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer pretium dui sit amet felis. Integer sit amet diam. Phasellus ultrices viverra velit. Nam mattis, arcu ut bibendum commodo, magna nisi tincidunt tortor, quis accumsan augue ipsum id lorem.

    +
    + +

    div-1c

    +
    +
    + +

    div-after

    +
    + +float columns with clear +
    +

    div-before

    + +
    +
    +

    div-1

    + +
    +

    div-1a

    +

    Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer pretium dui sit amet felis. Integer sit amet diam. Phasellus ultrices viverra velit.

    +
    + +
    +

    div-1b

    +

    Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer pretium dui sit amet felis. Integer sit amet diam. Phasellus ultrices viverra velit. Nam mattis, arcu ut bibendum commodo, magna nisi tincidunt tortor, quis accumsan augue ipsum id lorem.

    +
    + +

    div-1c

    +
    +
    + +

    div-after

    +
    + + + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_position_fixed.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_position_fixed.html new file mode 100755 index 00000000..e5d1a3cd --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_position_fixed.html @@ -0,0 +1,215 @@ + + + + + +Printed document + + + + + + +
    +
    + Header line 1
    + Header line 2
    + Header line 3
    + Header line 4
    +
    +
    + + + +
    +
    + +
    +
    + +

    Section 1

    + +

    Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed non +risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, +ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula +massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci +nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit +amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat +in, pretium a, enim. Pellentesque congue. Ut in risus volutpat libero +pharetra tempor. Cras vestibulum bibendum augue. Praesent egestas leo +in pede. Praesent blandit odio eu enim. Pellentesque sed dui ut augue +blandit sodales. Vestibulum ante ipsum primis in faucibus orci luctus +et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed +pede pellentesque fermentum. Maecenas adipiscing ante non diam sodales +hendrerit.

    + +
    + +

    Section 2

    + +

    Ut velit mauris, egestas sed, gravida nec, ornare ut, mi. Aenean ut +orci vel massa suscipit pulvinar. Nulla sollicitudin. Fusce varius, +ligula non tempus aliquam, nunc turpis ullamcorper nibh, in tempus +sapien eros vitae ligula. Pellentesque rhoncus nunc et augue. Integer +id felis. Curabitur aliquet pellentesque diam. Integer quis metus vitae +elit lobortis egestas. Lorem ipsum dolor sit amet, consectetuer +adipiscing elit. Morbi vel erat non mauris convallis vehicula. Nulla et +sapien. Integer tortor tellus, aliquam faucibus, convallis id, congue +eu, quam. Mauris ullamcorper felis vitae erat. Proin feugiat, augue non +elementum posuere, metus purus iaculis lectus, et tristique ligula +justo vitae magna.

    + +
    + +

    Section 3

    + +

    Aliquam convallis sollicitudin purus. Praesent aliquam, enim at +fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu +lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod +libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean +suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla +tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, +felis magna fermentum augue, et ultricies lacus lorem varius purus. +Curabitur eu amet.

    + +

    Aliquam convallis sollicitudin purus. Praesent aliquam, enim at +fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu +lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod +libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean +suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla +tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, +felis magna fermentum augue, et ultricies lacus lorem varius purus. +Curabitur eu amet.

    + +

    Aliquam convallis sollicitudin purus. Praesent aliquam, enim at +fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu +lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod +libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean +suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla +tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, +felis magna fermentum augue, et ultricies lacus lorem varius purus. +Curabitur eu amet.

    + +

    Aliquam convallis sollicitudin purus. Praesent aliquam, enim at +fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu +lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod +libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean +suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla +tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, +felis magna fermentum augue, et ultricies lacus lorem varius purus. +Curabitur eu amet.

    + +

    Aliquam convallis sollicitudin purus. Praesent aliquam, enim at +fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu +lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod +libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean +suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla +tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, +felis magna fermentum augue, et ultricies lacus lorem varius purus. +Curabitur eu amet.

    + +

    Aliquam convallis sollicitudin purus. Praesent aliquam, enim at +fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu +lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod +libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean +suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla +tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, +felis magna fermentum augue, et ultricies lacus lorem varius purus. +Curabitur eu amet.

    + +

    Aliquam convallis sollicitudin purus. Praesent aliquam, enim at +fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu +lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod +libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean +suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla +tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, +felis magna fermentum augue, et ultricies lacus lorem varius purus. +Curabitur eu amet.

    + +

    Aliquam convallis sollicitudin purus. Praesent aliquam, enim at +fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu +lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod +libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean +suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla +tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, +felis magna fermentum augue, et ultricies lacus lorem varius purus. +Curabitur eu amet.

    + +

    Aliquam convallis sollicitudin purus. Praesent aliquam, enim at +fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu +lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod +libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean +suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla +tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, +felis magna fermentum augue, et ultricies lacus lorem varius purus. +Curabitur eu amet.

    + +

    Aliquam convallis sollicitudin purus. Praesent aliquam, enim at +fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu +lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod +libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean +suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla +tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, +felis magna fermentum augue, et ultricies lacus lorem varius purus. +Curabitur eu amet.

    + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_selectors.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_selectors.html new file mode 100755 index 00000000..bc7c3831 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_selectors.html @@ -0,0 +1,53 @@ + + + + + + + +a[target=equal_1] +a[target='equal_2'] +a[target="equal_3"] + +a[href$=ends_1] +a[href$='ends_2'] +a[href$="ends_3"] + +

    +a[href*=contains_1] +a[href*='contains_2'] +a[href*="contains_3"] +

    + +a[href^=starts_1] +a[href^='starts_2'] +a[href^="starts_3"] + + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_table_height.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_table_height.html new file mode 100755 index 00000000..ec638b0a --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_table_height.html @@ -0,0 +1,15 @@ + + + + + + + + + + + +
    Some text
    + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_text_align.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_text_align.html new file mode 100755 index 00000000..c795af25 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_text_align.html @@ -0,0 +1,61 @@ + + + + + + + +

    text-align: left

    +
    +Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec at odio vitae libero tempus +convallis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus +mus. Vestibulum purus mauris, dapibus eu, sagittis quis, sagittis quis, mi. Morbi fringilla +massa quis velit. Curabitur metus massa, semper mollis, molestie vel, adipiscing nec, massa. +
    +Phasellus vitae felis sed lectus dapibus facilisis. In ultrices sagittis ipsum. In at est. Integer +iaculis turpis vel magna. Cras eu est. Integer porttitor ligula a tellus. Curabitur accumsan ipsum +a velit. Sed laoreet lectus quis leo. Nulla pellentesque molestie ante. Quisque vestibulum est id +justo. Ut pellentesque ante in neque. +
    + +

    text-align: center

    +
    +Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec at odio vitae libero tempus +convallis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus +mus. Vestibulum purus mauris, dapibus eu, sagittis quis, sagittis quis, mi. Morbi fringilla +massa quis velit. Curabitur metus massa, semper mollis, molestie vel, adipiscing nec, massa. +
    +Phasellus vitae felis sed lectus dapibus facilisis. In ultrices sagittis ipsum. In at est. Integer +iaculis turpis vel magna. Cras eu est. Integer porttitor ligula a tellus. Curabitur accumsan ipsum +a velit. Sed laoreet lectus quis leo. Nulla pellentesque molestie ante. Quisque vestibulum est id +justo. Ut pellentesque ante in neque. +
    + +

    text-align: right

    +
    +Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec at odio vitae libero tempus +convallis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus +mus. Vestibulum purus mauris, dapibus eu, sagittis quis, sagittis quis, mi. Morbi fringilla +massa quis velit. Curabitur metus massa, semper mollis, molestie vel, adipiscing nec, massa. +
    +Phasellus vitae felis sed lectus dapibus facilisis. In ultrices sagittis ipsum. In at est. Integer +iaculis turpis vel magna. Cras eu est. Integer porttitor ligula a tellus. Curabitur accumsan ipsum +a velit. Sed laoreet lectus quis leo. Nulla pellentesque molestie ante. Quisque vestibulum est id +justo. Ut pellentesque ante in neque. +
    + +

    text-align: justify

    +
    +Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec at odio vitae libero tempus +convallis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus +mus. Vestibulum purus mauris, dapibus eu, sagittis quis, sagittis quis, mi. Morbi fringilla +massa quis velit. Curabitur metus massa, semper mollis, molestie vel, adipiscing nec, massa. +
    +Phasellus vitae felis sed lectus dapibus facilisis. In ultrices sagittis ipsum. In at est. Integer +iaculis turpis vel magna. Cras eu est. Integer porttitor ligula a tellus. Curabitur accumsan ipsum +a velit. Sed laoreet lectus quis leo. Nulla pellentesque molestie ante. Quisque vestibulum est id +justo. Ut pellentesque ante in neque. +
    + + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_vertical_align.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_vertical_align.html new file mode 100755 index 00000000..ac447a68 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_vertical_align.html @@ -0,0 +1,34 @@ + + + + + + + + +

    [Image]test

    +

    [Image]test

    +

    [Image]test

    +

    [Image]test

    +

    [Image]test

    +

    [Image]test

    +

    [Image]test

    +

    [Image]test

    + + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_vertical_align_w3.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_vertical_align_w3.html new file mode 100755 index 00000000..61fae557 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_vertical_align_w3.html @@ -0,0 +1,286 @@ + + + +CSS1 Test Suite: 5.4.4 vertical-align + + + + + + + +

    The style declarations which apply to the text below are:

    +
    P {font-size: 12pt;}
    +.one {vertical-align: sub;}
    +.two {vertical-align: super;}
    +.three {vertical-align: top; font-size: 12pt;}
    +.four {vertical-align: text-top; font-size: 12pt;}
    +.five {vertical-align: middle; font-size: 12pt;}
    +.six {vertical-align: bottom; font-size: 12pt;}
    +.seven {vertical-align: text-bottom; font-size: 12pt;}
    +.eight {vertical-align: baseline; font-size: 12pt;}
    +.nine {vertical-align: 50%; font-size: 12px; line-height: 16px;}
    +
    +P.example {font-size: 14pt;}
    +BIG {font-size: 16pt;}
    +SMALL {font-size: 12pt;}
    +.ttopalign {vertical-align: text-top;}
    +.topalign {vertical-align: top;}
    +.midalign {vertical-align: middle;}
    +
    +
    +
    +

    +[Image]The first four words in this sentence should be subscript-aligned. The font size of the superscripted text should not be different from that of the parent element. +

    +

    +[Image]The first four words in this sentence should be superscript-aligned. The font size of the subscripted text should not be different from that of the parent element. +

    +

    +[Image]The first four words in this sentence should be top-aligned, which will align their tops with the top of the tallest element in the line (probably the orange rectangle). +

    +

    +[Image] + +The first four words in this sentence should be text-top-aligned, which should align their tops with the top of the tallest text in the line. + +

    +

    +[Image] +The image at the beginning of this sentence should be middle-aligned, which should align its middle with the point defined as the text baseline plus half the x-height. +

    +

    +[Image] + +The first four words in this sentence should be 12pt in size and bottom-aligned, which should align their bottom with the bottom of the lowest element in the line. + +

    +

    +[Image] + +The first eight words ("eight" has a descender) in this sentence should be 12pt in size and text-bottom-aligned, which should align their bottom with the bottom of the lowest text (including descenders) in the line. + +

    +

    +[Image] + +The first four words in this sentence should be 12pt in size and baseline-aligned, which should align their baseline with the baseline of the rest of the text in the line. + +

    +

    +[Image]The first four words in this sentence should have a font-size of 12px and a line-height of 16px; they are also 50%-aligned, which should raise them 8px relative to the natural baseline. +

    +

    +In the following paragraph, all images should be aligned with the top of the 14-point text, which is identical to the first section of text, whereas any size text should be aligned with the text baseline (which is the default value). +

    +

    +This paragraph +[Image] +contains many images +[Image] +of varying heights +[Image] +and widths +[Image] +all of which +[Image] +should be aligned +[Image] +with the top of +[Image] +a 14-point text element +[Image] +regardless of the line in which +[Image] +the images appear. +[Image] +

    +

    +In the following paragraph, all images should be aligned with the middle of the default text, whereas any text should be aligned with the text baseline (which is the default value). +

    +

    +This paragraph +[Image] +contains many images +[Image] +of varying heights +[Image] +and widths +[Image] +all of which +[Image] +should be aligned +[Image] +with the middle of +[Image] +a 14-point text element +[Image] +regardless of the line in which +[Image] +the images appear. +[Image] +

    +

    +In the following paragraph, all elements should be aligned with the top of the tallest element on the line, whether that element is an image or not. Each fragment of text has been SPANned appropriately in order to cause this to happen. +

    +

    +This paragraph +[Image] +contains many images +[Image] +and some text +[Image] +of varying heights +[Image] +and widths +[Image] +all of which +[Image] +should be aligned +[Image] +with the top of +[Image] +the tallest element in +[Image] +whichever line the elements appear. +[Image] +

    + + +TABLE Testing Section + +

    +[Image]The first four words in this sentence should be subscript-aligned. The font size of the superscripted text should not be different from that of the parent element. +

    +

    +[Image]The first four words in this sentence should be superscript-aligned. The font size of the subscripted text should not be different from that of the parent element. +

    +

    +[Image]The first four words in this sentence should be top-aligned, which will align their tops with the top of the tallest element in the line (probably the orange rectangle). +

    +

    +[Image] + +The first four words in this sentence should be text-top-aligned, which should align their tops with the top of the tallest text in the line. + +

    +

    +[Image] +The image at the beginning of this sentence should be middle-aligned, which should align its middle with the point defined as the text baseline plus half the x-height. +

    +

    +[Image] + +The first four words in this sentence should be 12pt in size and bottom-aligned, which should align their bottom with the bottom of the lowest element in the line. + +

    +

    +[Image] + +The first eight words ("eight" has a descender) in this sentence should be 12pt in size and text-bottom-aligned, which should align their bottom with the bottom of the lowest text (including descenders) in the line. + +

    +

    +[Image] + +The first four words in this sentence should be 12pt in size and baseline-aligned, which should align their baseline with the baseline of the rest of the text in the line. + +

    +

    +[Image]The first four words in this sentence should have a font-size of 12px and a line-height of 16px; they are also 50%-aligned, which should raise them 8px relative to the natural baseline. +

    +

    +In the following paragraph, all images should be aligned with the top of the 14-point text, which is identical to the first section of text, whereas any size text should be aligned with the text baseline (which is the default value). +

    +

    +This paragraph +[Image] +contains many images +[Image] +of varying heights +[Image] +and widths +[Image] +all of which +[Image] +should be aligned +[Image] +with the top of +[Image] +a 14-point text element +[Image] +regardless of the line in which +[Image] +the images appear. +[Image] +

    +

    +In the following paragraph, all images should be aligned with the middle of the default text, whereas any text should be aligned with the text baseline (which is the default value). +

    +

    +This paragraph +[Image] +contains many images +[Image] +of varying heights +[Image] +and widths +[Image] +all of which +[Image] +should be aligned +[Image] +with the middle of +[Image] +a 14-point text element +[Image] +regardless of the line in which +[Image] +the images appear. +[Image] +

    +

    +In the following paragraph, all elements should be aligned with the top of the tallest element on the line, whether that element is an image or not. Each fragment of text has been SPANned appropriately in order to cause this to happen. +

    +

    +This paragraph +[Image] +contains many images +[Image] +and some text +[Image] +of varying heights +[Image] +and widths +[Image] +all of which +[Image] +should be aligned +[Image] +with the top of +[Image] +the tallest element in +[Image] +whichever line the elements appear. +[Image] +

    + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_whitespace.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_whitespace.html new file mode 100755 index 00000000..a8d22d42 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_whitespace.html @@ -0,0 +1,113 @@ + + + + + + CSS white-space property + + + + + + +
    +

    CSS white-space property

    +

    Given this CSS code:

    +
    +p {
    +  width:100px;
    +  background-color:orange;
    +  margin:10px 0;
    +  font-family:monospace;
    +}
    +
    +

    and this HTML code:

    +
    +<p>
    +P
    +  A
    +    R
    +      A
    +        G
    +          R
    +            A
    +              P
    +                H
    +</p>
    +
    +

    Depending on the white-space property, the resulting presentation will be:

    +
    +

    normal

    +

    +P + A + R + A + G + R + A + P + H +

    +
    +

    nowrap

    +

    +P + A + R + A + G + R + A + P + H +

    +
    +

    pre

    +

    +P + A + R + A + G + R + A + P + H +

    +
    +

    pre-wrap

    +

    +P + A + R + A + G + R + A + P + H +

    +
    +

    pre-line

    +

    +P + A + R + A + G + R + A + P + H +

    + +
    + + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_word_wrap.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_word_wrap.html new file mode 100755 index 00000000..8967b7ca --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_word_wrap.html @@ -0,0 +1,36 @@ + + + + + + + + +

    break-word

    +
    +

    I'm a veeeeeeeerryyyyyy loooooooonggggggg teeeeexxxtttt

    +

    http://www.w3.org/TR/2011/WD-css3-text-20110412/

    +
    + +

    normal

    +
    +

    I'm a veeeeeeeerryyyyyy loooooooonggggggg teeeeexxxtttt

    +

    http://www.w3.org/TR/2011/WD-css3-text-20110412/

    +
    + + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_z_index.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_z_index.html new file mode 100755 index 00000000..50f983cf --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/css_z_index.html @@ -0,0 +1,40 @@ + + + + + z-index + + + + +
    + z-index: 3, order: 1 +
    + +
    + z-index: 2, order: 2 +
    + +
    + z-index: 1, order: 3 +
    + +
    + z-index: auto, order: 1 +
    + +
    + z-index: auto, order: 2 +
    + +
    + z-index: auto, order: 3 +
    + + + \ No newline at end of file diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/demo_01.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/demo_01.html new file mode 100755 index 00000000..13175d9b --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/demo_01.html @@ -0,0 +1,214 @@ + + + + + + + + +
    + +
    +
    + +
    + +
    + + + + + +

    SCHEDULE A

    Job: 132-003

    + + + + + + + + + + + + + + + + +
    Job: 132-003Purchasers(s): Palmer
    Created: 2004-08-13Last Change: 2004-08-16 9:28 AM
    Address: 667 Pine Lodge Dr.Legal: N/A
    + + + + + + + + + + +
    Model: FranklinElevation: BSize: 1160 Cu. Ft.Style: Reciprocating
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Standard Items:

    ItemDescriptionQuantityUnit CostTotal
    1Sprockets (13 tooth)50$10.00Ea.$5,000.00
    2Cogs (Cylindrical)45$25.00Ea.$1125.00
    3Gears (15 tooth)32$19.00Ea.$608.00
    4Leaf springs (13 N/m)6$125.00Ea.$750.00
    5Coil springs (6 N/deg)7$11.00Ea.$77.00
    (Tax is not included; it will be collected on closing.)GRAND TOTAL:$7560.00
    + + + + + + + + + + + + + + + + + + + + +
    WITNESS: PURCHASER:X
     Mr. Leland Palmer
    +This change order shall have no force or effect until approved and signed +by an authorizing signing officer of the supplier. Any change or special +request not noted on this document is not contractual. +
    ACCEPTED THIS +  +DAY OF  , +20 . +TWIN PEAKS SUPPLY LTD.

    +PER: +  +
    + +
    + +
    +
    + + + + + \ No newline at end of file diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/dom_anchor_link.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/dom_anchor_link.html new file mode 100755 index 00000000..851f2323 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/dom_anchor_link.html @@ -0,0 +1,210 @@ + + + + + + + + + +

    Lorem ipsum dolor sit amet

    +

    Anchor 1

    + +

    link to anchor3

    +

    www.dompdf.com

    +

    Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec at +odio vitae libero tempus convallis. Cum sociis natoque penatibus et +magnis dis parturient montes, nascetur ridiculus mus. Vestibulum purus +mauris, dapibus eu, sagittis quis, sagittis quis, mi. Morbi fringilla +massa quis velit. Curabitur metus massa, semper mollis, molestie vel, +adipiscing nec, massa. Phasellus vitae felis sed lectus dapibus +facilisis. In ultrices sagittis ipsum. In at est. Integer iaculis +turpis vel magna. Cras eu est. Integer porttitor ligula a +tellus. Curabitur accumsan ipsum a velit. Sed laoreet lectus quis +leo. Nulla pellentesque molestie ante. Quisque vestibulum est id +justo. Ut pellentesque ante in neque.

    + +

    Curabitur ut diam eu dui vestibulum pharetra. Nam pellentesque, justo +non hendrerit venenatis, mi orci pretium mi, et vehicula leo arcu quis +diam. Nullam mattis laoreet quam. Morbi mollis sem ut tellus. Nam mi +massa, lobortis eu, sollicitudin et, iaculis et, massa. Maecenas purus +mauris, luctus sit amet, pharetra in, facilisis sit amet, elit. Nullam +vel erat tempus purus molestie suscipit. Vestibulum odio lorem, +sollicitudin non, volutpat sit amet, tincidunt vel, nunc. Nulla quis +ante vestibulum odio feugiat facilisis. Proin lorem nisl, viverra at, +rhoncus quis, semper nec, mi. Donec euismod enim vitae velit. Nulla +sed lectus. Vivamus placerat, lacus sed vehicula sagittis, arcu massa +adipiscing lorem, bibendum luctus nisl tortor vitae leo.

    + +

    Etiam a mauris. Proin justo elit, accumsan sit amet, tempus et, +blandit id, tellus. Morbi varius, nisi id iaculis aliquam, lacus +ligula facilisis velit, ac pharetra ipsum augue a massa. Etiam rhoncus +commodo orci. Mauris ullamcorper sagittis turpis. Nullam magna libero, +sagittis sed, auctor faucibus, accumsan vitae, urna. Pellentesque +volutpat. Aliquam sapien ipsum, eleifend nec, imperdiet vitae, +consectetuer id, quam. Donec a urna. Suspendisse sit amet +velit. Curabitur quis nisi id dui viverra ornare. Sed condimentum enim +quis tortor. Ut condimentum, magna non tempus tincidunt, leo nibh +molestie tellus, vitae convallis dolor ante sed ante. Nunc et +metus. Phasellus ultricies. Fusce faucibus tortor sit amet mauris.

    + +

    Aliquam enim. Duis et diam. Praesent porta, mauris quis pellentesque +volutpat, erat elit vulputate eros, vitae pulvinar augue velit sit +amet sem. Fusce eu urna eu nisi condimentum posuere. Vivamus sed +felis. Duis eget urna vitae eros interdum dignissim. Proin justo eros, +eleifend in, porttitor in, malesuada non, neque. Etiam sed +augue. Nulla sit amet magna. Lorem ipsum dolor sit amet, consectetuer +adipiscing elit. Mauris facilisis. Curabitur massa magna, pulvinar a, +nonummy eget, egestas vitae, mauris. Quisque vel elit sit amet lorem +malesuada facilisis. Vestibulum porta, metus sit amet egestas +interdum, urna justo euismod erat, id tristique urna leo quis +nibh. Morbi non erat.

    + +

    Cras fringilla, nulla id egestas elementum, augue nunc iaculis nibh, +ac adipiscing nibh justo id tortor. Donec vel orci a nisi ultricies +aliquet. Nunc urna quam, adipiscing molestie, vehicula non, +condimentum non, magna. Integer magna. Donec quam metus, pulvinar id, +suscipit eget, euismod ac, orci. Nulla facilisi. Nullam nec +mauris. Morbi in mi. Etiam urna lectus, pulvinar ac, sollicitudin eu, +euismod ac, lectus. Fusce elit. Sed ultricies odio ac felis.

    + +

    Cras iaculis. Nulla facilisi.

    +

    Anchor 2

    +

    link to anchor1

    +

    Cras iaculis. Nulla facilisi. Fusce vitae arcu. Integer lectus mauris, +ornare vel, accumsan eget, scelerisque vel, nunc. Maecenas justo urna, +volutpat vel, vehicula vel, ullamcorper nec, odio. Suspendisse laoreet +nisi sed erat. Cras convallis sollicitudin sapien. Phasellus ac erat +eu mi rutrum rhoncus. Morbi et velit. Morbi odio nisi, pharetra eget, +sollicitudin sed, aliquam at, nisl. Quisque euismod diam in +sapien. Integer accumsan urna in risus.

    + +

    Proin sit amet nisl. Phasellus dui ipsum, laoreet a, pulvinar id, +fringilla ut, libero. In hac habitasse platea dictumst. Maecenas mi +magna, cursus sed, rutrum eget, molestie nec, dui. Suspendisse +lacus. Vivamus nibh urna, accumsan sit amet, gravida sed, convallis a, +leo. Cras sollicitudin orci sit amet eros. Pellentesque eu odio et +velit tempor dignissim. Morbi vehicula malesuada enim. Pellentesque +tincidunt, tellus ac fringilla tempor, justo libero interdum nunc, eu +sollicitudin tortor augue nec tellus. Nullam eget leo quis tellus +gravida faucibus. Nam gravida. Curabitur rhoncus egestas +nunc. Curabitur mollis, nisi sed suscipit gravida, enim felis interdum +justo, vel accumsan magna nunc ut libero. Ut fermentum. Fusce luctus, +est sit amet feugiat lobortis, nisl eros bibendum libero, ut suscipit +felis ligula in massa. Proin congue elit et nisi. Cras ac nisl. Nunc +ullamcorper neque vel diam.

    + +

    Ut pellentesque arcu ac lectus.

    +

    Sed ac lorem. Ut pellentesque arcu ac lectus. Cum sociis natoque +penatibus et magnis dis parturient montes, nascetur ridiculus +mus. Pellentesque ultrices metus sollicitudin pede. Donec fermentum +est a velit fringilla mollis. Duis ligula. Fusce viverra laoreet +odio. Suspendisse sit amet ligula. Maecenas nunc velit, sagittis eu, +bibendum eu, placerat at, nibh. Praesent ut erat eget nisi gravida +imperdiet. Quisque vitae sapien. Ut eros.

    + +

    Donec eros ligula, dignissim vel, ultricies id, mattis in, massa. Duis +lobortis dui nec orci. Sed ullamcorper metus non massa. Aliquam eget +mauris ac nulla elementum posuere. Sed porta, augue vitae rhoncus +aliquet, felis quam eleifend est, vitae rutrum metus arcu vel +lorem. Proin laoreet, mauris sit amet aliquet eleifend, nisl sem +molestie nisi, eu varius eros ligula non erat. Integer ac +sem. Suspendisse lectus. Aliquam erat volutpat. Fusce sit amet leo +faucibus erat molestie ultrices. Maecenas lacinia lectus eget +dui. Etiam porta porttitor ante. Phasellus sit amet lacus adipiscing +enim mollis iaculis. Fusce congue, nulla a commodo aliquam, erat dui +fermentum dui, pellentesque faucibus orci enim at mauris. Pellentesque +a diam porta magna tempor posuere. Donec lorem.

    + +

    Sed viverra aliquam turpis. Aliquam lacus. Duis id massa. Nullam +ante. Suspendisse condimentum. Donec adipiscing, felis vel semper +sollicitudin, lacus justo pretium est, sed blandit pede risus eu +ante. Praesent ante nulla, fringilla id, ultrices et, feugiat a, +metus. Proin ac velit a metus suscipit fermentum. Integer aliquet. Sed +sapien nulla, placerat at, rutrum at, condimentum quis, libero. In +accumsan, tellus nec tincidunt malesuada, pede arcu commodo ipsum, ac +mattis tortor urna vitae enim. Aenean nonummy, mauris eget commodo +bibendum, augue sem ultrices nunc, eget rhoncus metus erat placerat +lectus. Aliquam mollis lectus in justo. Vivamus iaculis lacus sit amet +ligula. Etiam consectetuer convallis diam. Curabitur sollicitudin, +felis eu vehicula scelerisque, nisl urna aliquam orci, sit amet +laoreet mi turpis id ligula. Donec at enim non nulla adipiscing +dapibus. Aenean nisl.

    + +

    Ut in lacus nec enim volutpat pellentesque. Integer euismod. In odio +eros, malesuada in, mattis vel, tempor nec, sem. In libero tellus, +varius vitae, bibendum in, elementum quis, nisl. Duis tortor. Etiam at +justo. Pellentesque facilisis mauris non nunc. Praesent eros mi, +dapibus eget, placerat ac, lobortis quis, sem. Nulla rhoncus +turpis. Nulla vitae mi. Proin id massa. Nunc eros.

    + +

    Aliquam molestie pulvinar ligula.

    +

    Anchor 3

    +

    link to anchor2

    +

    Vestibulum dui risus, varius ut, semper et, consequat ultrices, +felis. Pellentesque iaculis urna in velit. Ut pharetra. Nunc +fringilla, nisi vitae fringilla placerat, enim justo semper erat, +mollis feugiat leo neque eu sem. Vestibulum orci urna, suscipit a, +accumsan nec, fringilla in, risus. Nullam ante. Nullam nec +eros. Nullam varius. Nulla facilisi. In auctor libero in +metus. Aliquam porttitor congue eros. Nulla facilisi. Mauris euismod +turpis ut felis. Ut nunc nisl, cursus quis, eleifend at, viverra +bibendum, lacus. Donec consequat lacus eu sapien. Fusce pulvinar +lectus quis nunc. In hac habitasse platea dictumst.

    + +

    Aliquam molestie pulvinar ligula. Maecenas imperdiet, urna eget +ultrices adipiscing, nibh ante elementum neque, id molestie massa quam +ut nunc. Nullam porta. Phasellus a magna in sem volutpat +viverra. Quisque aliquet nunc ac turpis. Mauris dolor enim, viverra +rutrum, placerat et, laoreet et, justo. In id nulla. Donec +erat. Phasellus nec mi sed velit mollis cursus. Vestibulum +tincidunt. Praesent dui libero, facilisis eu, vulputate eget, aliquet +nec, ipsum. Pellentesque in nisl in mauris pretium euismod.

    + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/dom_br.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/dom_br.html new file mode 100755 index 00000000..f497606b --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/dom_br.html @@ -0,0 +1,46 @@ + + + + + +

    Line break test

    +

    Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec at +odio vitae libero tempus convallis. Cum sociis natoque penatibus et +magnis dis parturient montes, nascetur ridiculus mus. Vestibulum purus +mauris, dapibus eu, sagittis quis, sagittis quis, mi. Morbi fringilla +massa quis velit. Curabitur metus massa, semper mollis, molestie vel,
    +adipiscing nec, massa. Phasellus vitae felis sed lectus dapibus +facilisis. In ultrices sagittis ipsum. In at est. Integer iaculis +turpis vel magna. Cras eu est. Integer porttitor ligula a +
    +
    +tellus. Curabitur accumsan ipsum a velit. Sed laoreet lectus quis +leo. Nulla pellentesque molestie ante. Quisque vestibulum est id +justo. Ut pellentesque ante in neque.

    + +

    Line break at beginning of next paragraph:

    +


    +Line 2

    + +

    Line break within a font tag: +ABCDE
    FGHIJK

    + +

    Line break within two nested spans: span 1 2
    break

    + +

    Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec at +odio vitae libero tempus convallis. Cum sociis natoque penatibus et +magnis dis parturient montes, nascetur ridiculus mus. Vestibulum purus +mauris, dapibus eu, sagittis quis, sagittis quis, mi. Morbi fringilla +massa quis velit. Curabitur metus massa, semper mollis, molestie vel,
    +adipiscing nec, massa. Phasellus vitae felis sed lectus dapibus +facilisis. In ultrices sagittis ipsum. In at est. Integer iaculis +turpis vel magna. Cras eu est. Integer porttitor ligula a +
    +
    +tellus. Curabitur accumsan ipsum a velit. Sed laoreet lectus quis +leo. Nulla pellentesque molestie ante. Quisque vestibulum est id +justo. Ut pellentesque ante in neque.

    + + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/dom_large_table.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/dom_large_table.html new file mode 100755 index 00000000..0bf54497 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/dom_large_table.html @@ -0,0 +1,2198 @@ + + + + + + + + + + + + + + + +
    +

    SCHEDULE A

    +
    +

    404-135 - Schedule A

    +APPROVED: 2004-11-18 +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    Job:404-135Purchasers: +Komant
    Created:2004-09-28Last change:2004-11-18
    Job address:2904-26 StreetLegal:28B/22/032-5210
    + + + + + + + + + + + + + +
    Model:Elevation:Size:Style:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ItemDescriptionQuantityUnit CostTotal
    Standard items:
    1add bank of drawers - to bathroom vanity2$125.00Ea.$250.00
    2add sweep outlet - central vac1$100.00Ea.$100.00
    3run central vac rough in to attached garage c/w separate circuit1$120.00Ea.$120.00
    4add fan to FIREPLACE1$195.00Ea.$195.00
    5upgrade to laminate flooring - Entire Main Floor1$2,400.00Ea.$2,400.00
    6upgrade oh door to insulated (9ft)1$95.00Ea.$95.00
    7change upper stairwell ledge to painted MDF1$45.00Ea.$45.00
    8upgrade standard door to pocket door1$145.00Ea.$145.00
    9add RIDP1$400.00Ea.$400.00
    Standard items:
    1add bank of drawers - to bathroom vanity2$125.00Ea.$250.00
    2add sweep outlet - central vac1$100.00Ea.$100.00
    3run central vac rough in to attached garage c/w separate circuit1$120.00Ea.$120.00
    4add fan to FIREPLACE1$195.00Ea.$195.00
    5upgrade to laminate flooring - Entire Main Floor1$2,400.00Ea.$2,400.00
    6upgrade oh door to insulated (9ft)1$95.00Ea.$95.00
    7change upper stairwell ledge to painted MDF1$45.00Ea.$45.00
    8upgrade standard door to pocket door1$145.00Ea.$145.00
    9add RIDP1$400.00Ea.$400.00
    Custom items:
    1upgrade to brushed chrome hardware 1$195.00Ea.$195.00
    2box out FIREPLACE as per plan attached1$250.00Ea.$250.00
    3reduce WIC size by 6" to 8" to allow for large vanity ensuite1$0.00Ea.$0.00
    4add gas line to basement for future gas FP1$300.00Ea.$300.00
    5add pocket dorr to ensuite joining WIC and Ensuite. Delete 2 existing doors1$0.00Ea.$0.00
    6Main floor to be ISLAND Kitchen design1$0.00Ea.$0.00
    7price adjustment1($0.37)Ea.($0.37)
    Custom items:
    1upgrade to brushed chrome hardware 1$195.00Ea.$195.00
    2box out FIREPLACE as per plan attached1$250.00Ea.$250.00
    3reduce WIC size by 6" to 8" to allow for large vanity ensuite1$0.00Ea.$0.00
    4add gas line to basement for future gas FP1$300.00Ea.$300.00
    5add pocket dorr to ensuite joining WIC and Ensuite. Delete 2 existing doors1$0.00Ea.$0.00
    (GST is not included)   +Grand total:$4,494.63
    + + + + + + + + + + + +
    WITNESS: PURCHASER:X
      + Tammy Komant
    +

    This change order shall have no force or effect until approved and signed +by an authorizing signing officer of the Builder. Any change or special +request not noted on this document is not contractual.

    + + + + + + + + +
    ACCEPTED THIS +18 DAY OF NOVEMBER, 2004 +LINCOLNBERG COMMUNITIES

    +PER: +Keith Jansen +
    +
    + + \ No newline at end of file diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/dom_long_table.php b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/dom_long_table.php new file mode 100755 index 00000000..86cf2391 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/dom_long_table.php @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + +" . ($i * $j) . "\n"; +} +?> + + +
    Header
    Footer
    + + \ No newline at end of file diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/dom_nbsp.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/dom_nbsp.html new file mode 100755 index 00000000..c49d040f --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/dom_nbsp.html @@ -0,0 +1,6 @@ + + + + +

    a b c 

    diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/dom_nested_table.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/dom_nested_table.html new file mode 100755 index 00000000..c141ad28 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/dom_nested_table.html @@ -0,0 +1,62 @@ + + + + + + + + + + + +
    + + + + + + + +
    foo
    bar
    +
    + + + + + + + + + + +
    + + + + + + + + +
    + + + + + + + + +
    a
    bc
    +
    d
    e
    +
    f
    gh
    + + + \ No newline at end of file diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/dom_ol.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/dom_ol.html new file mode 100755 index 00000000..20d2d2a9 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/dom_ol.html @@ -0,0 +1,148 @@ + + + + + + + + + +

    none

    +
      +
    1. Item 1
    2. +
    3. Item 2
    4. +
    5. Item 3
    6. +
    + +

    decimal

    +
      +
    1. Item 1
    2. +
    3. Item 2
    4. +
    5. Item 3
    6. +
    + +

    lower-alpha

    +
      +
    1. Item 1
    2. +
    3. Item 2
    4. +
    5. Item 3
    6. +
    + +

    lower-latin

    +
      +
    1. Item 1
    2. +
    3. Item 2
    4. +
    5. Item 3
    6. +
    + +

    lower-roman

    +
      +
    1. Item 1
    2. +
    3. Item 2
    4. +
    5. Item 3
    6. +
    + +

    lower-greek

    +
      +
    1. Item 1
    2. +
    3. Item 2
    4. +
    5. Item 3
    6. +
    + +

    upper-alpha

    +
      +
    1. Item 1
    2. +
    3. Item 2
    4. +
    5. Item 3
    6. +
    + +

    upper-latin

    +
      +
    1. Item 1
    2. +
    3. Item 2
    4. +
    5. Item 3
    6. +
    + +

    upper-roman

    +
      +
    1. Item 1
    2. +
    3. Item 2
    4. +
    5. Item 3
    6. +
    + +

    Advanced

    +
      +
    1. Item 1
    2. +
    3. Item 2 +
        +
      1. Item 1 +
          +
        1. Item 1
        2. +
        3. Item 2
        4. +
        5. Item 3
        6. +
        +
      2. +
      3. Item 2
      4. +
      5. Item 3 +
          +
        1. Item 1
        2. +
        3. Item 2
        4. +
        5. Item 3
        6. +
        +
      6. +
      +
    4. +
    5. Item 3
    6. +
    + +

    decimal-leading-zero

    +
      +
    1. Item #
    2. +
    3. Item #
    4. +
    5. Item #
    6. +
    7. Item #
    8. +
    9. Item #
    10. +
    11. Item #
    12. +
    13. Item #
    14. +
    15. Item #
    16. +
    17. Item #
    18. +
    19. Item #
    20. +
    21. Item #
    22. +
    23. Item #
    24. +
    25. Item #
    26. +
    27. Item #
    28. +
    29. Item #
    30. +
    31. Item #
    32. +
    33. Item #
    34. +
    35. Item #
    36. +
    37. Item #
    38. +
    39. Item #
    40. +
    41. Item #
    42. +
    43. Item #
    44. +
    45. Item #
    46. +
    47. Item #
    48. +
    49. Item #
    50. +
    51. Item #
    52. +
    + + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/dom_simple_ul.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/dom_simple_ul.html new file mode 100755 index 00000000..1d6bd959 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/dom_simple_ul.html @@ -0,0 +1,39 @@ + + + + + + + + +

    Here's a simple list from my favourite website:

    + +
      +
    • The Zend Engine II with a new object model and dozens of new features.
    • + +
    • XML support has been completely redone in PHP 5, all extensions are + now focused around the excellent libxml2 library + (http://www.xmlsoft.org/).
    • + +
    • A new SimpleXML extension for easily accessing and manipulating XML + as PHP objects. It can also interface with the DOM extension and + vice-versa.
    • + +
    • A brand new built-in SOAP extension for interoperability with Web Services.
    • + +
    • A new MySQL extension named MySQLi for developers using MySQL 4.1 and + later. This new extension includes an object-oriented interface in + addition to a traditional interface; as well as support for many of + MySQL's new features, such as prepared statements.
    • + +
    • SQLite has been bundled with PHP. For more information on SQLite, + please visit their website.
    • + +
    • Streams have been greatly improved, including the ability to access low-level socket operations on streams.
    • + +
    • And lots more...
    • + +
      • Sublists
      • work
      • too!
      +
    + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/dom_table.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/dom_table.html new file mode 100755 index 00000000..1997cbd2 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/dom_table.html @@ -0,0 +1,108 @@ + + + + + + + + + + +border-collapse: separate + + + + + + + + + + + + + + + + + + + + + + + + +
    head 1head 2head 3head 4
    cell 1cell 2cell 3
    cell 4cell 5
    cell 6
    cell 7
    + +border-collapse: collapse + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    head 1head 2head 3head 4
    cell 1cell 2cell 3cell 4
    cell 5cell 6cell 7
    cell 8cell 9cell 10
    cell 11
    + + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/dom_table_image.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/dom_table_image.html new file mode 100755 index 00000000..dd2f5d1d --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/dom_table_image.html @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + +
    Some Text
    More TextBlah
    + + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/dom_ul.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/dom_ul.html new file mode 100755 index 00000000..7d64ec73 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/dom_ul.html @@ -0,0 +1,312 @@ + + + + + + + + +
      +
    • Item 1
    • +
    • Item 2
    • +
    • Item 3
    • +
      • Sub 1
      • +
      • Sub 2
      • +
      • Sub 3
      • +
      +
    + +
      +
    • Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec at +odio vitae libero tempus convallis. Cum sociis natoque penatibus et +magnis dis parturient montes, nascetur ridiculus mus. Vestibulum purus +mauris, dapibus eu, sagittis quis, sagittis quis, mi. Morbi fringilla +massa quis velit. Curabitur metus massa, semper mollis, molestie vel, +adipiscing nec, massa. Phasellus vitae felis sed lectus dapibus +facilisis. In ultrices sagittis ipsum. In at est. Integer iaculis +turpis vel magna. Cras eu est. Integer porttitor ligula a +tellus. Curabitur accumsan ipsum a velit. Sed laoreet lectus quis +leo. Nulla pellentesque molestie ante. Quisque vestibulum est id +justo. Ut pellentesque ante in neque.
    • +
    • Curabitur ut diam eu dui vestibulum pharetra. Nam pellentesque, justo +non hendrerit venenatis, mi orci pretium mi, et vehicula leo arcu quis +diam. Nullam mattis laoreet quam. Morbi mollis sem ut tellus. Nam mi +massa, lobortis eu, sollicitudin et, iaculis et, massa. Maecenas purus +mauris, luctus sit amet, pharetra in, facilisis sit amet, elit. Nullam +vel erat tempus purus molestie suscipit. Vestibulum odio lorem, +sollicitudin non, volutpat sit amet, tincidunt vel, nunc. Nulla quis +ante vestibulum odio feugiat facilisis. Proin lorem nisl, viverra at, +rhoncus quis, semper nec, mi. Donec euismod enim vitae velit. Nulla +sed lectus. Vivamus placerat, lacus sed vehicula sagittis, arcu massa +adipiscing lorem, bibendum luctus nisl tortor vitae leo.
    • +
    • Inside. Aliquam enim. Duis et diam. Praesent porta, mauris quis pellentesque +volutpat, erat elit vulputate eros, vitae pulvinar augue velit sit +amet sem. Fusce eu urna eu nisi condimentum posuere. Vivamus sed +felis. Duis eget urna vitae eros interdum dignissim. Proin justo eros, +eleifend in, porttitor in, malesuada non, neque. Etiam sed +augue. Nulla sit amet magna. Lorem ipsum dolor sit amet, consectetuer +adipiscing elit. Mauris facilisis. Curabitur massa magna, pulvinar a, +nonummy eget, egestas vitae, mauris. Quisque vel elit sit amet lorem +malesuada facilisis. Vestibulum porta, metus sit amet egestas +interdum, urna justo euismod erat, id tristique urna leo quis +nibh. Morbi non erat.
    • +
    + +
      +
    • Item 1 disc
    • +
    • Item 2 disc
    • +
    • Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, +sed diam nonumy eirmod tempor invidunt ut labore et dolore magna +aliquyam erat, sed diam voluptua. At vero eos et accusam et justo +duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata +sanctus est Lorem ipsum dolor sit amet.
    • +
    • Item 4 disc
    • +
    + +
      +
    • Item 1 circle
    • +
    • Item 2 circle
    • +
    • Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, +sed diam nonumy eirmod tempor invidunt ut labore et dolore magna +aliquyam erat, sed diam voluptua. At vero eos et accusam et justo +duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata +sanctus est Lorem ipsum dolor sit amet.
    • +
    • Item 4 circle
    • +
    + +
      +
    • Item 1 square
    • +
    • Item 2 square
    • +
    • Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, +sed diam nonumy eirmod tempor invidunt ut labore et dolore magna +aliquyam erat, sed diam voluptua. At vero eos et accusam et justo +duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata +sanctus est Lorem ipsum dolor sit amet.
    • +
    • Item 4 square
    • +
    + +
      +
    • Item 1 image
    • +
    • Item 2 image
    • +
    • Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, +sed diam nonumy eirmod tempor invidunt ut labore et dolore magna +aliquyam erat, sed diam voluptua. At vero eos et accusam et justo +duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata +sanctus est Lorem ipsum dolor sit amet.
    • +
    • Item 4 image
    • +
    • Inside. Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, +sed diam nonumy eirmod tempor invidunt ut labore et dolore magna +aliquyam erat, sed diam voluptua. At vero eos et accusam et justo +duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata +sanctus est Lorem ipsum dolor sit amet.
    • +
    • Outside. Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, +sed diam nonumy eirmod tempor invidunt ut labore et dolore magna +aliquyam erat, sed diam voluptua. At vero eos et accusam et justo +duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata +sanctus est Lorem ipsum dolor sit amet.
    • +
    • Item 7 noimage
    • + +
        +
      • sub Item 1 image
      • +
      • sub Item 2 image
      • +
      • Inside. Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, +sed diam nonumy eirmod tempor invidunt ut labore et dolore magna +aliquyam erat, sed diam voluptua. At vero eos et accusam et justo +duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata +sanctus est Lorem ipsum dolor sit amet.
      • +
      • Outside. Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, +sed diam nonumy eirmod tempor invidunt ut labore et dolore magna +aliquyam erat, sed diam voluptua. At vero eos et accusam et justo +duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata +sanctus est Lorem ipsum dolor sit amet.
      • +
      • sub Item 5 noimage
      • +
      + +
    + +
      +
    • Item 1 missing image - fallback square
    • +
    • Item 2 missing image - fallback square
    • +
    • Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, +sed diam nonumy eirmod tempor invidunt ut labore et dolore magna +aliquyam erat, sed diam voluptua. At vero eos et accusam et justo +duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata +sanctus est Lorem ipsum dolor sit amet.
    • +
    • Inside. Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, +sed diam nonumy eirmod tempor invidunt ut labore et dolore magna +aliquyam erat, sed diam voluptua. At vero eos et accusam et justo +duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata +sanctus est Lorem ipsum dolor sit amet.
    • +
    • Item 4 missing image - fallback square
    • +
    + +
      +
    • Item 1 nobullet
    • +
    • Item 2 nobullet
    • +
    • Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, +sed diam nonumy eirmod tempor invidunt ut labore et dolore magna +aliquyam erat, sed diam voluptua. At vero eos et accusam et justo +duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata +sanctus est Lorem ipsum dolor sit amet.
    • +
    • Inside. Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, +sed diam nonumy eirmod tempor invidunt ut labore et dolore magna +aliquyam erat, sed diam voluptua. At vero eos et accusam et justo +duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata +sanctus est Lorem ipsum dolor sit amet.
    • +
    • Item 4 nobullet
    • +
    + +
      +
    • Item 1 missing image - fallback none
    • +
    • Item 2 missing image - fallback none
    • +
    • Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, +sed diam nonumy eirmod tempor invidunt ut labore et dolore magna +aliquyam erat, sed diam voluptua. At vero eos et accusam et justo +duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata +sanctus est Lorem ipsum dolor sit amet.
    • +
    • Inside. Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, +sed diam nonumy eirmod tempor invidunt ut labore et dolore magna +aliquyam erat, sed diam voluptua. At vero eos et accusam et justo +duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata +sanctus est Lorem ipsum dolor sit amet.
    • +
    • Item 4 missing image - fallback none
    • +
    + +
      +
    • Item 1 bigimage
    • +
    • Item 2 bigimage
    • +
    • Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, +sed diam nonumy eirmod tempor invidunt ut labore et dolore magna +aliquyam erat, sed diam voluptua. At vero eos et accusam et justo +duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata +sanctus est Lorem ipsum dolor sit amet.
    • +
    • Inside. Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, +sed diam nonumy eirmod tempor invidunt ut labore et dolore magna +aliquyam erat, sed diam voluptua. At vero eos et accusam et justo +duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata +sanctus est Lorem ipsum dolor sit amet.
    • +
    • Item 4 bigimage
    • +
    + +
      +
    • margin Item 1 image
    • +
    • margin Item 2 image
    • +
    • Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, +sed diam nonumy eirmod tempor invidunt ut labore et dolore magna +aliquyam erat, sed diam voluptua. At vero eos et accusam et justo +duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata +sanctus est Lorem ipsum dolor sit amet.
    • +
    • margin Item 4 image
    • +
    • Inside. Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, +sed diam nonumy eirmod tempor invidunt ut labore et dolore magna +aliquyam erat, sed diam voluptua. At vero eos et accusam et justo +duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata +sanctus est Lorem ipsum dolor sit amet.
    • +
    • Outside. Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, +sed diam nonumy eirmod tempor invidunt ut labore et dolore magna +aliquyam erat, sed diam voluptua. At vero eos et accusam et justo +duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata +sanctus est Lorem ipsum dolor sit amet.
    • +
    • margin Item 7 noimage
    • + +
        +
      • margin sub Item 1 image
      • +
      • margin sub Item 2 image
      • +
      • Inside. Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, +sed diam nonumy eirmod tempor invidunt ut labore et dolore magna +aliquyam erat, sed diam voluptua. At vero eos et accusam et justo +duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata +sanctus est Lorem ipsum dolor sit amet.
      • +
      • Outside. Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, +sed diam nonumy eirmod tempor invidunt ut labore et dolore magna +aliquyam erat, sed diam voluptua. At vero eos et accusam et justo +duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata +sanctus est Lorem ipsum dolor sit amet.
      • +
      • margin sub Item 5 noimage
      • +
      + +
    + +
      +
    • padding Item 1 image
    • +
    • Inside. Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, +sed diam nonumy eirmod tempor invidunt ut labore et dolore magna +aliquyam erat, sed diam voluptua. At vero eos et accusam et justo +duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata +sanctus est Lorem ipsum dolor sit amet.
    • +
        +
      • padding sub Item 1 image
      • +
      • Inside. Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, +sed diam nonumy eirmod tempor invidunt ut labore et dolore magna +aliquyam erat, sed diam voluptua. At vero eos et accusam et justo +duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata +sanctus est Lorem ipsum dolor sit amet.
      • +
      +
    + +
      +
    • margin Item 1 square
    • +
    • Inside. Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, +sed diam nonumy eirmod tempor invidunt ut labore et dolore magna +aliquyam erat, sed diam voluptua. At vero eos et accusam et justo +duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata +sanctus est Lorem ipsum dolor sit amet.
    • +
        +
      • margin sub Item 1 square
      • +
      • Inside. Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, +sed diam nonumy eirmod tempor invidunt ut labore et dolore magna +aliquyam erat, sed diam voluptua. At vero eos et accusam et justo +duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata +sanctus est Lorem ipsum dolor sit amet.
      • +
      +
    + +
      +
    • padding Item 1 square
    • +
    • Inside. Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, +sed diam nonumy eirmod tempor invidunt ut labore et dolore magna +aliquyam erat, sed diam voluptua. At vero eos et accusam et justo +duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata +sanctus est Lorem ipsum dolor sit amet.
    • +
        +
      • padding sub Item 1 square
      • +
      • Inside. Lorem ipsum dolor sit amet, consectetuer sadipscing elitr, +sed diam nonumy eirmod tempor invidunt ut labore et dolore magna +aliquyam erat, sed diam voluptua. At vero eos et accusam et justo +duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata +sanctus est Lorem ipsum dolor sit amet.
      • +
      +
    + +

    combined list attributes list-style

    + +
      +
    • list-style:square inside url(dummy.png);
    • +
    • list-style:outside;[overwrites only position]
    • +
    +
      +
    • list-style:square inside url(images/png.png);
    • +
    • list-style-position:outside;[overwrites only position]
    • +
    • list-style-position:outside;[overwrite attributes - firefox3: all; dompdf, internet explorer 8: only position]
    • +
    • list-style:none; [resets both, bullet and image]
    • +
    + + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/encoding_entities.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/encoding_entities.html new file mode 100755 index 00000000..607a36f0 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/encoding_entities.html @@ -0,0 +1,14 @@ + + + + + + +

    é © « avoir et être α β

    +

    é © « avoir et être α β

    + \ No newline at end of file diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/encoding_latin1.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/encoding_latin1.html new file mode 100755 index 00000000..9e0051ce --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/encoding_latin1.html @@ -0,0 +1,1162 @@ + + + + +HTML 4.0 Latin-1 Entities + + + + + + +

    Latin-1 Entities

    + +

    The following table gives the character entity reference, decimal +character reference, and hexadecimal character reference for 8-bit +characters in the Latin-1 (ISO-8859-1) character set, as well as the +rendering of each in your browser. Glyphs of the characters are +available at the Unicode +Consortium.

    + +

    Browser support is generally best for the decimal character +references, except for the accented characters (decimal 192-214, +216-246, 248-255), where the character entity references hold a slight +edge.

    + +

    Note that most Mac browsers will render fourteen Latin-1 characters +incorrectly. These characters are decimal 166, 178, 179, 185, 188, +189, 190, 208, 215, 221, 222, 240, 253, and 254. See ISO-8859-1 +and the Mac platform for more information.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    CharacterEntityDecimalHexRendering in Your Browser
    EntityDecimalHex
    no-break space = non-breaking space&nbsp;&#160;&#xA0;   
    inverted exclamation mark&iexcl;&#161;&#xA1;¡¡¡
    cent sign&cent;&#162;&#xA2;¢¢¢
    pound sign&pound;&#163;&#xA3;£££
    currency sign&curren;&#164;&#xA4;¤¤¤
    yen sign = yuan sign&yen;&#165;&#xA5;¥¥¥
    broken bar = broken vertical bar&brvbar;&#166;&#xA6;¦¦¦
    section sign&sect;&#167;&#xA7;§§§
    diaeresis = spacing diaeresis&uml;&#168;&#xA8;¨¨¨
    copyright sign&copy;&#169;&#xA9;©©©
    feminine ordinal indicator&ordf;&#170;&#xAA;ªªª
    left-pointing double angle quotation mark = left pointing guillemet&laquo;&#171;&#xAB;«««
    not sign&not;&#172;&#xAC;¬¬¬
    soft hyphen = discretionary hyphen&shy;&#173;&#xAD;­­­
    registered sign = registered trade mark sign&reg;&#174;&#xAE;®®®
    macron = spacing macron = overline = APL overbar&macr;&#175;&#xAF;¯¯¯
    degree sign&deg;&#176;&#xB0;°°°
    plus-minus sign = plus-or-minus sign&plusmn;&#177;&#xB1;±±±
    superscript two = superscript digit two = squared&sup2;&#178;&#xB2;²²²
    superscript three = superscript digit three = cubed&sup3;&#179;&#xB3;³³³
    acute accent = spacing acute&acute;&#180;&#xB4;´´´
    micro sign&micro;&#181;&#xB5;µµµ
    pilcrow sign = paragraph sign&para;&#182;&#xB6;
    middle dot = Georgian comma = Greek middle dot&middot;&#183;&#xB7;···
    cedilla = spacing cedilla&cedil;&#184;&#xB8;¸¸¸
    superscript one = superscript digit one&sup1;&#185;&#xB9;¹¹¹
    masculine ordinal indicator&ordm;&#186;&#xBA;ººº
    right-pointing double angle quotation mark = right pointing guillemet&raquo;&#187;&#xBB;»»»
    vulgar fraction one quarter = fraction one quarter&frac14;&#188;&#xBC;¼¼¼
    vulgar fraction one half = fraction one half&frac12;&#189;&#xBD;½½½
    vulgar fraction three quarters = fraction three quarters&frac34;&#190;&#xBE;¾¾¾
    inverted question mark = turned question mark&iquest;&#191;&#xBF;¿¿¿
    Latin capital letter A with grave = Latin capital letter A grave&Agrave;&#192;&#xC0;ÀÀÀ
    Latin capital letter A with acute&Aacute;&#193;&#xC1;ÁÁÁ
    Latin capital letter A with circumflex&Acirc;&#194;&#xC2;ÂÂÂ
    Latin capital letter A with tilde&Atilde;&#195;&#xC3;ÃÃÃ
    Latin capital letter A with diaeresis&Auml;&#196;&#xC4;ÄÄÄ
    Latin capital letter A with ring above = Latin capital letter A ring&Aring;&#197;&#xC5;ÅÅÅ
    Latin capital letter AE = Latin capital ligature AE&AElig;&#198;&#xC6;ÆÆÆ
    Latin capital letter C with cedilla&Ccedil;&#199;&#xC7;ÇÇÇ
    Latin capital letter E with grave&Egrave;&#200;&#xC8;ÈÈÈ
    Latin capital letter E with acute&Eacute;&#201;&#xC9;ÉÉÉ
    Latin capital letter E with circumflex&Ecirc;&#202;&#xCA;ÊÊÊ
    Latin capital letter E with diaeresis&Euml;&#203;&#xCB;ËËË
    Latin capital letter I with grave&Igrave;&#204;&#xCC;ÌÌÌ
    Latin capital letter I with acute&Iacute;&#205;&#xCD;ÍÍÍ
    Latin capital letter I with circumflex&Icirc;&#206;&#xCE;ÎÎÎ
    Latin capital letter I with diaeresis&Iuml;&#207;&#xCF;ÏÏÏ
    Latin capital letter ETH&ETH;&#208;&#xD0;ÐÐÐ
    Latin capital letter N with tilde&Ntilde;&#209;&#xD1;ÑÑÑ
    Latin capital letter O with grave&Ograve;&#210;&#xD2;ÒÒÒ
    Latin capital letter O with acute&Oacute;&#211;&#xD3;ÓÓÓ
    Latin capital letter O with circumflex&Ocirc;&#212;&#xD4;ÔÔÔ
    Latin capital letter O with tilde&Otilde;&#213;&#xD5;ÕÕÕ
    Latin capital letter O with diaeresis&Ouml;&#214;&#xD6;ÖÖÖ
    multiplication sign&times;&#215;&#xD7;×××
    Latin capital letter O with stroke = Latin capital letter O slash&Oslash;&#216;&#xD8;ØØØ
    Latin capital letter U with grave&Ugrave;&#217;&#xD9;ÙÙÙ
    Latin capital letter U with acute&Uacute;&#218;&#xDA;ÚÚÚ
    Latin capital letter U with circumflex&Ucirc;&#219;&#xDB;ÛÛÛ
    Latin capital letter U with diaeresis&Uuml;&#220;&#xDC;ÜÜÜ
    Latin capital letter Y with acute&Yacute;&#221;&#xDD;ÝÝÝ
    Latin capital letter THORN&THORN;&#222;&#xDE;ÞÞÞ
    Latin small letter sharp s = ess-zed&szlig;&#223;&#xDF;ßßß
    Latin small letter a with grave = Latin small letter a grave&agrave;&#224;&#xE0;ààà
    Latin small letter a with acute&aacute;&#225;&#xE1;ááá
    Latin small letter a with circumflex&acirc;&#226;&#xE2;âââ
    Latin small letter a with tilde&atilde;&#227;&#xE3;ããã
    Latin small letter a with diaeresis&auml;&#228;&#xE4;äää
    Latin small letter a with ring above = Latin small letter a ring&aring;&#229;&#xE5;ååå
    Latin small letter ae = Latin small ligature ae&aelig;&#230;&#xE6;æææ
    Latin small letter c with cedilla&ccedil;&#231;&#xE7;ççç
    Latin small letter e with grave&egrave;&#232;&#xE8;èèè
    Latin small letter e with acute&eacute;&#233;&#xE9;ééé
    Latin small letter e with circumflex&ecirc;&#234;&#xEA;êêê
    Latin small letter e with diaeresis&euml;&#235;&#xEB;ëëë
    Latin small letter i with grave&igrave;&#236;&#xEC;ììì
    Latin small letter i with acute&iacute;&#237;&#xED;ííí
    Latin small letter i with circumflex&icirc;&#238;&#xEE;îîî
    Latin small letter i with diaeresis&iuml;&#239;&#xEF;ïïï
    Latin small letter eth&eth;&#240;&#xF0;ððð
    Latin small letter n with tilde&ntilde;&#241;&#xF1;ñññ
    Latin small letter o with grave&ograve;&#242;&#xF2;òòò
    Latin small letter o with acute&oacute;&#243;&#xF3;óóó
    Latin small letter o with circumflex&ocirc;&#244;&#xF4;ôôô
    Latin small letter o with tilde&otilde;&#245;&#xF5;õõõ
    Latin small letter o with diaeresis&ouml;&#246;&#xF6;ööö
    division sign&divide;&#247;&#xF7;÷÷÷
    Latin small letter o with stroke = Latin small letter o slash&oslash;&#248;&#xF8;øøø
    Latin small letter u with grave&ugrave;&#249;&#xF9;ùùù
    Latin small letter u with acute&uacute;&#250;&#xFA;úúú
    Latin small letter u with circumflex&ucirc;&#251;&#xFB;ûûû
    Latin small letter u with diaeresis&uuml;&#252;&#xFC;üüü
    Latin small letter y with acute&yacute;&#253;&#xFD;ýýý
    Latin small letter thorn&thorn;&#254;&#xFE;þþþ
    Latin small letter y with diaeresis&yuml;&#255;&#xFF;ÿÿÿ
    + + + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/encoding_special.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/encoding_special.html new file mode 100755 index 00000000..2275d836 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/encoding_special.html @@ -0,0 +1,570 @@ + + + + +HTML 4.0 Special Entities + + + + + + + + +

    Special Entities

    +

    The following table gives the character entity reference, decimal character reference, and hexadecimal character reference for markup-significant and internationalization characters, as well as the rendering of each in your browser. Glyphs of the characters are available at the Unicode Consortium.

    +

    With the exception of HTML 2.0's &quot;, &amp;, &lt;, and &gt;, browser support for these entities is generally quite poor, but recent browsers support some of the character entity references and decimal character references.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    CharacterEntityDecimalHexRendering in Your Browser
    EntityDecimalHex
    quotation mark = APL quote&quot;&#34;&#x22;"""
    ampersand&amp;&#38;&#x26;&&&
    less-than sign&lt;&#60;&#x3C;<<<
    greater-than sign&gt;&#62;&#x3E;>>>
    Latin capital ligature OE&OElig;&#338;&#x152;ŒŒŒ
    Latin small ligature oe&oelig;&#339;&#x153;œœœ
    Latin capital letter S with caron&Scaron;&#352;&#x160;ŠŠŠ
    Latin small letter s with caron&scaron;&#353;&#x161;ššš
    Latin capital letter Y with diaeresis&Yuml;&#376;&#x178;ŸŸŸ
    modifier letter circumflex accent&circ;&#710;&#x2C6;ˆˆˆ
    small tilde&tilde;&#732;&#x2DC;˜˜˜
    en space&ensp;&#8194;&#x2002;   
    em space&emsp;&#8195;&#x2003;   
    thin space&thinsp;&#8201;&#x2009;   
    zero width non-joiner&zwnj;&#8204;&#x200C;‌‌‌
    zero width joiner&zwj;&#8205;&#x200D;‍‍‍
    left-to-right mark&lrm;&#8206;&#x200E;‎‎‎
    right-to-left mark&rlm;&#8207;&#x200F;‏‏‏
    en dash&ndash;&#8211;&#x2013;–––
    em dash&mdash;&#8212;&#x2014;———
    left single quotation mark&lsquo;&#8216;&#x2018;‘‘‘
    right single quotation mark&rsquo;&#8217;&#x2019;’’’
    single low-9 quotation mark&sbquo;&#8218;&#x201A;‚‚‚
    left double quotation mark&ldquo;&#8220;&#x201C;“““
    right double quotation mark&rdquo;&#8221;&#x201D;”””
    double low-9 quotation mark&bdquo;&#8222;&#x201E;„„„
    dagger&dagger;&#8224;&#x2020;†††
    double dagger&Dagger;&#8225;&#x2021;‡‡‡
    per mille sign&permil;&#8240;&#x2030;‰‰‰
    single left-pointing angle quotation mark&lsaquo;&#8249;&#x2039;‹‹‹
    single right-pointing angle quotation mark&rsaquo;&#8250;&#x203A;›››
    euro sign&euro;&#8364;&#x20AC;€€€
    + + + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/encoding_symbols.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/encoding_symbols.html new file mode 100755 index 00000000..dd461be7 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/encoding_symbols.html @@ -0,0 +1,1400 @@ + + + + +HTML 4.0 Entities for Symbols and Greek Letters + + + + + + + + + +

    Entities for Symbols and Greek Letters

    +

    The following table gives the character entity reference, decimal character reference, and hexadecimal character reference for symbols and Greek letters, as well as the rendering of each in your browser. Glyphs of the characters are available at the Unicode Consortium.

    +

    Browser support for these entities is generally quite poor, but recent browsers support some of the character entity references and decimal character references.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    CharacterEntityDecimalHexRendering in Your Browser
    EntityDecimalHex
    Latin small f with hook = function = florin&fnof;&#402;&#x192;ƒƒƒ
    Greek capital letter alpha&Alpha;&#913;&#x391;ΑΑΑ
    Greek capital letter beta&Beta;&#914;&#x392;ΒΒΒ
    Greek capital letter gamma&Gamma;&#915;&#x393;ΓΓΓ
    Greek capital letter delta&Delta;&#916;&#x394;ΔΔΔ
    Greek capital letter epsilon&Epsilon;&#917;&#x395;ΕΕΕ
    Greek capital letter zeta&Zeta;&#918;&#x396;ΖΖΖ
    Greek capital letter eta&Eta;&#919;&#x397;ΗΗΗ
    Greek capital letter theta&Theta;&#920;&#x398;ΘΘΘ
    Greek capital letter iota&Iota;&#921;&#x399;ΙΙΙ
    Greek capital letter kappa&Kappa;&#922;&#x39A;ΚΚΚ
    Greek capital letter lambda&Lambda;&#923;&#x39B;ΛΛΛ
    Greek capital letter mu&Mu;&#924;&#x39C;ΜΜΜ
    Greek capital letter nu&Nu;&#925;&#x39D;ΝΝΝ
    Greek capital letter xi&Xi;&#926;&#x39E;ΞΞΞ
    Greek capital letter omicron&Omicron;&#927;&#x39F;ΟΟΟ
    Greek capital letter pi&Pi;&#928;&#x3A0;ΠΠΠ
    Greek capital letter rho&Rho;&#929;&#x3A1;ΡΡΡ
    Greek capital letter sigma&Sigma;&#931;&#x3A3;ΣΣΣ
    Greek capital letter tau&Tau;&#932;&#x3A4;ΤΤΤ
    Greek capital letter upsilon&Upsilon;&#933;&#x3A5;ΥΥΥ
    Greek capital letter phi&Phi;&#934;&#x3A6;ΦΦΦ
    Greek capital letter chi&Chi;&#935;&#x3A7;ΧΧΧ
    Greek capital letter psi&Psi;&#936;&#x3A8;ΨΨΨ
    Greek capital letter omega&Omega;&#937;&#x3A9;ΩΩΩ
    Greek small letter alpha&alpha;&#945;&#x3B1;ααα
    Greek small letter beta&beta;&#946;&#x3B2;βββ
    Greek small letter gamma&gamma;&#947;&#x3B3;γγγ
    Greek small letter delta&delta;&#948;&#x3B4;δδδ
    Greek small letter epsilon&epsilon;&#949;&#x3B5;εεε
    Greek small letter zeta&zeta;&#950;&#x3B6;ζζζ
    Greek small letter eta&eta;&#951;&#x3B7;ηηη
    Greek small letter theta&theta;&#952;&#x3B8;θθθ
    Greek small letter iota&iota;&#953;&#x3B9;ιιι
    Greek small letter kappa&kappa;&#954;&#x3BA;κκκ
    Greek small letter lambda&lambda;&#955;&#x3BB;λλλ
    Greek small letter mu&mu;&#956;&#x3BC;μμμ
    Greek small letter nu&nu;&#957;&#x3BD;ννν
    Greek small letter xi&xi;&#958;&#x3BE;ξξξ
    Greek small letter omicron&omicron;&#959;&#x3BF;οοο
    Greek small letter pi&pi;&#960;&#x3C0;πππ
    Greek small letter rho&rho;&#961;&#x3C1;ρρρ
    Greek small letter final sigma&sigmaf;&#962;&#x3C2;ςςς
    Greek small letter sigma&sigma;&#963;&#x3C3;σσσ
    Greek small letter tau&tau;&#964;&#x3C4;τττ
    Greek small letter upsilon&upsilon;&#965;&#x3C5;υυυ
    Greek small letter phi&phi;&#966;&#x3C6;φφφ
    Greek small letter chi&chi;&#967;&#x3C7;χχχ
    Greek small letter psi&psi;&#968;&#x3C8;ψψψ
    Greek small letter omega&omega;&#969;&#x3C9;ωωω
    Greek small letter theta symbol&thetasym;&#977;&#x3D1;ϑϑϑ
    Greek upsilon with hook symbol&upsih;&#978;&#x3D2;ϒϒϒ
    Greek pi symbol&piv;&#982;&#x3D6;ϖϖϖ
    bullet = black small circle&bull;&#8226;&#x2022;•••
    horizontal ellipsis = three dot leader&hellip;&#8230;&#x2026;………
    prime = minutes = feet&prime;&#8242;&#x2032;′′′
    double prime = seconds = inches&Prime;&#8243;&#x2033;″″″
    overline = spacing overscore&oline;&#8254;&#x203E;‾‾‾
    fraction slash&frasl;&#8260;&#x2044;⁄⁄⁄
    script capital P = power set = Weierstrass p&weierp;&#8472;&#x2118;℘℘℘
    blackletter capital I = imaginary part&image;&#8465;&#x2111;ℑℑℑ
    blackletter capital R = real part symbol&real;&#8476;&#x211C;ℜℜℜ
    trade mark sign&trade;&#8482;&#x2122;™™™
    alef symbol = first transfinite cardinal&alefsym;&#8501;&#x2135;ℵℵℵ
    leftwards arrow&larr;&#8592;&#x2190;←←←
    upwards arrow&uarr;&#8593;&#x2191;↑↑↑
    rightwards arrow&rarr;&#8594;&#x2192;→→→
    downwards arrow&darr;&#8595;&#x2193;↓↓↓
    left right arrow&harr;&#8596;&#x2194;↔↔↔
    downwards arrow with corner leftwards = carriage return&crarr;&#8629;&#x21B5;↵↵↵
    leftwards double arrow&lArr;&#8656;&#x21D0;⇐⇐⇐
    upwards double arrow&uArr;&#8657;&#x21D1;⇑⇑⇑
    rightwards double arrow&rArr;&#8658;&#x21D2;⇒⇒⇒
    downwards double arrow&dArr;&#8659;&#x21D3;⇓⇓⇓
    left right double arrow&hArr;&#8660;&#x21D4;⇔⇔⇔
    for all&forall;&#8704;&#x2200;∀∀∀
    partial differential&part;&#8706;&#x2202;∂∂∂
    there exists&exist;&#8707;&#x2203;∃∃∃
    empty set = null set = diameter&empty;&#8709;&#x2205;∅∅∅
    nabla = backward difference&nabla;&#8711;&#x2207;∇∇∇
    element of&isin;&#8712;&#x2208;∈∈∈
    not an element of&notin;&#8713;&#x2209;∉∉∉
    contains as member&ni;&#8715;&#x220B;∋∋∋
    n-ary product = product sign&prod;&#8719;&#x220F;∏∏∏
    n-ary sumation&sum;&#8721;&#x2211;∑∑∑
    minus sign&minus;&#8722;&#x2212;−−−
    asterisk operator&lowast;&#8727;&#x2217;∗∗∗
    square root = radical sign&radic;&#8730;&#x221A;√√√
    proportional to&prop;&#8733;&#x221D;∝∝∝
    infinity&infin;&#8734;&#x221E;∞∞∞
    angle&ang;&#8736;&#x2220;∠∠∠
    logical and = wedge&and;&#8743;&#x2227;∧∧∧
    logical or = vee&or;&#8744;&#x2228;∨∨∨
    intersection = cap&cap;&#8745;&#x2229;∩∩∩
    union = cup&cup;&#8746;&#x222A;∪∪∪
    integral&int;&#8747;&#x222B;∫∫∫
    therefore&there4;&#8756;&#x2234;∴∴∴
    tilde operator = varies with = similar to&sim;&#8764;&#x223C;∼∼∼
    approximately equal to&cong;&#8773;&#x2245;≅≅≅
    almost equal to = asymptotic to&asymp;&#8776;&#x2248;≈≈≈
    not equal to&ne;&#8800;&#x2260;≠≠≠
    identical to&equiv;&#8801;&#x2261;≡≡≡
    less-than or equal to&le;&#8804;&#x2264;≤≤≤
    greater-than or equal to&ge;&#8805;&#x2265;≥≥≥
    subset of&sub;&#8834;&#x2282;⊂⊂⊂
    superset of&sup;&#8835;&#x2283;⊃⊃⊃
    not a subset of&nsub;&#8836;&#x2284;⊄⊄⊄
    subset of or equal to&sube;&#8838;&#x2286;⊆⊆⊆
    superset of or equal to&supe;&#8839;&#x2287;⊇⊇⊇
    circled plus = direct sum&oplus;&#8853;&#x2295;⊕⊕⊕
    circled times = vector product&otimes;&#8855;&#x2297;⊗⊗⊗
    up tack = orthogonal to = perpendicular&perp;&#8869;&#x22A5;⊥⊥⊥
    dot operator&sdot;&#8901;&#x22C5;⋅⋅⋅
    left ceiling = APL upstile&lceil;&#8968;&#x2308;⌈⌈⌈
    right ceiling&rceil;&#8969;&#x2309;⌉⌉⌉
    left floor = APL downstile&lfloor;&#8970;&#x230A;⌊⌊⌊
    right floor&rfloor;&#8971;&#x230B;⌋⌋⌋
    left-pointing angle bracket = bra&lang;&#9001;&#x2329;⟨〈〈
    right-pointing angle bracket = ket&rang;&#9002;&#x232A;⟩〉〉
    lozenge&loz;&#9674;&#x25CA;◊◊◊
    black spade suit&spades;&#9824;&#x2660;♠♠♠
    black club suit = shamrock&clubs;&#9827;&#x2663;♣♣♣
    black heart suit = valentine&hearts;&#9829;&#x2665;♥♥♥
    black diamond suit&diams;&#9830;&#x2666;♦♦♦
    + + + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/encoding_unicode.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/encoding_unicode.html new file mode 100755 index 00000000..da72ebb1 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/encoding_unicode.html @@ -0,0 +1,8 @@ + + + + + +献给母亲的爱 + + \ No newline at end of file diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/encoding_unicode_wrapping.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/encoding_unicode_wrapping.html new file mode 100755 index 00000000..543d1f6f --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/encoding_unicode_wrapping.html @@ -0,0 +1,13 @@ + + + + +Wrapping of non-ANSI characters + + + +No se tendrá en cuenta el hecho de que las partes tengan sus establecimientos en Estados diferentes +cuando ello no resulte del contrato, ni de los tratos entre ellas, ni de información revelada por +las partes en cualquier momento antes de la celebración del contrato o en el momento de su celebración. + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/encoding_utf-8.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/encoding_utf-8.html new file mode 100755 index 00000000..78aef094 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/encoding_utf-8.html @@ -0,0 +1,793 @@ + + + + + +Unicode (UTF-8) Test + + + + +

    Unicode (UTF-8) test

    + +

    You can use this document to check if your browser and your installed fonts display multilingual HTML documents in Unicode (UTF-8) correctly.

    + +
    + +

    Latin extended

    + +
    +
    Letters with acute
    +
    AÁ aá   CĆ cć   EÉ eé   IÍ ií   LĹ lĺ   NŃ nń   OÓ oó   RŔ rŕ   SŚ sś   UÚ uú   YÝ yý   ZŹ zź
    + +
    Letters with apostrophe (hacek)
    +
    dď   LĽ lľ   tť
    + +
    Letters with breve
    +
    AĂ aă   GĞ gğ   UŬ uŭ
    + +
    Letters with caron (hacek)
    +
    CČ cč   DĎ   EĚ eě   NŇ nň   RŘ rř   SŠ sš   TŤ   ZŽ zž
    + +
    Letters with cedilla (comma)
    +
    CÇ cç   GĢ gģ   KĶ kķ   LĻ lļ   NŅ nņ   RŖ rŗ   SŞ sş   TŢ tţ
    + +
    Letters with circumflex
    +
    AÂ aâ   CĈ cĉ   EÊ eê   GĜ gĝ   HĤ hĥ   IÎ iî   JĴ jĵ   OÔ oô   SŜ sŝ   UÛ uû   WŴ wŵ   YŶ yŷ
    + +
    Letters with diaeresis (umlaut)
    +
    AÄ aä   EË eë   IÏ iï   OÖ oö   UÜ uü   YŸ yÿ
    + +
    Letters with/without dot above
    +
    CĊ cċ   EĖ eė   GĠ gġ   Iİ iı   ZŻ zż
    + +
    Letters with double acute
    +
    OŐ oő   UŰ uű
    + +
    Letters with grave
    +
    AÀ aà   EÈ eè   IÌ iì   OÒ oò   UÙ uù
    + +
    Letters with horn
    +
    OƠ oơ   UƯ uư
    + +
    Letters with macron
    +
    AĀ aā   EĒ eē   IĪ iī   OŌ oō   UŪ uū
    + +
    Letters with ogonek
    +
    AĄ aą   EĘ eę   IĮ iį   UŲ uų
    + +
    Letters with ring above
    +
    AÅ aå   UŮ uů
    + +
    Letters with stroke
    +
    DĐ dđ   HĦ hħ   LŁ lł   OØ oø
    + +
    Letters with tilde
    +
    AÃ aã   NÑ nñ   OÕ oõ
    + +
    Ligatures
    +
    AEÆ aeæ   OEŒ oeœ
    + +
    Eth & Thorn
    +
    DÐ dð   THÞ thþ
    + +
    German sharp s & long s
    +
    ß   ſ
    +
    + +

    Combining diacritical marks
     

    + +
    + +

    Greek

    + +
    +
    Capital letters
    +
    Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ Τ Υ Φ Χ Ψ Ω
    + +
    Capital letters with tonos
    +
    Ά   Έ   Ή   Ί   Ό   Ύ   Ώ
    + +
    Capital letters with dialytika
    +
    Ϊ   Ϋ
    + +
    Small letters
    +
    α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σς τ υ φ χ ψ ω
    + +
    Small letters with tonos
    +
    ά   έ   ή   ί   ό   ύ   ώ
    + +
    Small letters with dialytika
    +
    ϊ   ϋ
    + +
    Small letters with dialytika and tonos
    +
    ΐ   ΰ
    +
    + +
    + +

    Cyrillic

    + +
    +
    Russian alphabet
    + +
    А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я +
    а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я
    + +
    Belarussian alphabet
    + +
    А Б В Г Д Е Ё Ж З І Й К Л М Н О П Р С Т У Ў Ф Х Ц Ч Ш Ы Ь Э Ю Я +
    а б в г д е ё ж з і й к л м н о п р с т у ў ф х ц ч ш ы ь э ю я
    + +
    Ukrainian alphabet
    + +
    А Б В Г Ґ Д Е Є Ж З И І Ї Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ь Ю Я +
    а б в г ґ д е є ж з и і ї й к л м н о п р с т у ф х ц ч ш щ ь ю я
    + +
    Bulgarian alphabet
    + +
    А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ь Ю Я +
    а б в г д е ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ь ю я
    + +
    Macedonian alphabet
    + +
    А Б В Г Д Ѓ Е Ж З Ѕ И Ј К Л Љ М Н Њ О П Р С Т Ќ У Ф Х Ц Ч Џ Ш +
    а б в г д ѓ е ж з ѕ и ј к л љ м н њ о п р с т ќ у ф х ц ч џ ш
    + +
    Serbian alphabet
    + +
    А Б В Г Д Ђ Е Ж З И Ј К Л Љ М Н Њ О П Р С Т Ћ У Ф Х Ц Ч Џ Ш +
    а б в г д ђ е ж з и ј к л љ м н њ о п р с т ћ у ф х ц ч џ ш
    + +
    Mongolian alphabet
    + +
    +A B V G D E Ë Zh Z I J K L M N O Ö P R S T U Ü F X C Ch Sh Shh " Y ' E Ju Ja
    +
    А Б В Г Д Е Ё Ж З И Й К Л М Н О Ө П Р С Т У Ү Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я +
    а б в г д е ё ж з и й к л м н о ө п р с т у ү ф х ц ч ш щ ъ ы ь э ю я
    +
    + +
    + +

    Armenian

    + +
    +
    Capital letters
    + +
    a b g d e z ê ă th +  ž i l x c’ k’ h dz ğ +  č’ m j n š o č p’ dž +  rr s v t’ r c w ph kh +  ô f
    +
    +Ա +Բ +Գ +Դ +Ե +Զ +Է +Ը +Թ   +Ժ +Ի +Լ +Խ +Ծ +Կ +Հ +Ձ +Ղ   +Ճ +Մ +Յ +Ն +Շ +Ո +Չ +Պ +Ջ   +Ռ +Ս +Վ +Տ +Ր +Ց +Ւ +Փ +Ք   +Օ +Ֆ +
    + +
    Small letters
    + +
    a b g d e z ê ă th +  ž i l x c’ k’ h dz ğ +  č’ m j n š o č p’ dž +  rr s v t’ r c w ph kh +  ew ô f
    +
    +ա +բ +գ +դ +ե +զ +է +ը +թ   +ժ +ի +լ +խ +ծ +կ +հ +ձ +ղ   +ճ +մ +յ +ն +շ +ո +չ +պ +ջ   +ռ +ս +վ +տ +ր +ց +ւ +փ +ք   +և +օ +ֆ +
    +
    + +
    + +

    Georgian

    + +
    +
    Mxedruli (Mkhedruli) script
    + +
    a b g d e v z th +  i k’ l m n o p’ ž +  r s t’ u ph kh ğ q’ š +  č c dz c’ č’ x dž h
    +
    +ა +ბ +გ +დ +ე +ვ +ზ +თ   +ი +კ +ლ +მ +ნ +ო +პ +ჟ   +რ +ს +ტ +უ +ფ +ქ +ღ +ყ +შ   +ჩ +ც +ძ +წ +ჭ +ხ +ჯ +ჰ +
    +
    + +
    + +

    Hebrew

    + +
    +
    Hebrew alphabet
    + +
    ’ v g d h w z H T y xx l mm nn s ‘ ff cc q r S ( š ś ) t
    +
      +א ב ג ד ה ו ז ח ט י כך ל מם נן ס ע פף צץ ק ר ש ( שׁ שׂ ) ת +
    + +
    Letters with dagesh (mappiq)
    + +
    ’ b g d h w z   T y kk l m  n  s   pp c  q r S ( š ś ) t
    +
      +אּ בּ גּ דּ הּ וּ זּ טּ יּ כּךּ לּ מּ נּ סּ פּףּ צּ קּ רּ שּ ( שּׁ שּׂ ) תּ +
    + +
    Yiddish digraphs
    + +
    ww   wy   yy
    +
      +װ ױ ײ +
    + +
    Letters with rafe
    + +
    v   x   f
    +
      +בֿ   +כֿ   +פֿ
    + +
    Vowels with points
    + +
    a   å   o   u   i   ai
    +
      +אַ   +אָ   +וֹ   +וּ   +יִ   +ײַ
    +
    + +
    + +

    Arabic

    + +
    +
    Arabic alphabet
    + +
    ’a a b t þ j H x d ð r z s š S D T Z ‘ ğ f v q k l m n h -t w ÿ y -a
    +
    + ـآ آ  + ـا ا  + بـبـب ب  + تـتـت ت  + ثـثـث ث  + جـجـج ج  + حـحـح ح  + خـخـخ خ  + ـد د  + ـذ ذ  + ـر ر  + ـز ز  + سـسـس س  + شـشـش ش  + صـصـص ص  + ضـضـض ض  + طـطـط ط  + ظـظـظ ظ  + عـعـع ع  + غـغـغ غ  + فـفـف ف  + ڤـڤـڤ ڤ  + قـقـق ق  + كـكـك ك  + لـلـل ل  + مـمـم م  + نـنـن ن  + هـهـه ه  + ـة ة  + ـو و  + يـيـي ي  + یـیـی ی  + ـى ى  +
    + +
    Letters with hamzah  
    + +
    + ء  + ـإ إ  + ـأ أ  + ـؤ ؤ  + ئـئـئ ئ  +
    + +
    Persian alphabet  
    + +
    ’a a b p t s j c H x d z r z ž s š S Z T Z ‘ ğ f q k g l m n v h y
    +
    + ـآ آ  + ـا ا  + بـبـب ب  + پـپـپ پ  + تـتـت ت  + ثـثـث ث  + جـجـج ج  + چـچـچ چ  + حـحـح ح  + خـخـخ خ  + ـد د  + ـذ ذ  + ـر ر  + ـز ز  + ـژ ژ  + سـسـس س  + شـشـش ش  + صـصـص ص  + ضـضـض ض  + طـطـط ط  + ظـظـظ ظ  + عـعـع ع  + غـغـغ غ  + فـفـف ف  + قـقـق ق  + کـکـک ک  + گـگـگ گ  + لـلـل ل  + مـمـم م  + نـنـن ن  + ـو و  + هـهـه ه  + یـیـی ی  +
    + +
    Urdu alphabet  
    + +
    ’a a b p t t. s j c H x d d. z r r. z ž s š S Z T Z ‘ ğ f q k g l m n -n v h h y -e
    +
    + ـآ آ  + ـا ا  + بـبـب ب  + پـپـپ پ  + تـتـت ت  + ٹـٹـٹ ٹ  + ثـثـث ث  + جـجـج ج  + چـچـچ چ  + حـحـح ح  + خـخـخ خ  + ـد د  + ـڈ ڈ  + ـذ ذ  + ـر ر  + ـڑ ڑ  + ـز ز  + ـژ ژ  + سـسـس س  + شـشـش ش  + صـصـص ص  + ضـضـض ض  + طـطـط ط  + ظـظـظ ظ  + عـعـع ع  + غـغـغ غ  + فـفـف ف  + قـقـق ق  + کـکـک ک  + گـگـگ گ  + لـلـل ل  + مـمـم م  + نـنـن ن  + ـں ں  + ـو و  + ہـہـہ ہ  + ھـھـھ ھ  + یـیـی ی  + ـے ے  +
    + +
    Arabic-Indic digits  
    + +
    +0 1 2 3 4 5 6 7 8 9 10 11 12
    +
    + 0 1 2 3 4 5 6 7 8 9 10 11 12
    + ٠ ١ ٢ ٣ ٤ ٥ ٦ ٧ ٨ ٩ ١٠ ١١ ١٢
    + ۰ ۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ +
    +
    + +
    + +

    Devanagari

    + +
    +
    Sanskrit alphabet
    + +
    a aa i ii u uu   r rr l   e ai o au
    +
    +अ आ इ ई उ ऊ   +ऋ ॠ ऌ   +ए ऐ ओ औ +
    + +
    kaa ki kii ku kuu   kr krr kl   ke kai ko kau
    +
    +का कि की कु कू   +कृ कॄ कॢ   +के कै को कौ +
    + +
    k kh g gh ng   +c ch j jh ñ   +t. t.h d. d.h n.   +t th d dh n   +p ph b bh m   +y r l. l v   +ś s. s h
    +
    +क ख ग घ ङ   +च छ ज झ ञ   +ट ठ ड ढ ण   +त थ द ध न   +प फ ब भ म   +य र ळ ल व   +श ष स ह +
    + +
    Hindi/Urdu letters with nuqta
    + +
    q x ğ z r. r.h f
    +
    +क़ ख़ ग़ ज़ +ड़ ढ़ फ़ +
    + +
    Sample conjuncts
    + +
    ks. jñ tt tr rt
    +
    +क्ष ज्ञ त्त त्र र्त +
    + +
    Devanagari digits
    + +
    +0 1 2 3 4 5 6 7 8 9 10
    +
    +० १ २ ३ ४ ५ ६ ७ ८ ९ १०
    +
    + +
    + +

    Gujarati

    + +
    +
    Sanskrit alphabet
    + +
    a aa i ii u uu   r rr   e ai o au
    +
    +અ આ ઇ ઈ ઉ ઊ   +ઋ ૠ   +એ ઐ ઓ ઔ +
    + +
    kaa ki kii ku kuu   kr krr   ke kai ko kau
    +
    +કા કિ કી કુ કૂ   +કૃ કૄ   +કે કૈ કો કૌ +
    + +
    k kh g gh ng   +c ch j jh ñ   +t. t.h d. d.h n.   +t th d dh n   +p ph b bh m   +y r l. l v   +ś s. s h
    +
    +ક ખ ગ ઘ ઙ   +ચ છ જ ઝ ઞ   +ટ ઠ ડ ઢ ણ   +ત થ દ ધ ન   +પ ફ બ ભ મ   +ય ર ળ લ વ   +શ ષ સ હ +
    + +
    Sample conjuncts
    + +
    ks. jñ tt tr rt
    +
    +ક્ષ જ્ઞ ત્ત ત્ર ર્ત +
    + +
    Gujarati digits
    + +
    +0 1 2 3 4 5 6 7 8 9 10
    +
    +૦ ૧ ૨ ૩ ૪ ૫ ૬ ૭ ૮ ૯ ૧૦
    +
    + +
    + +

    Bengali

    + +
    +
    Sanskrit alphabet
    + +
    a aa i ii u uu   r rr l   e ai o au
    +
    +অ আ ই ঈ উ ঊ   +ঋ ৠ ঌ   +এ ঐ ও ঔ +
    + +
    kaa ki kii ku kuu   kr krr kl   ke kai ko kau
    +
    +কা কি কী কু কূ   +কৃ কৄ কৢ   +কে কৈ কো কো +
    + +
    k kh g gh ng   +c ch j jh ñ   +t. t.h d. d.h n.   +t th d dh n   +p ph b bh m   +y r l v   +ś s. s h
    +
    +ক খ গ ঘ ঙ   +চ ছ জ ঝ ঞ   +ট ঠ ড ঢ ণ   +ত থ দ ধ ন   +প ফ ব ভ ম   +য র ল ব   +শ ষ স হ +
    + +
    Letters with nukta & Assamese letters
    + +
    r. r.h y.   r v
    +
    +ড় ঢ় য়   +ৰ ৱ +
    + +
    Sample conjuncts
    + +
    ks. jñ tt tr rt
    +
    +ক্ষ জ্ঞ ত্ত ত্র র্ত +
    + +
    Bengali digits
    + +
    +0 1 2 3 4 5 6 7 8 9 10
    +
    +০ ১ ২ ৩ ৪ ৫ ৬ ৭ ৮ ৯ ১০
    +
    + +
    + +

    Gurmukhi

    + +
    +
    Panjabi alphabet
    + +
    a aa i ii u uu   e ai o au
    +
    +ਅ ਆ ਇ ਈ ਉ ਊ   +ਏ ਐ ਓ ਔ +
    + +
    kaa ki kii ku kuu   ke kai ko kau
    +
    +ਕਾ ਕਿ ਕੀ ਕੁ ਕੂ   +ਕੇ ਕੈ ਕੋ ਕੌ +
    + +
    k kh g gh ng   +c ch j jh ñ   +t. t.h d. d.h n.   +t th d dh n   +p ph b bh m   +y r l v r.   +s h
    +
    +ਕ ਖ ਗ ਘ ਙ   +ਚ ਛ ਜ ਝ ਞ   +ਟ ਠ ਡ ਢ ਣ   +ਤ ਥ ਦ ਧ ਨ   +ਪ ਫ ਬ ਭ ਮ   +ਯ ਰ ਲ ਵ ੜ   +ਸ ਹ +
    + +
    Letters with nukta
    + +
    x ğ z f l. š
    +
    +ਖ਼ ਗ਼ ਜ਼ +ਫ਼ ਲ਼ ਸ਼ +
    + +
    Gurmukhi digits
    + +
    +0 1 2 3 4 5 6 7 8 9 10
    +
    +੦ ੧ ੨ ੩ ੪ ੫ ੬ ੭ ੮ ੯ ੧੦
    +
    + +
    + +

    Symbols

    + + ++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    •bullet
    ¢cent sign
    ©copyright sign
    ¤currency sign
    †dagger
    °degree sign
    ÷division sign
    «double angle quotation mark (guillemet) <<
    »double angle quotation mark (guillemet) >>
    “double quotation mark 66
    ”double quotation mark 99
    „double quotation mark low-99
    …ellipsis
    —em dash
    –en dash
    €euro sign
    ―horizontal bar (quotation dash)
    µmicro sign
    ·middle dot (centered period)
    ·middle dot (centered period, Greek ano teleia)
    ×multiplication sign
    ¬not sign
    №numero sign
    ‰per mille (per thousand) sign
    pilcrow (paragraph) sign
    ±plus-minus sign
    £pound sterling sign
    ®registered sign
    §section sign
    ₪sheqel sign
    ‹single angle quotation mark (guillemet) <
    ›single angle quotation mark (guillemet) >
    ‘single quotation mark 6
    ’single quotation mark 9 (apostrophe)
    ¹superscript 1
    ²superscript 2
    ³superscript 3
    ™trademark sign
    ¥yen sign
    ،Arabic comma
    ٫Arabic decimal separator
    ٪Arabic percent sign
    ؟Arabic question mark
    ؛Arabic semicolon
    ۔Arabic-Urdu full stop (Arabic-Urdu period)
    ־Hebrew hyphen (maqaf)
    ׳Hebrew prime (geresh)
    ״Hebrew double prime (gershayim)
    ॰Indic abbreviation sign
    ।Indic danda
    ॥Indic double danda
    + +
    + +


    19 February 2010

    + + + \ No newline at end of file diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/encoding_utf-8_all.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/encoding_utf-8_all.html new file mode 100755 index 00000000..76d500e3 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/encoding_utf-8_all.html @@ -0,0 +1,2064 @@ + + + + + + + + + + + +
    0020 !"#$%&'()*+,-./0123456789:;<=>? +
    0040 @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ +
    0060 `abcdefghijklmnopqrstuvwxyz{|}~ +
    0080 €‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ +
    00A0  ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ +
    00C0 ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞß +
    00E0 àáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ +
    0100 ĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğ +
    0120 ĠġĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĸĹĺĻļĽľĿ +
    0140 ŀŁłŃńŅņŇňʼnŊŋŌōŎŏŐőŒœŔŕŖŗŘřŚśŜŝŞş +
    0160 ŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽžſ +
    0180 ƀƁƂƃƄƅƆƇƈƉƊƋƌƍƎƏƐƑƒƓƔƕƖƗƘƙƚƛƜƝƞƟ +
    01A0 ƠơƢƣƤƥƦƧƨƩƪƫƬƭƮƯưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿ +
    01C0 ǀǁǂǃDŽDždžLJLjljNJNjnjǍǎǏǐǑǒǓǔǕǖǗǘǙǚǛǜǝǞǟ +
    01E0 ǠǡǢǣǤǥǦǧǨǩǪǫǬǭǮǯǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ +
    0200 ȀȁȂȃȄȅȆȇȈȉȊȋȌȍȎȏȐȑȒȓȔȕȖȗȘșȚțȜȝȞȟ +
    0220 ȠȡȢȣȤȥȦȧȨȩȪȫȬȭȮȯȰȱȲȳȴȵȶȷȸȹȺȻȼȽȾȿ +
    0240 ɀɁɂɃɄɅɆɇɈɉɊɋɌɍɎɏɐɑɒɓɔɕɖɗɘəɚɛɜɝɞɟ +
    0260 ɠɡɢɣɤɥɦɧɨɩɪɫɬɭɮɯɰɱɲɳɴɵɶɷɸɹɺɻɼɽɾɿ +
    0280 ʀʁʂʃʄʅʆʇʈʉʊʋʌʍʎʏʐʑʒʓʔʕʖʗʘʙʚʛʜʝʞʟ +
    02A0 ʠʡʢʣʤʥʦʧʨʩʪʫʬʭʮʯʰʱʲʳʴʵʶʷʸʹʺʻʼʽʾʿ +
    02C0 ˀˁ˂˃˄˅ˆˇˈˉˊˋˌˍˎˏːˑ˒˓˔˕˖˗˘˙˚˛˜˝˞˟ +
    02E0 ˠˡˢˣˤ˥˦˧˨˩˪˫ˬ˭ˮ˯˰˱˲˳˴˵˶˷˸˹˺˻˼˽˾˿ +
    0300 ̛̖̗̘̙̜̝̞̟̀́̂̃̄̅̆̇̈̉̊̋̌̍̎̏̐̑̒̓̔̕̚ +
    0320 ̴̵̶̷̸̡̢̧̨̠̣̤̥̦̩̪̫̬̭̮̯̰̱̲̳̹̺̻̼̽̾̿ +
    0340 ͇͈͉͍͎̀́͂̓̈́͆͊͋͌ͅ͏͓͔͕͖͙͚͐͑͒͗͛͘͜͟͝͞ +
    0360 ͣͤͥͦͧͨͩͪͫͬͭͮͯ͢͠͡ͰͱͲͳʹ͵Ͷͷ͸͹ͺͻͼͽ;Ϳ +
    0380 ΀΁΂΃΄΅Ά·ΈΉΊ΋Ό΍ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟ +
    03A0 ΠΡ΢ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξο +
    03C0 πρςστυφχψωϊϋόύώϏϐϑϒϓϔϕϖϗϘϙϚϛϜϝϞϟ +
    03E0 ϠϡϢϣϤϥϦϧϨϩϪϫϬϭϮϯϰϱϲϳϴϵ϶ϷϸϹϺϻϼϽϾϿ +
    0400 ЀЁЂЃЄЅІЇЈЉЊЋЌЍЎЏАБВГДЕЖЗИЙКЛМНОП +
    0420 РСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп +
    0440 рстуфхцчшщъыьэюяѐёђѓєѕіїјљњћќѝўџ +
    0460 ѠѡѢѣѤѥѦѧѨѩѪѫѬѭѮѯѰѱѲѳѴѵѶѷѸѹѺѻѼѽѾѿ +
    0480 Ҁҁ҂҃҄҅҆҇҈҉ҊҋҌҍҎҏҐґҒғҔҕҖҗҘҙҚқҜҝҞҟ +
    04A0 ҠҡҢңҤҥҦҧҨҩҪҫҬҭҮүҰұҲҳҴҵҶҷҸҹҺһҼҽҾҿ +
    04C0 ӀӁӂӃӄӅӆӇӈӉӊӋӌӍӎӏӐӑӒӓӔӕӖӗӘәӚӛӜӝӞӟ +
    04E0 ӠӡӢӣӤӥӦӧӨөӪӫӬӭӮӯӰӱӲӳӴӵӶӷӸӹӺӻӼӽӾӿ +
    0500 ԀԁԂԃԄԅԆԇԈԉԊԋԌԍԎԏԐԑԒԓԔԕԖԗԘԙԚԛԜԝԞԟ +
    0520 ԠԡԢԣԤԥԦԧԨԩԪԫԬԭԮԯ԰ԱԲԳԴԵԶԷԸԹԺԻԼԽԾԿ +
    0540 ՀՁՂՃՄՅՆՇՈՉՊՋՌՍՎՏՐՑՒՓՔՕՖ՗՘ՙ՚՛՜՝՞՟ +
    0560 ՠաբգդեզէըթժիլխծկհձղճմյնշոչպջռսվտ +
    0580 րցւփքօֆևֈ։֊֋֌֍֎֏֐֑֖֛֚֒֓֔֕֗֘֙֜֝֞֟ +
    05A0 ְֱֲֳִֵֶַָֹֺֻּֽ֢֣֤֥֦֧֪֭֮֠֡֨֩֫֬֯־ֿ +
    05C0 ׀ׁׂ׃ׅׄ׆ׇ׈׉׊׋׌׍׎׏אבגדהוזחטיךכלםמן +
    05E0 נסעףפץצקרשת׫׬׭׮ׯװױײ׳״׵׶׷׸׹׺׻׼׽׾׿ +
    0600 ؀؁؂؃؄؅؆؇؈؉؊؋،؍؎؏ؘؙؚؐؑؒؓؔؕؖؗ؛؜؝؞؟ +
    0620 ؠءآأؤإئابةتثجحخدذرزسشصضطظعغػؼؽؾؿ +
    0640 ـفقكلمنهوىيًٌٍَُِّْٕٖٜٟٓٔٗ٘ٙٚٛٝٞ +
    0660 ٠١٢٣٤٥٦٧٨٩٪٫٬٭ٮٯٰٱٲٳٴٵٶٷٸٹٺٻټٽپٿ +
    0680 ڀځڂڃڄڅچڇڈډڊڋڌڍڎڏڐڑڒړڔڕږڗژڙښڛڜڝڞڟ +
    06A0 ڠڡڢڣڤڥڦڧڨکڪګڬڭڮگڰڱڲڳڴڵڶڷڸڹںڻڼڽھڿ +
    06C0 ۀہۂۃۄۅۆۇۈۉۊۋیۍێۏېۑےۓ۔ەۖۗۘۙۚۛۜ۝۞۟ +
    06E0 ۣ۠ۡۢۤۥۦۧۨ۩۪ۭ۫۬ۮۯ۰۱۲۳۴۵۶۷۸۹ۺۻۼ۽۾ۿ +
    0700 ܀܁܂܃܄܅܆܇܈܉܊܋܌܍܎܏ܐܑܒܓܔܕܖܗܘܙܚܛܜܝܞܟ +
    0720 ܠܡܢܣܤܥܦܧܨܩܪܫܬܭܮܯܱܴܷܸܹܻܼܾܰܲܳܵܶܺܽܿ +
    0740 ݂݄݆݈݀݁݃݅݇݉݊݋݌ݍݎݏݐݑݒݓݔݕݖݗݘݙݚݛݜݝݞݟ +
    0760 ݠݡݢݣݤݥݦݧݨݩݪݫݬݭݮݯݰݱݲݳݴݵݶݷݸݹݺݻݼݽݾݿ +
    0780 ހށނރބޅކއވމފދތލގޏސޑޒޓޔޕޖޗޘޙޚޛޜޝޞޟ +
    07A0 ޠޡޢޣޤޥަާިީުޫެޭޮޯްޱ޲޳޴޵޶޷޸޹޺޻޼޽޾޿ +
    07C0 ߀߁߂߃߄߅߆߇߈߉ߊߋߌߍߎߏߐߑߒߓߔߕߖߗߘߙߚߛߜߝߞߟ +
    07E0 ߠߡߢߣߤߥߦߧߨߩߪ߲߫߬߭߮߯߰߱߳ߴߵ߶߷߸߹ߺ߻߼߽߾߿ +
    0800 ࠀࠁࠂࠃࠄࠅࠆࠇࠈࠉࠊࠋࠌࠍࠎࠏࠐࠑࠒࠓࠔࠕࠖࠗ࠘࠙ࠚࠛࠜࠝࠞࠟ +
    0820 ࠠࠡࠢࠣࠤࠥࠦࠧࠨࠩࠪࠫࠬ࠭࠮࠯࠰࠱࠲࠳࠴࠵࠶࠷࠸࠹࠺࠻࠼࠽࠾࠿ +
    0840 ࡀࡁࡂࡃࡄࡅࡆࡇࡈࡉࡊࡋࡌࡍࡎࡏࡐࡑࡒࡓࡔࡕࡖࡗࡘ࡙࡚࡛࡜࡝࡞࡟ +
    0860 ࡠࡡࡢࡣࡤࡥࡦࡧࡨࡩࡪ࡫࡬࡭࡮࡯ࡰࡱࡲࡳࡴࡵࡶࡷࡸࡹࡺࡻࡼࡽࡾࡿ +
    0880 ࢀࢁࢂࢃࢄࢅࢆࢇ࢈ࢉࢊࢋࢌࢍࢎ࢏࢐࢑࢒࢓࢔࢕࢖࢙࢚࢛ࢗ࢘࢜࢝࢞࢟ +
    08A0 ࢠࢡࢢࢣࢤࢥࢦࢧࢨࢩࢪࢫࢬࢭࢮࢯࢰࢱࢲࢳࢴࢵࢶࢷࢸࢹࢺࢻࢼࢽࢾࢿ +
    08C0 ࣀࣁࣂࣃࣄࣅࣆࣇࣈࣉ࣏࣐࣑࣒࣓࣊࣋࣌࣍࣎ࣔࣕࣖࣗࣘࣙࣚࣛࣜࣝࣞࣟ +
    08E0 ࣠࣡࣢ࣰࣱࣲࣣࣦࣩ࣭࣮࣯ࣶࣹࣺࣤࣥࣧࣨ࣪࣫࣬ࣳࣴࣵࣷࣸࣻࣼࣽࣾࣿ +
    0900 ऀँंःऄअआइईउऊऋऌऍऎएऐऑऒओऔकखगघङचछजझञट +
    0920 ठडढणतथदधनऩपफबभमयरऱलळऴवशषसहऺऻ़ऽाि +
    0940 ीुूृॄॅॆेैॉॊोौ्ॎॏॐ॒॑॓॔ॕॖॗक़ख़ग़ज़ड़ढ़फ़य़ +
    0960 ॠॡॢॣ।॥०१२३४५६७८९॰ॱॲॳॴॵॶॷॸॹॺॻॼॽॾॿ +
    0980 ঀঁংঃ঄অআইঈউঊঋঌ঍঎এঐ঑঒ওঔকখগঘঙচছজঝঞট +
    09A0 ঠডঢণতথদধন঩পফবভমযর঱ল঳঴঵শষসহ঺঻়ঽাি +
    09C0 ীুূৃৄ৅৆েৈ৉৊োৌ্ৎ৏৐৑৒৓৔৕৖ৗ৘৙৚৛ড়ঢ়৞য় +
    09E0 ৠৡৢৣ৤৥০১২৩৪৫৬৭৮৯ৰৱ৲৳৴৵৶৷৸৹৺৻ৼ৽৾৿ +
    0A00 ਀ਁਂਃ਄ਅਆਇਈਉਊ਋਌਍਎ਏਐ਑਒ਓਔਕਖਗਘਙਚਛਜਝਞਟ +
    0A20 ਠਡਢਣਤਥਦਧਨ਩ਪਫਬਭਮਯਰ਱ਲਲ਼਴ਵਸ਼਷ਸਹ਺਻਼਽ਾਿ +
    0A40 ੀੁੂ੃੄੅੆ੇੈ੉੊ੋੌ੍੎੏੐ੑ੒੓੔੕੖੗੘ਖ਼ਗ਼ਜ਼ੜ੝ਫ਼੟ +
    0A60 ੠੡੢੣੤੥੦੧੨੩੪੫੬੭੮੯ੰੱੲੳੴੵ੶੷੸੹੺੻੼੽੾੿ +
    0A80 ઀ઁંઃ઄અઆઇઈઉઊઋઌઍ઎એઐઑ઒ઓઔકખગઘઙચછજઝઞટ +
    0AA0 ઠડઢણતથદધન઩પફબભમયર઱લળ઴વશષસહ઺઻઼ઽાિ +
    0AC0 ીુૂૃૄૅ૆ેૈૉ૊ોૌ્૎૏ૐ૑૒૓૔૕૖૗૘૙૚૛૜૝૞૟ +
    0AE0 ૠૡૢૣ૤૥૦૧૨૩૪૫૬૭૮૯૰૱૲૳૴૵૶૷૸ૹૺૻૼ૽૾૿ +
    0B00 ଀ଁଂଃ଄ଅଆଇଈଉଊଋଌ଍଎ଏଐ଑଒ଓଔକଖଗଘଙଚଛଜଝଞଟ +
    0B20 ଠଡଢଣତଥଦଧନ଩ପଫବଭମଯର଱ଲଳ଴ଵଶଷସହ଺଻଼ଽାି +
    0B40 ୀୁୂୃୄ୅୆େୈ୉୊ୋୌ୍୎୏୐୑୒୓୔୕ୖୗ୘୙୚୛ଡ଼ଢ଼୞ୟ +
    0B60 ୠୡୢୣ୤୥୦୧୨୩୪୫୬୭୮୯୰ୱ୲୳୴୵୶୷୸୹୺୻୼୽୾୿ +
    0B80 ஀஁ஂஃ஄அஆஇஈஉஊ஋஌஍எஏஐ஑ஒஓஔக஖஗஘ஙச஛ஜ஝ஞட +
    0BA0 ஠஡஢ணத஥஦஧நனப஫஬஭மயரறலளழவஶஷஸஹ஺஻஼஽ாி +
    0BC0 ீுூ௃௄௅ெேை௉ொோௌ்௎௏ௐ௑௒௓௔௕௖ௗ௘௙௚௛௜௝௞௟ +
    0BE0 ௠௡௢௣௤௥௦௧௨௩௪௫௬௭௮௯௰௱௲௳௴௵௶௷௸௹௺௻௼௽௾௿ +
    0C00 ఀఁంఃఄఅఆఇఈఉఊఋఌ఍ఎఏఐ఑ఒఓఔకఖగఘఙచఛజఝఞట +
    0C20 ఠడఢణతథదధన఩పఫబభమయరఱలళఴవశషసహ఺఻఼ఽాి +
    0C40 ీుూృౄ౅ెేై౉ొోౌ్౎౏౐౑౒౓౔ౕౖ౗ౘౙౚ౛౜ౝ౞౟ +
    0C60 ౠౡౢౣ౤౥౦౧౨౩౪౫౬౭౮౯౰౱౲౳౴౵౶౷౸౹౺౻౼౽౾౿ +
    0C80 ಀಁಂಃ಄ಅಆಇಈಉಊಋಌ಍ಎಏಐ಑ಒಓಔಕಖಗಘಙಚಛಜಝಞಟ +
    0CA0 ಠಡಢಣತಥದಧನ಩ಪಫಬಭಮಯರಱಲಳ಴ವಶಷಸಹ಺಻಼ಽಾಿ +
    0CC0 ೀುೂೃೄ೅ೆೇೈ೉ೊೋೌ್೎೏೐೑೒೓೔ೕೖ೗೘೙೚೛೜ೝೞ೟ +
    0CE0 ೠೡೢೣ೤೥೦೧೨೩೪೫೬೭೮೯೰ೱೲೳ೴೵೶೷೸೹೺೻೼೽೾೿ +
    0D00 ഀഁംഃഄഅആഇഈഉഊഋഌ഍എഏഐ഑ഒഓഔകഖഗഘങചഛജഝഞട +
    0D20 ഠഡഢണതഥദധനഩപഫബഭമയരറലളഴവശഷസഹഺ഻഼ഽാി +
    0D40 ീുൂൃൄ൅െേൈ൉ൊോൌ്ൎ൏൐൑൒൓ൔൕൖൗ൘൙൚൛൜൝൞ൟ +
    0D60 ൠൡൢൣ൤൥൦൧൨൩൪൫൬൭൮൯൰൱൲൳൴൵൶൷൸൹ൺൻർൽൾൿ +
    0D80 ඀ඁංඃ඄අආඇඈඉඊඋඌඍඎඏඐඑඒඓඔඕඖ඗඘඙කඛගඝඞඟ +
    0DA0 චඡජඣඤඥඦටඨඩඪණඬතථදධන඲ඳපඵබභමඹයර඼ල඾඿ +
    0DC0 වශෂසහළෆ෇෈෉්෋෌෍෎ාැෑිීු෕ූ෗ෘෙේෛොෝෞෟ +
    0DE0 ෠෡෢෣෤෥෦෧෨෩෪෫෬෭෮෯෰෱ෲෳ෴෵෶෷෸෹෺෻෼෽෾෿ +
    0E00 ฀กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟ +
    0E20 ภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู฻฼฽฾฿ +
    0E40 เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛๜๝๞๟ +
    0E60 ๠๡๢๣๤๥๦๧๨๩๪๫๬๭๮๯๰๱๲๳๴๵๶๷๸๹๺๻๼๽๾๿ +
    0E80 ຀ກຂ຃ຄ຅ຆງຈຉຊ຋ຌຍຎຏຐຑຒຓດຕຖທຘນບປຜຝພຟ +
    0EA0 ຠມຢຣ຤ລ຦ວຨຩສຫຬອຮຯະັາຳິີຶື຺ຸູົຼຽ຾຿ +
    0EC0 ເແໂໃໄ໅ໆ໇່້໊໋໌ໍ໎໏໐໑໒໓໔໕໖໗໘໙໚໛ໜໝໞໟ +
    0EE0 ໠໡໢໣໤໥໦໧໨໩໪໫໬໭໮໯໰໱໲໳໴໵໶໷໸໹໺໻໼໽໾໿ +
    0F00 ༀ༁༂༃༄༅༆༇༈༉༊་༌།༎༏༐༑༒༓༔༕༖༗༘༙༚༛༜༝༞༟ +
    0F20 ༠༡༢༣༤༥༦༧༨༩༪༫༬༭༮༯༰༱༲༳༴༵༶༷༸༹༺༻༼༽༾༿ +
    0F40 ཀཁགགྷངཅཆཇ཈ཉཊཋཌཌྷཎཏཐདདྷནཔཕབབྷམཙཚཛཛྷཝཞཟ +
    0F60 འཡརལཤཥསཧཨཀྵཪཫཬ཭཮཯཰ཱཱཱིིུུྲྀཷླྀཹེཻོཽཾཿ +
    0F80 ྄ཱྀྀྂྃ྅྆྇ྈྉྊྋྌྍྎྏྐྑྒྒྷྔྕྖྗ྘ྙྚྛྜྜྷྞྟ +
    0FA0 ྠྡྡྷྣྤྥྦྦྷྨྩྪྫྫྷྭྮྯྰྱྲླྴྵྶྷྸྐྵྺྻྼ྽྾྿ +
    0FC0 ࿀࿁࿂࿃࿄࿅࿆࿇࿈࿉࿊࿋࿌࿍࿎࿏࿐࿑࿒࿓࿔࿕࿖࿗࿘࿙࿚࿛࿜࿝࿞࿟ +
    0FE0 ࿠࿡࿢࿣࿤࿥࿦࿧࿨࿩࿪࿫࿬࿭࿮࿯࿰࿱࿲࿳࿴࿵࿶࿷࿸࿹࿺࿻࿼࿽࿾࿿ +
    1000 ကခဂဃငစဆဇဈဉညဋဌဍဎဏတထဒဓနပဖဗဘမယရလဝသဟ +
    1020 ဠအဢဣဤဥဦဧဨဩဪါာိီုူေဲဳဴဵံ့း္်ျြွှဿ +
    1040 ၀၁၂၃၄၅၆၇၈၉၊။၌၍၎၏ၐၑၒၓၔၕၖၗၘၙၚၛၜၝၞၟ +
    1060 ၠၡၢၣၤၥၦၧၨၩၪၫၬၭၮၯၰၱၲၳၴၵၶၷၸၹၺၻၼၽၾၿ +
    1080 ႀႁႂႃႄႅႆႇႈႉႊႋႌႍႎႏ႐႑႒႓႔႕႖႗႘႙ႚႛႜႝ႞႟ +
    10A0 ႠႡႢႣႤႥႦႧႨႩႪႫႬႭႮႯႰႱႲႳႴႵႶႷႸႹႺႻႼႽႾႿ +
    10C0 ჀჁჂჃჄჅ჆Ⴧ჈჉჊჋჌Ⴭ჎჏აბგდევზთიკლმნოპჟ +
    10E0 რსტუფქღყშჩცძწჭხჯჰჱჲჳჴჵჶჷჸჹჺ჻ჼჽჾჿ +
    1100 ᄀᄁᄂᄃᄄᄅᄆᄇᄈᄉᄊᄋᄌᄍᄎᄏᄐᄑᄒᄓᄔᄕᄖᄗᄘᄙᄚᄛᄜᄝᄞᄟ +
    1120 ᄠᄡᄢᄣᄤᄥᄦᄧᄨᄩᄪᄫᄬᄭᄮᄯᄰᄱᄲᄳᄴᄵᄶᄷᄸᄹᄺᄻᄼᄽᄾᄿ +
    1140 ᅀᅁᅂᅃᅄᅅᅆᅇᅈᅉᅊᅋᅌᅍᅎᅏᅐᅑᅒᅓᅔᅕᅖᅗᅘᅙᅚᅛᅜᅝᅞᅟ +
    1160 ᅠᅡᅢᅣᅤᅥᅦᅧᅨᅩᅪᅫᅬᅭᅮᅯᅰᅱᅲᅳᅴᅵᅶᅷᅸᅹᅺᅻᅼᅽᅾᅿ +
    1180 ᆀᆁᆂᆃᆄᆅᆆᆇᆈᆉᆊᆋᆌᆍᆎᆏᆐᆑᆒᆓᆔᆕᆖᆗᆘᆙᆚᆛᆜᆝᆞᆟ +
    11A0 ᆠᆡᆢᆣᆤᆥᆦᆧᆨᆩᆪᆫᆬᆭᆮᆯᆰᆱᆲᆳᆴᆵᆶᆷᆸᆹᆺᆻᆼᆽᆾᆿ +
    11C0 ᇀᇁᇂᇃᇄᇅᇆᇇᇈᇉᇊᇋᇌᇍᇎᇏᇐᇑᇒᇓᇔᇕᇖᇗᇘᇙᇚᇛᇜᇝᇞᇟ +
    11E0 ᇠᇡᇢᇣᇤᇥᇦᇧᇨᇩᇪᇫᇬᇭᇮᇯᇰᇱᇲᇳᇴᇵᇶᇷᇸᇹᇺᇻᇼᇽᇾᇿ +
    1200 ሀሁሂሃሄህሆሇለሉሊላሌልሎሏሐሑሒሓሔሕሖሗመሙሚማሜምሞሟ +
    1220 ሠሡሢሣሤሥሦሧረሩሪራሬርሮሯሰሱሲሳሴስሶሷሸሹሺሻሼሽሾሿ +
    1240 ቀቁቂቃቄቅቆቇቈ቉ቊቋቌቍ቎቏ቐቑቒቓቔቕቖ቗ቘ቙ቚቛቜቝ቞቟ +
    1260 በቡቢባቤብቦቧቨቩቪቫቬቭቮቯተቱቲታቴትቶቷቸቹቺቻቼችቾቿ +
    1280 ኀኁኂኃኄኅኆኇኈ኉ኊኋኌኍ኎኏ነኑኒናኔንኖኗኘኙኚኛኜኝኞኟ +
    12A0 አኡኢኣኤእኦኧከኩኪካኬክኮኯኰ኱ኲኳኴኵ኶኷ኸኹኺኻኼኽኾ኿ +
    12C0 ዀ዁ዂዃዄዅ዆዇ወዉዊዋዌውዎዏዐዑዒዓዔዕዖ዗ዘዙዚዛዜዝዞዟ +
    12E0 ዠዡዢዣዤዥዦዧየዩዪያዬይዮዯደዱዲዳዴድዶዷዸዹዺዻዼዽዾዿ +
    1300 ጀጁጂጃጄጅጆጇገጉጊጋጌግጎጏጐ጑ጒጓጔጕ጖጗ጘጙጚጛጜጝጞጟ +
    1320 ጠጡጢጣጤጥጦጧጨጩጪጫጬጭጮጯጰጱጲጳጴጵጶጷጸጹጺጻጼጽጾጿ +
    1340 ፀፁፂፃፄፅፆፇፈፉፊፋፌፍፎፏፐፑፒፓፔፕፖፗፘፙፚ፛፜፝፞፟ +
    1360 ፠፡።፣፤፥፦፧፨፩፪፫፬፭፮፯፰፱፲፳፴፵፶፷፸፹፺፻፼፽፾፿ +
    1380 ᎀᎁᎂᎃᎄᎅᎆᎇᎈᎉᎊᎋᎌᎍᎎᎏ᎐᎑᎒᎓᎔᎕᎖᎗᎘᎙᎚᎛᎜᎝᎞᎟ +
    13A0 ᎠᎡᎢᎣᎤᎥᎦᎧᎨᎩᎪᎫᎬᎭᎮᎯᎰᎱᎲᎳᎴᎵᎶᎷᎸᎹᎺᎻᎼᎽᎾᎿ +
    13C0 ᏀᏁᏂᏃᏄᏅᏆᏇᏈᏉᏊᏋᏌᏍᏎᏏᏐᏑᏒᏓᏔᏕᏖᏗᏘᏙᏚᏛᏜᏝᏞᏟ +
    13E0 ᏠᏡᏢᏣᏤᏥᏦᏧᏨᏩᏪᏫᏬᏭᏮᏯᏰᏱᏲᏳᏴᏵ᏶᏷ᏸᏹᏺᏻᏼᏽ᏾᏿ +
    1400 ᐀ᐁᐂᐃᐄᐅᐆᐇᐈᐉᐊᐋᐌᐍᐎᐏᐐᐑᐒᐓᐔᐕᐖᐗᐘᐙᐚᐛᐜᐝᐞᐟ +
    1420 ᐠᐡᐢᐣᐤᐥᐦᐧᐨᐩᐪᐫᐬᐭᐮᐯᐰᐱᐲᐳᐴᐵᐶᐷᐸᐹᐺᐻᐼᐽᐾᐿ +
    1440 ᑀᑁᑂᑃᑄᑅᑆᑇᑈᑉᑊᑋᑌᑍᑎᑏᑐᑑᑒᑓᑔᑕᑖᑗᑘᑙᑚᑛᑜᑝᑞᑟ +
    1460 ᑠᑡᑢᑣᑤᑥᑦᑧᑨᑩᑪᑫᑬᑭᑮᑯᑰᑱᑲᑳᑴᑵᑶᑷᑸᑹᑺᑻᑼᑽᑾᑿ +
    1480 ᒀᒁᒂᒃᒄᒅᒆᒇᒈᒉᒊᒋᒌᒍᒎᒏᒐᒑᒒᒓᒔᒕᒖᒗᒘᒙᒚᒛᒜᒝᒞᒟ +
    14A0 ᒠᒡᒢᒣᒤᒥᒦᒧᒨᒩᒪᒫᒬᒭᒮᒯᒰᒱᒲᒳᒴᒵᒶᒷᒸᒹᒺᒻᒼᒽᒾᒿ +
    14C0 ᓀᓁᓂᓃᓄᓅᓆᓇᓈᓉᓊᓋᓌᓍᓎᓏᓐᓑᓒᓓᓔᓕᓖᓗᓘᓙᓚᓛᓜᓝᓞᓟ +
    14E0 ᓠᓡᓢᓣᓤᓥᓦᓧᓨᓩᓪᓫᓬᓭᓮᓯᓰᓱᓲᓳᓴᓵᓶᓷᓸᓹᓺᓻᓼᓽᓾᓿ +
    1500 ᔀᔁᔂᔃᔄᔅᔆᔇᔈᔉᔊᔋᔌᔍᔎᔏᔐᔑᔒᔓᔔᔕᔖᔗᔘᔙᔚᔛᔜᔝᔞᔟ +
    1520 ᔠᔡᔢᔣᔤᔥᔦᔧᔨᔩᔪᔫᔬᔭᔮᔯᔰᔱᔲᔳᔴᔵᔶᔷᔸᔹᔺᔻᔼᔽᔾᔿ +
    1540 ᕀᕁᕂᕃᕄᕅᕆᕇᕈᕉᕊᕋᕌᕍᕎᕏᕐᕑᕒᕓᕔᕕᕖᕗᕘᕙᕚᕛᕜᕝᕞᕟ +
    1560 ᕠᕡᕢᕣᕤᕥᕦᕧᕨᕩᕪᕫᕬᕭᕮᕯᕰᕱᕲᕳᕴᕵᕶᕷᕸᕹᕺᕻᕼᕽᕾᕿ +
    1580 ᖀᖁᖂᖃᖄᖅᖆᖇᖈᖉᖊᖋᖌᖍᖎᖏᖐᖑᖒᖓᖔᖕᖖᖗᖘᖙᖚᖛᖜᖝᖞᖟ +
    15A0 ᖠᖡᖢᖣᖤᖥᖦᖧᖨᖩᖪᖫᖬᖭᖮᖯᖰᖱᖲᖳᖴᖵᖶᖷᖸᖹᖺᖻᖼᖽᖾᖿ +
    15C0 ᗀᗁᗂᗃᗄᗅᗆᗇᗈᗉᗊᗋᗌᗍᗎᗏᗐᗑᗒᗓᗔᗕᗖᗗᗘᗙᗚᗛᗜᗝᗞᗟ +
    15E0 ᗠᗡᗢᗣᗤᗥᗦᗧᗨᗩᗪᗫᗬᗭᗮᗯᗰᗱᗲᗳᗴᗵᗶᗷᗸᗹᗺᗻᗼᗽᗾᗿ +
    1600 ᘀᘁᘂᘃᘄᘅᘆᘇᘈᘉᘊᘋᘌᘍᘎᘏᘐᘑᘒᘓᘔᘕᘖᘗᘘᘙᘚᘛᘜᘝᘞᘟ +
    1620 ᘠᘡᘢᘣᘤᘥᘦᘧᘨᘩᘪᘫᘬᘭᘮᘯᘰᘱᘲᘳᘴᘵᘶᘷᘸᘹᘺᘻᘼᘽᘾᘿ +
    1640 ᙀᙁᙂᙃᙄᙅᙆᙇᙈᙉᙊᙋᙌᙍᙎᙏᙐᙑᙒᙓᙔᙕᙖᙗᙘᙙᙚᙛᙜᙝᙞᙟ +
    1660 ᙠᙡᙢᙣᙤᙥᙦᙧᙨᙩᙪᙫᙬ᙭᙮ᙯᙰᙱᙲᙳᙴᙵᙶᙷᙸᙹᙺᙻᙼᙽᙾᙿ +
    1680  ᚁᚂᚃᚄᚅᚆᚇᚈᚉᚊᚋᚌᚍᚎᚏᚐᚑᚒᚓᚔᚕᚖᚗᚘᚙᚚ᚛᚜᚝᚞᚟ +
    16A0 ᚠᚡᚢᚣᚤᚥᚦᚧᚨᚩᚪᚫᚬᚭᚮᚯᚰᚱᚲᚳᚴᚵᚶᚷᚸᚹᚺᚻᚼᚽᚾᚿ +
    16C0 ᛀᛁᛂᛃᛄᛅᛆᛇᛈᛉᛊᛋᛌᛍᛎᛏᛐᛑᛒᛓᛔᛕᛖᛗᛘᛙᛚᛛᛜᛝᛞᛟ +
    16E0 ᛠᛡᛢᛣᛤᛥᛦᛧᛨᛩᛪ᛫᛬᛭ᛮᛯᛰᛱᛲᛳᛴᛵᛶᛷᛸ᛹᛺᛻᛼᛽᛾᛿ +
    1700 ᜀᜁᜂᜃᜄᜅᜆᜇᜈᜉᜊᜋᜌᜍᜎᜏᜐᜑᜒᜓ᜔᜕᜖᜗᜘᜙᜚᜛᜜᜝᜞ᜟ +
    1720 ᜠᜡᜢᜣᜤᜥᜦᜧᜨᜩᜪᜫᜬᜭᜮᜯᜰᜱᜲᜳ᜴᜵᜶᜷᜸᜹᜺᜻᜼᜽᜾᜿ +
    1740 ᝀᝁᝂᝃᝄᝅᝆᝇᝈᝉᝊᝋᝌᝍᝎᝏᝐᝑᝒᝓ᝔᝕᝖᝗᝘᝙᝚᝛᝜᝝᝞᝟ +
    1760 ᝠᝡᝢᝣᝤᝥᝦᝧᝨᝩᝪᝫᝬ᝭ᝮᝯᝰ᝱ᝲᝳ᝴᝵᝶᝷᝸᝹᝺᝻᝼᝽᝾᝿ +
    1780 កខគឃងចឆជឈញដឋឌឍណតថទធនបផពភមយរលវឝឞស +
    17A0 ហឡអឣឤឥឦឧឨឩឪឫឬឭឮឯឰឱឲឳ឴឵ាិីឹឺុូួើឿ +
    17C0 ៀេែៃោៅំះៈ៉៊់៌៍៎៏័៑្៓។៕៖ៗ៘៙៚៛ៜ៝៞៟ +
    17E0 ០១២៣៤៥៦៧៨៩៪៫៬៭៮៯៰៱៲៳៴៵៶៷៸៹៺៻៼៽៾៿ +
    1800 ᠀᠁᠂᠃᠄᠅᠆᠇᠈᠉᠊᠋᠌᠍᠎᠏᠐᠑᠒᠓᠔᠕᠖᠗᠘᠙᠚᠛᠜᠝᠞᠟ +
    1820 ᠠᠡᠢᠣᠤᠥᠦᠧᠨᠩᠪᠫᠬᠭᠮᠯᠰᠱᠲᠳᠴᠵᠶᠷᠸᠹᠺᠻᠼᠽᠾᠿ +
    1840 ᡀᡁᡂᡃᡄᡅᡆᡇᡈᡉᡊᡋᡌᡍᡎᡏᡐᡑᡒᡓᡔᡕᡖᡗᡘᡙᡚᡛᡜᡝᡞᡟ +
    1860 ᡠᡡᡢᡣᡤᡥᡦᡧᡨᡩᡪᡫᡬᡭᡮᡯᡰᡱᡲᡳᡴᡵᡶᡷᡸ᡹᡺᡻᡼᡽᡾᡿ +
    1880 ᢀᢁᢂᢃᢄᢅᢆᢇᢈᢉᢊᢋᢌᢍᢎᢏᢐᢑᢒᢓᢔᢕᢖᢗᢘᢙᢚᢛᢜᢝᢞᢟ +
    18A0 ᢠᢡᢢᢣᢤᢥᢦᢧᢨᢩᢪ᢫᢬᢭᢮᢯ᢰᢱᢲᢳᢴᢵᢶᢷᢸᢹᢺᢻᢼᢽᢾᢿ +
    18C0 ᣀᣁᣂᣃᣄᣅᣆᣇᣈᣉᣊᣋᣌᣍᣎᣏᣐᣑᣒᣓᣔᣕᣖᣗᣘᣙᣚᣛᣜᣝᣞᣟ +
    18E0 ᣠᣡᣢᣣᣤᣥᣦᣧᣨᣩᣪᣫᣬᣭᣮᣯᣰᣱᣲᣳᣴᣵ᣶᣷᣸᣹᣺᣻᣼᣽᣾᣿ +
    1900 ᤀᤁᤂᤃᤄᤅᤆᤇᤈᤉᤊᤋᤌᤍᤎᤏᤐᤑᤒᤓᤔᤕᤖᤗᤘᤙᤚᤛᤜᤝᤞ᤟ +
    1920 ᤠᤡᤢᤣᤤᤥᤦᤧᤨᤩᤪᤫ᤬᤭᤮᤯ᤰᤱᤲᤳᤴᤵᤶᤷᤸ᤻᤹᤺᤼᤽᤾᤿ +
    1940 ᥀᥁᥂᥃᥄᥅᥆᥇᥈᥉᥊᥋᥌᥍᥎᥏ᥐᥑᥒᥓᥔᥕᥖᥗᥘᥙᥚᥛᥜᥝᥞᥟ +
    1960 ᥠᥡᥢᥣᥤᥥᥦᥧᥨᥩᥪᥫᥬᥭ᥮᥯ᥰᥱᥲᥳᥴ᥵᥶᥷᥸᥹᥺᥻᥼᥽᥾᥿ +
    1980 ᦀᦁᦂᦃᦄᦅᦆᦇᦈᦉᦊᦋᦌᦍᦎᦏᦐᦑᦒᦓᦔᦕᦖᦗᦘᦙᦚᦛᦜᦝᦞᦟ +
    19A0 ᦠᦡᦢᦣᦤᦥᦦᦧᦨᦩᦪᦫ᦬᦭᦮᦯ᦰᦱᦲᦳᦴᦵᦶᦷᦸᦹᦺᦻᦼᦽᦾᦿ +
    19C0 ᧀᧁᧂᧃᧄᧅᧆᧇᧈᧉ᧊᧋᧌᧍᧎᧏᧐᧑᧒᧓᧔᧕᧖᧗᧘᧙᧚᧛᧜᧝᧞᧟ +
    19E0 ᧠᧡᧢᧣᧤᧥᧦᧧᧨᧩᧪᧫᧬᧭᧮᧯᧰᧱᧲᧳᧴᧵᧶᧷᧸᧹᧺᧻᧼᧽᧾᧿ +
    1A00 ᨀᨁᨂᨃᨄᨅᨆᨇᨈᨉᨊᨋᨌᨍᨎᨏᨐᨑᨒᨓᨔᨕᨖᨘᨗᨙᨚᨛ᨜᨝᨞᨟ +
    1A20 ᨠᨡᨢᨣᨤᨥᨦᨧᨨᨩᨪᨫᨬᨭᨮᨯᨰᨱᨲᨳᨴᨵᨶᨷᨸᨹᨺᨻᨼᨽᨾᨿ +
    1A40 ᩀᩁᩂᩃᩄᩅᩆᩇᩈᩉᩊᩋᩌᩍᩎᩏᩐᩑᩒᩓᩔᩕᩖᩗᩘᩙᩚᩛᩜᩝᩞ᩟ +
    1A60 ᩠ᩡᩢᩣᩤᩥᩦᩧᩨᩩᩪᩫᩬᩭᩮᩯᩰᩱᩲᩳᩴ᩵᩶᩷᩸᩹᩺᩻᩼᩽᩾᩿ +
    1A80 ᪀᪁᪂᪃᪄᪅᪆᪇᪈᪉᪊᪋᪌᪍᪎᪏᪐᪑᪒᪓᪔᪕᪖᪗᪘᪙᪚᪛᪜᪝᪞᪟ +
    1AA0 ᪠᪡᪢᪣᪤᪥᪦ᪧ᪨᪩᪪᪫᪬᪭᪮᪯᪵᪶᪷᪸᪹᪺᪽᪰᪱᪲᪳᪴᪻᪼᪾ᪿ +
    1AC0 ᫀ᫃᫄᫊᫁᫂᫅᫆᫇᫈᫉᫋ᫌᫍᫎ᫏᫐᫑᫒᫓᫔᫕᫖᫗᫘᫙᫚᫛᫜᫝᫞᫟ +
    1AE0 ᫠᫡᫢᫣᫤᫥᫦᫧᫨᫩᫪᫫᫬᫭᫮᫯᫰᫱᫲᫳᫴᫵᫶᫷᫸᫹᫺᫻᫼᫽᫾᫿ +
    1B00 ᬀᬁᬂᬃᬄᬅᬆᬇᬈᬉᬊᬋᬌᬍᬎᬏᬐᬑᬒᬓᬔᬕᬖᬗᬘᬙᬚᬛᬜᬝᬞᬟ +
    1B20 ᬠᬡᬢᬣᬤᬥᬦᬧᬨᬩᬪᬫᬬᬭᬮᬯᬰᬱᬲᬳ᬴ᬵᬶᬷᬸᬹᬺᬻᬼᬽᬾᬿ +
    1B40 ᭀᭁᭂᭃ᭄ᭅᭆᭇᭈᭉᭊᭋᭌ᭍᭎᭏᭐᭑᭒᭓᭔᭕᭖᭗᭘᭙᭚᭛᭜᭝᭞᭟ +
    1B60 ᭠᭡᭢᭣᭤᭥᭦᭧᭨᭩᭪᭬᭫᭭᭮᭯᭰᭱᭲᭳᭴᭵᭶᭷᭸᭹᭺᭻᭼᭽᭾᭿ +
    1B80 ᮀᮁᮂᮃᮄᮅᮆᮇᮈᮉᮊᮋᮌᮍᮎᮏᮐᮑᮒᮓᮔᮕᮖᮗᮘᮙᮚᮛᮜᮝᮞᮟ +
    1BA0 ᮠᮡᮢᮣᮤᮥᮦᮧᮨᮩ᮪᮫ᮬᮭᮮᮯ᮰᮱᮲᮳᮴᮵᮶᮷᮸᮹ᮺᮻᮼᮽᮾᮿ +
    1BC0 ᯀᯁᯂᯃᯄᯅᯆᯇᯈᯉᯊᯋᯌᯍᯎᯏᯐᯑᯒᯓᯔᯕᯖᯗᯘᯙᯚᯛᯜᯝᯞᯟ +
    1BE0 ᯠᯡᯢᯣᯤᯥ᯦ᯧᯨᯩᯪᯫᯬᯭᯮᯯᯰᯱ᯲᯳᯴᯵᯶᯷᯸᯹᯺᯻᯼᯽᯾᯿ +
    1C00 ᰀᰁᰂᰃᰄᰅᰆᰇᰈᰉᰊᰋᰌᰍᰎᰏᰐᰑᰒᰓᰔᰕᰖᰗᰘᰙᰚᰛᰜᰝᰞᰟ +
    1C20 ᰠᰡᰢᰣᰤᰥᰦᰧᰨᰩᰪᰫᰬᰭᰮᰯᰰᰱᰲᰳᰴᰵᰶ᰷᰸᰹᰺᰻᰼᰽᰾᰿ +
    1C40 ᱀᱁᱂᱃᱄᱅᱆᱇᱈᱉᱊᱋᱌ᱍᱎᱏ᱐᱑᱒᱓᱔᱕᱖᱗᱘᱙ᱚᱛᱜᱝᱞᱟ +
    1C60 ᱠᱡᱢᱣᱤᱥᱦᱧᱨᱩᱪᱫᱬᱭᱮᱯᱰᱱᱲᱳᱴᱵᱶᱷᱸᱹᱺᱻᱼᱽ᱾᱿ +
    1C80 ᲀᲁᲂᲃᲄᲅᲆᲇᲈᲉᲊ᲋᲌᲍᲎᲏ᲐᲑᲒᲓᲔᲕᲖᲗᲘᲙᲚᲛᲜᲝᲞᲟ +
    1CA0 ᲠᲡᲢᲣᲤᲥᲦᲧᲨᲩᲪᲫᲬᲭᲮᲯᲰᲱᲲᲳᲴᲵᲶᲷᲸᲹᲺ᲻᲼ᲽᲾᲿ +
    1CC0 ᳀᳁᳂᳃᳄᳅᳆᳇᳈᳉᳊᳋᳌᳍᳎᳏᳐᳑᳒᳓᳔᳕᳖᳗᳘᳙᳜᳝᳞᳟᳚᳛ +
    1CE0 ᳠᳡᳢᳣᳤᳥᳦᳧᳨ᳩᳪᳫᳬ᳭ᳮᳯᳰᳱᳲᳳ᳴ᳵᳶ᳷᳸᳹ᳺ᳻᳼᳽᳾᳿ +
    1D00 ᴀᴁᴂᴃᴄᴅᴆᴇᴈᴉᴊᴋᴌᴍᴎᴏᴐᴑᴒᴓᴔᴕᴖᴗᴘᴙᴚᴛᴜᴝᴞᴟ +
    1D20 ᴠᴡᴢᴣᴤᴥᴦᴧᴨᴩᴪᴫᴬᴭᴮᴯᴰᴱᴲᴳᴴᴵᴶᴷᴸᴹᴺᴻᴼᴽᴾᴿ +
    1D40 ᵀᵁᵂᵃᵄᵅᵆᵇᵈᵉᵊᵋᵌᵍᵎᵏᵐᵑᵒᵓᵔᵕᵖᵗᵘᵙᵚᵛᵜᵝᵞᵟ +
    1D60 ᵠᵡᵢᵣᵤᵥᵦᵧᵨᵩᵪᵫᵬᵭᵮᵯᵰᵱᵲᵳᵴᵵᵶᵷᵸᵹᵺᵻᵼᵽᵾᵿ +
    1D80 ᶀᶁᶂᶃᶄᶅᶆᶇᶈᶉᶊᶋᶌᶍᶎᶏᶐᶑᶒᶓᶔᶕᶖᶗᶘᶙᶚᶛᶜᶝᶞᶟ +
    1DA0 ᶠᶡᶢᶣᶤᶥᶦᶧᶨᶩᶪᶫᶬᶭᶮᶯᶰᶱᶲᶳᶴᶵᶶᶷᶸᶹᶺᶻᶼᶽᶾᶿ +
    1DC0 ᷐᷎᷂᷊᷏᷀᷁᷃᷄᷅᷆᷇᷈᷉᷋᷌᷑᷒ᷓᷔᷕᷖᷗᷘᷙᷚᷛᷜᷝᷞᷟ᷍ +
    1DE0 ᷺᷹᷽᷿᷷᷸ᷠᷡᷢᷣᷤᷥᷦᷧᷨᷩᷪᷫᷬᷭᷮᷯᷰᷱᷲᷳᷴ᷵᷻᷾᷶᷼ +
    1E00 ḀḁḂḃḄḅḆḇḈḉḊḋḌḍḎḏḐḑḒḓḔḕḖḗḘḙḚḛḜḝḞḟ +
    1E20 ḠḡḢḣḤḥḦḧḨḩḪḫḬḭḮḯḰḱḲḳḴḵḶḷḸḹḺḻḼḽḾḿ +
    1E40 ṀṁṂṃṄṅṆṇṈṉṊṋṌṍṎṏṐṑṒṓṔṕṖṗṘṙṚṛṜṝṞṟ +
    1E60 ṠṡṢṣṤṥṦṧṨṩṪṫṬṭṮṯṰṱṲṳṴṵṶṷṸṹṺṻṼṽṾṿ +
    1E80 ẀẁẂẃẄẅẆẇẈẉẊẋẌẍẎẏẐẑẒẓẔẕẖẗẘẙẚẛẜẝẞẟ +
    1EA0 ẠạẢảẤấẦầẨẩẪẫẬậẮắẰằẲẳẴẵẶặẸẹẺẻẼẽẾế +
    1EC0 ỀềỂểỄễỆệỈỉỊịỌọỎỏỐốỒồỔổỖỗỘộỚớỜờỞở +
    1EE0 ỠỡỢợỤụỦủỨứỪừỬửỮữỰựỲỳỴỵỶỷỸỹỺỻỼỽỾỿ +
    1F00 ἀἁἂἃἄἅἆἇἈἉἊἋἌἍἎἏἐἑἒἓἔἕ἖἗ἘἙἚἛἜἝ἞἟ +
    1F20 ἠἡἢἣἤἥἦἧἨἩἪἫἬἭἮἯἰἱἲἳἴἵἶἷἸἹἺἻἼἽἾἿ +
    1F40 ὀὁὂὃὄὅ὆὇ὈὉὊὋὌὍ὎὏ὐὑὒὓὔὕὖὗ὘Ὑ὚Ὓ὜Ὕ὞Ὗ +
    1F60 ὠὡὢὣὤὥὦὧὨὩὪὫὬὭὮὯὰάὲέὴήὶίὸόὺύὼώ὾὿ +
    1F80 ᾀᾁᾂᾃᾄᾅᾆᾇᾈᾉᾊᾋᾌᾍᾎᾏᾐᾑᾒᾓᾔᾕᾖᾗᾘᾙᾚᾛᾜᾝᾞᾟ +
    1FA0 ᾠᾡᾢᾣᾤᾥᾦᾧᾨᾩᾪᾫᾬᾭᾮᾯᾰᾱᾲᾳᾴ᾵ᾶᾷᾸᾹᾺΆᾼ᾽ι᾿ +
    1FC0 ῀῁ῂῃῄ῅ῆῇῈΈῊΉῌ῍῎῏ῐῑῒΐ῔῕ῖῗῘῙῚΊ῜῝῞῟ +
    1FE0 ῠῡῢΰῤῥῦῧῨῩῪΎῬ῭΅`῰῱ῲῳῴ῵ῶῷῸΌῺΏῼ´῾῿ +
    2000            ​‌‍‎‏‐‑‒–—―‖‗‘’‚‛“”„‟ +
    2020 †‡•‣․‥…‧

‪‫‬‭‮ ‰‱′″‴‵‶‷‸‹›※‼‽‾‿ +
    2040 ⁀⁁⁂⁃⁄⁅⁆⁇⁈⁉⁊⁋⁌⁍⁎⁏⁐⁑⁒⁓⁔⁕⁖⁗⁘⁙⁚⁛⁜⁝⁞  +
    2060 ⁠⁡⁢⁣⁤⁥⁦⁧⁨⁩⁰ⁱ⁲⁳⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁿ +
    2080 ₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎₏ₐₑₒₓₔₕₖₗₘₙₚₛₜ₝₞₟ +
    20A0 ₠₡₢₣₤₥₦₧₨₩₪₫€₭₮₯₰₱₲₳₴₵₶₷₸₹₺₻₼₽₾₿ +
    20C0 ⃀⃁⃂⃃⃄⃅⃆⃇⃈⃉⃊⃋⃌⃍⃎⃏⃒⃓⃘⃙⃚⃐⃑⃔⃕⃖⃗⃛⃜⃝⃞⃟ +
    20E0 ⃠⃡⃢⃣⃤⃥⃦⃪⃫⃨⃬⃭⃮⃯⃧⃩⃰⃱⃲⃳⃴⃵⃶⃷⃸⃹⃺⃻⃼⃽⃾⃿ +
    2100 ℀℁ℂ℃℄℅℆ℇ℈℉ℊℋℌℍℎℏℐℑℒℓ℔ℕ№℗℘ℙℚℛℜℝ℞℟ +
    2120 ℠℡™℣ℤ℥Ω℧ℨ℩KÅℬℭ℮ℯℰℱℲℳℴℵℶℷℸℹ℺℻ℼℽℾℿ +
    2140 ⅀⅁⅂⅃⅄ⅅⅆⅇⅈⅉ⅊⅋⅌⅍ⅎ⅏⅐⅑⅒⅓⅔⅕⅖⅗⅘⅙⅚⅛⅜⅝⅞⅟ +
    2160 ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫⅬⅭⅮⅯⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹⅺⅻⅼⅽⅾⅿ +
    2180 ↀↁↂↃↄↅↆↇↈ↉↊↋↌↍↎↏←↑→↓↔↕↖↗↘↙↚↛↜↝↞↟ +
    21A0 ↠↡↢↣↤↥↦↧↨↩↪↫↬↭↮↯↰↱↲↳↴↵↶↷↸↹↺↻↼↽↾↿ +
    21C0 ⇀⇁⇂⇃⇄⇅⇆⇇⇈⇉⇊⇋⇌⇍⇎⇏⇐⇑⇒⇓⇔⇕⇖⇗⇘⇙⇚⇛⇜⇝⇞⇟ +
    21E0 ⇠⇡⇢⇣⇤⇥⇦⇧⇨⇩⇪⇫⇬⇭⇮⇯⇰⇱⇲⇳⇴⇵⇶⇷⇸⇹⇺⇻⇼⇽⇾⇿ +
    2200 ∀∁∂∃∄∅∆∇∈∉∊∋∌∍∎∏∐∑−∓∔∕∖∗∘∙√∛∜∝∞∟ +
    2220 ∠∡∢∣∤∥∦∧∨∩∪∫∬∭∮∯∰∱∲∳∴∵∶∷∸∹∺∻∼∽∾∿ +
    2240 ≀≁≂≃≄≅≆≇≈≉≊≋≌≍≎≏≐≑≒≓≔≕≖≗≘≙≚≛≜≝≞≟ +
    2260 ≠≡≢≣≤≥≦≧≨≩≪≫≬≭≮≯≰≱≲≳≴≵≶≷≸≹≺≻≼≽≾≿ +
    2280 ⊀⊁⊂⊃⊄⊅⊆⊇⊈⊉⊊⊋⊌⊍⊎⊏⊐⊑⊒⊓⊔⊕⊖⊗⊘⊙⊚⊛⊜⊝⊞⊟ +
    22A0 ⊠⊡⊢⊣⊤⊥⊦⊧⊨⊩⊪⊫⊬⊭⊮⊯⊰⊱⊲⊳⊴⊵⊶⊷⊸⊹⊺⊻⊼⊽⊾⊿ +
    22C0 ⋀⋁⋂⋃⋄⋅⋆⋇⋈⋉⋊⋋⋌⋍⋎⋏⋐⋑⋒⋓⋔⋕⋖⋗⋘⋙⋚⋛⋜⋝⋞⋟ +
    22E0 ⋠⋡⋢⋣⋤⋥⋦⋧⋨⋩⋪⋫⋬⋭⋮⋯⋰⋱⋲⋳⋴⋵⋶⋷⋸⋹⋺⋻⋼⋽⋾⋿ +
    2300 ⌀⌁⌂⌃⌄⌅⌆⌇⌈⌉⌊⌋⌌⌍⌎⌏⌐⌑⌒⌓⌔⌕⌖⌗⌘⌙⌚⌛⌜⌝⌞⌟ +
    2320 ⌠⌡⌢⌣⌤⌥⌦⌧⌨〈〉⌫⌬⌭⌮⌯⌰⌱⌲⌳⌴⌵⌶⌷⌸⌹⌺⌻⌼⌽⌾⌿ +
    2340 ⍀⍁⍂⍃⍄⍅⍆⍇⍈⍉⍊⍋⍌⍍⍎⍏⍐⍑⍒⍓⍔⍕⍖⍗⍘⍙⍚⍛⍜⍝⍞⍟ +
    2360 ⍠⍡⍢⍣⍤⍥⍦⍧⍨⍩⍪⍫⍬⍭⍮⍯⍰⍱⍲⍳⍴⍵⍶⍷⍸⍹⍺⍻⍼⍽⍾⍿ +
    2380 ⎀⎁⎂⎃⎄⎅⎆⎇⎈⎉⎊⎋⎌⎍⎎⎏⎐⎑⎒⎓⎔⎕⎖⎗⎘⎙⎚⎛⎜⎝⎞⎟ +
    23A0 ⎠⎡⎢⎣⎤⎥⎦⎧⎨⎩⎪⎫⎬⎭⎮⎯⎰⎱⎲⎳⎴⎵⎶⎷⎸⎹⎺⎻⎼⎽⎾⎿ +
    23C0 ⏀⏁⏂⏃⏄⏅⏆⏇⏈⏉⏊⏋⏌⏍⏎⏏⏐⏑⏒⏓⏔⏕⏖⏗⏘⏙⏚⏛⏜⏝⏞⏟ +
    23E0 ⏠⏡⏢⏣⏤⏥⏦⏧⏨⏩⏪⏫⏬⏭⏮⏯⏰⏱⏲⏳⏴⏵⏶⏷⏸⏹⏺⏻⏼⏽⏾⏿ +
    2400 ␀␁␂␃␄␅␆␇␈␉␊␋␌␍␎␏␐␑␒␓␔␕␖␗␘␙␚␛␜␝␞␟ +
    2420 ␠␡␢␣␤␥␦␧␨␩␪␫␬␭␮␯␰␱␲␳␴␵␶␷␸␹␺␻␼␽␾␿ +
    2440 ⑀⑁⑂⑃⑄⑅⑆⑇⑈⑉⑊⑋⑌⑍⑎⑏⑐⑑⑒⑓⑔⑕⑖⑗⑘⑙⑚⑛⑜⑝⑞⑟ +
    2460 ①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿ +
    2480 ⒀⒁⒂⒃⒄⒅⒆⒇⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖⒗⒘⒙⒚⒛⒜⒝⒞⒟ +
    24A0 ⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵ⒶⒷⒸⒹⒺⒻⒼⒽⒾⒿ +
    24C0 ⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉⓊⓋⓌⓍⓎⓏⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟ +
    24E0 ⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ⓪⓫⓬⓭⓮⓯⓰⓱⓲⓳⓴⓵⓶⓷⓸⓹⓺⓻⓼⓽⓾⓿ +
    2500 ─━│┃┄┅┆┇┈┉┊┋┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟ +
    2520 ┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿ +
    2540 ╀╁╂╃╄╅╆╇╈╉╊╋╌╍╎╏═║╒╓╔╕╖╗╘╙╚╛╜╝╞╟ +
    2560 ╠╡╢╣╤╥╦╧╨╩╪╫╬╭╮╯╰╱╲╳╴╵╶╷╸╹╺╻╼╽╾╿ +
    2580 ▀▁▂▃▄▅▆▇█▉▊▋▌▍▎▏▐░▒▓▔▕▖▗▘▙▚▛▜▝▞▟ +
    25A0 ■□▢▣▤▥▦▧▨▩▪▫▬▭▮▯▰▱▲△▴▵▶▷▸▹►▻▼▽▾▿ +
    25C0 ◀◁◂◃◄◅◆◇◈◉◊○◌◍◎●◐◑◒◓◔◕◖◗◘◙◚◛◜◝◞◟ +
    25E0 ◠◡◢◣◤◥◦◧◨◩◪◫◬◭◮◯◰◱◲◳◴◵◶◷◸◹◺◻◼◽◾◿ +
    2600 ☀☁☂☃☄★☆☇☈☉☊☋☌☍☎☏☐☑☒☓☔☕☖☗☘☙☚☛☜☝☞☟ +
    2620 ☠☡☢☣☤☥☦☧☨☩☪☫☬☭☮☯☰☱☲☳☴☵☶☷☸☹☺☻☼☽☾☿ +
    2640 ♀♁♂♃♄♅♆♇♈♉♊♋♌♍♎♏♐♑♒♓♔♕♖♗♘♙♚♛♜♝♞♟ +
    2660 ♠♡♢♣♤♥♦♧♨♩♪♫♬♭♮♯♰♱♲♳♴♵♶♷♸♹♺♻♼♽♾♿ +
    2680 ⚀⚁⚂⚃⚄⚅⚆⚇⚈⚉⚊⚋⚌⚍⚎⚏⚐⚑⚒⚓⚔⚕⚖⚗⚘⚙⚚⚛⚜⚝⚞⚟ +
    26A0 ⚠⚡⚢⚣⚤⚥⚦⚧⚨⚩⚪⚫⚬⚭⚮⚯⚰⚱⚲⚳⚴⚵⚶⚷⚸⚹⚺⚻⚼⚽⚾⚿ +
    26C0 ⛀⛁⛂⛃⛄⛅⛆⛇⛈⛉⛊⛋⛌⛍⛎⛏⛐⛑⛒⛓⛔⛕⛖⛗⛘⛙⛚⛛⛜⛝⛞⛟ +
    26E0 ⛠⛡⛢⛣⛤⛥⛦⛧⛨⛩⛪⛫⛬⛭⛮⛯⛰⛱⛲⛳⛴⛵⛶⛷⛸⛹⛺⛻⛼⛽⛾⛿ +
    2700 ✀✁✂✃✄✅✆✇✈✉✊✋✌✍✎✏✐✑✒✓✔✕✖✗✘✙✚✛✜✝✞✟ +
    2720 ✠✡✢✣✤✥✦✧✨✩✪✫✬✭✮✯✰✱✲✳✴✵✶✷✸✹✺✻✼✽✾✿ +
    2740 ❀❁❂❃❄❅❆❇❈❉❊❋❌❍❎❏❐❑❒❓❔❕❖❗❘❙❚❛❜❝❞❟ +
    2760 ❠❡❢❣❤❥❦❧❨❩❪❫❬❭❮❯❰❱❲❳❴❵❶❷❸❹❺❻❼❽❾❿ +
    2780 ➀➁➂➃➄➅➆➇➈➉➊➋➌➍➎➏➐➑➒➓➔➕➖➗➘➙➚➛➜➝➞➟ +
    27A0 ➠➡➢➣➤➥➦➧➨➩➪➫➬➭➮➯➰➱➲➳➴➵➶➷➸➹➺➻➼➽➾➿ +
    27C0 ⟀⟁⟂⟃⟄⟅⟆⟇⟈⟉⟊⟋⟌⟍⟎⟏⟐⟑⟒⟓⟔⟕⟖⟗⟘⟙⟚⟛⟜⟝⟞⟟ +
    27E0 ⟠⟡⟢⟣⟤⟥⟦⟧⟨⟩⟪⟫⟬⟭⟮⟯⟰⟱⟲⟳⟴⟵⟶⟷⟸⟹⟺⟻⟼⟽⟾⟿ +
    2800 ⠀⠁⠂⠃⠄⠅⠆⠇⠈⠉⠊⠋⠌⠍⠎⠏⠐⠑⠒⠓⠔⠕⠖⠗⠘⠙⠚⠛⠜⠝⠞⠟ +
    2820 ⠠⠡⠢⠣⠤⠥⠦⠧⠨⠩⠪⠫⠬⠭⠮⠯⠰⠱⠲⠳⠴⠵⠶⠷⠸⠹⠺⠻⠼⠽⠾⠿ +
    2840 ⡀⡁⡂⡃⡄⡅⡆⡇⡈⡉⡊⡋⡌⡍⡎⡏⡐⡑⡒⡓⡔⡕⡖⡗⡘⡙⡚⡛⡜⡝⡞⡟ +
    2860 ⡠⡡⡢⡣⡤⡥⡦⡧⡨⡩⡪⡫⡬⡭⡮⡯⡰⡱⡲⡳⡴⡵⡶⡷⡸⡹⡺⡻⡼⡽⡾⡿ +
    2880 ⢀⢁⢂⢃⢄⢅⢆⢇⢈⢉⢊⢋⢌⢍⢎⢏⢐⢑⢒⢓⢔⢕⢖⢗⢘⢙⢚⢛⢜⢝⢞⢟ +
    28A0 ⢠⢡⢢⢣⢤⢥⢦⢧⢨⢩⢪⢫⢬⢭⢮⢯⢰⢱⢲⢳⢴⢵⢶⢷⢸⢹⢺⢻⢼⢽⢾⢿ +
    28C0 ⣀⣁⣂⣃⣄⣅⣆⣇⣈⣉⣊⣋⣌⣍⣎⣏⣐⣑⣒⣓⣔⣕⣖⣗⣘⣙⣚⣛⣜⣝⣞⣟ +
    28E0 ⣠⣡⣢⣣⣤⣥⣦⣧⣨⣩⣪⣫⣬⣭⣮⣯⣰⣱⣲⣳⣴⣵⣶⣷⣸⣹⣺⣻⣼⣽⣾⣿ +
    2900 ⤀⤁⤂⤃⤄⤅⤆⤇⤈⤉⤊⤋⤌⤍⤎⤏⤐⤑⤒⤓⤔⤕⤖⤗⤘⤙⤚⤛⤜⤝⤞⤟ +
    2920 ⤠⤡⤢⤣⤤⤥⤦⤧⤨⤩⤪⤫⤬⤭⤮⤯⤰⤱⤲⤳⤴⤵⤶⤷⤸⤹⤺⤻⤼⤽⤾⤿ +
    2940 ⥀⥁⥂⥃⥄⥅⥆⥇⥈⥉⥊⥋⥌⥍⥎⥏⥐⥑⥒⥓⥔⥕⥖⥗⥘⥙⥚⥛⥜⥝⥞⥟ +
    2960 ⥠⥡⥢⥣⥤⥥⥦⥧⥨⥩⥪⥫⥬⥭⥮⥯⥰⥱⥲⥳⥴⥵⥶⥷⥸⥹⥺⥻⥼⥽⥾⥿ +
    2980 ⦀⦁⦂⦃⦄⦅⦆⦇⦈⦉⦊⦋⦌⦍⦎⦏⦐⦑⦒⦓⦔⦕⦖⦗⦘⦙⦚⦛⦜⦝⦞⦟ +
    29A0 ⦠⦡⦢⦣⦤⦥⦦⦧⦨⦩⦪⦫⦬⦭⦮⦯⦰⦱⦲⦳⦴⦵⦶⦷⦸⦹⦺⦻⦼⦽⦾⦿ +
    29C0 ⧀⧁⧂⧃⧄⧅⧆⧇⧈⧉⧊⧋⧌⧍⧎⧏⧐⧑⧒⧓⧔⧕⧖⧗⧘⧙⧚⧛⧜⧝⧞⧟ +
    29E0 ⧠⧡⧢⧣⧤⧥⧦⧧⧨⧩⧪⧫⧬⧭⧮⧯⧰⧱⧲⧳⧴⧵⧶⧷⧸⧹⧺⧻⧼⧽⧾⧿ +
    2A00 ⨀⨁⨂⨃⨄⨅⨆⨇⨈⨉⨊⨋⨌⨍⨎⨏⨐⨑⨒⨓⨔⨕⨖⨗⨘⨙⨚⨛⨜⨝⨞⨟ +
    2A20 ⨠⨡⨢⨣⨤⨥⨦⨧⨨⨩⨪⨫⨬⨭⨮⨯⨰⨱⨲⨳⨴⨵⨶⨷⨸⨹⨺⨻⨼⨽⨾⨿ +
    2A40 ⩀⩁⩂⩃⩄⩅⩆⩇⩈⩉⩊⩋⩌⩍⩎⩏⩐⩑⩒⩓⩔⩕⩖⩗⩘⩙⩚⩛⩜⩝⩞⩟ +
    2A60 ⩠⩡⩢⩣⩤⩥⩦⩧⩨⩩⩪⩫⩬⩭⩮⩯⩰⩱⩲⩳⩴⩵⩶⩷⩸⩹⩺⩻⩼⩽⩾⩿ +
    2A80 ⪀⪁⪂⪃⪄⪅⪆⪇⪈⪉⪊⪋⪌⪍⪎⪏⪐⪑⪒⪓⪔⪕⪖⪗⪘⪙⪚⪛⪜⪝⪞⪟ +
    2AA0 ⪠⪡⪢⪣⪤⪥⪦⪧⪨⪩⪪⪫⪬⪭⪮⪯⪰⪱⪲⪳⪴⪵⪶⪷⪸⪹⪺⪻⪼⪽⪾⪿ +
    2AC0 ⫀⫁⫂⫃⫄⫅⫆⫇⫈⫉⫊⫋⫌⫍⫎⫏⫐⫑⫒⫓⫔⫕⫖⫗⫘⫙⫚⫛⫝̸⫝⫞⫟ +
    2AE0 ⫠⫡⫢⫣⫤⫥⫦⫧⫨⫩⫪⫫⫬⫭⫮⫯⫰⫱⫲⫳⫴⫵⫶⫷⫸⫹⫺⫻⫼⫽⫾⫿ +
    2B00 ⬀⬁⬂⬃⬄⬅⬆⬇⬈⬉⬊⬋⬌⬍⬎⬏⬐⬑⬒⬓⬔⬕⬖⬗⬘⬙⬚⬛⬜⬝⬞⬟ +
    2B20 ⬠⬡⬢⬣⬤⬥⬦⬧⬨⬩⬪⬫⬬⬭⬮⬯⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿ +
    2B40 ⭀⭁⭂⭃⭄⭅⭆⭇⭈⭉⭊⭋⭌⭍⭎⭏⭐⭑⭒⭓⭔⭕⭖⭗⭘⭙⭚⭛⭜⭝⭞⭟ +
    2B60 ⭠⭡⭢⭣⭤⭥⭦⭧⭨⭩⭪⭫⭬⭭⭮⭯⭰⭱⭲⭳⭴⭵⭶⭷⭸⭹⭺⭻⭼⭽⭾⭿ +
    2B80 ⮀⮁⮂⮃⮄⮅⮆⮇⮈⮉⮊⮋⮌⮍⮎⮏⮐⮑⮒⮓⮔⮕⮖⮗⮘⮙⮚⮛⮜⮝⮞⮟ +
    2BA0 ⮠⮡⮢⮣⮤⮥⮦⮧⮨⮩⮪⮫⮬⮭⮮⮯⮰⮱⮲⮳⮴⮵⮶⮷⮸⮹⮺⮻⮼⮽⮾⮿ +
    2BC0 ⯀⯁⯂⯃⯄⯅⯆⯇⯈⯉⯊⯋⯌⯍⯎⯏⯐⯑⯒⯓⯔⯕⯖⯗⯘⯙⯚⯛⯜⯝⯞⯟ +
    2BE0 ⯠⯡⯢⯣⯤⯥⯦⯧⯨⯩⯪⯫⯬⯭⯮⯯⯰⯱⯲⯳⯴⯵⯶⯷⯸⯹⯺⯻⯼⯽⯾⯿ +
    2C00 ⰀⰁⰂⰃⰄⰅⰆⰇⰈⰉⰊⰋⰌⰍⰎⰏⰐⰑⰒⰓⰔⰕⰖⰗⰘⰙⰚⰛⰜⰝⰞⰟ +
    2C20 ⰠⰡⰢⰣⰤⰥⰦⰧⰨⰩⰪⰫⰬⰭⰮⰯⰰⰱⰲⰳⰴⰵⰶⰷⰸⰹⰺⰻⰼⰽⰾⰿ +
    2C40 ⱀⱁⱂⱃⱄⱅⱆⱇⱈⱉⱊⱋⱌⱍⱎⱏⱐⱑⱒⱓⱔⱕⱖⱗⱘⱙⱚⱛⱜⱝⱞⱟ +
    2C60 ⱠⱡⱢⱣⱤⱥⱦⱧⱨⱩⱪⱫⱬⱭⱮⱯⱰⱱⱲⱳⱴⱵⱶⱷⱸⱹⱺⱻⱼⱽⱾⱿ +
    2C80 ⲀⲁⲂⲃⲄⲅⲆⲇⲈⲉⲊⲋⲌⲍⲎⲏⲐⲑⲒⲓⲔⲕⲖⲗⲘⲙⲚⲛⲜⲝⲞⲟ +
    2CA0 ⲠⲡⲢⲣⲤⲥⲦⲧⲨⲩⲪⲫⲬⲭⲮⲯⲰⲱⲲⲳⲴⲵⲶⲷⲸⲹⲺⲻⲼⲽⲾⲿ +
    2CC0 ⳀⳁⳂⳃⳄⳅⳆⳇⳈⳉⳊⳋⳌⳍⳎⳏⳐⳑⳒⳓⳔⳕⳖⳗⳘⳙⳚⳛⳜⳝⳞⳟ +
    2CE0 ⳠⳡⳢⳣⳤ⳥⳦⳧⳨⳩⳪ⳫⳬⳭⳮ⳯⳰⳱Ⳳⳳ⳴⳵⳶⳷⳸⳹⳺⳻⳼⳽⳾⳿ +
    2D00 ⴀⴁⴂⴃⴄⴅⴆⴇⴈⴉⴊⴋⴌⴍⴎⴏⴐⴑⴒⴓⴔⴕⴖⴗⴘⴙⴚⴛⴜⴝⴞⴟ +
    2D20 ⴠⴡⴢⴣⴤⴥ⴦ⴧ⴨⴩⴪⴫⴬ⴭ⴮⴯ⴰⴱⴲⴳⴴⴵⴶⴷⴸⴹⴺⴻⴼⴽⴾⴿ +
    2D40 ⵀⵁⵂⵃⵄⵅⵆⵇⵈⵉⵊⵋⵌⵍⵎⵏⵐⵑⵒⵓⵔⵕⵖⵗⵘⵙⵚⵛⵜⵝⵞⵟ +
    2D60 ⵠⵡⵢⵣⵤⵥⵦⵧ⵨⵩⵪⵫⵬⵭⵮ⵯ⵰⵱⵲⵳⵴⵵⵶⵷⵸⵹⵺⵻⵼⵽⵾⵿ +
    2D80 ⶀⶁⶂⶃⶄⶅⶆⶇⶈⶉⶊⶋⶌⶍⶎⶏⶐⶑⶒⶓⶔⶕⶖ⶗⶘⶙⶚⶛⶜⶝⶞⶟ +
    2DA0 ⶠⶡⶢⶣⶤⶥⶦ⶧ⶨⶩⶪⶫⶬⶭⶮ⶯ⶰⶱⶲⶳⶴⶵⶶ⶷ⶸⶹⶺⶻⶼⶽⶾ⶿ +
    2DC0 ⷀⷁⷂⷃⷄⷅⷆ⷇ⷈⷉⷊⷋⷌⷍⷎ⷏ⷐⷑⷒⷓⷔⷕⷖ⷗ⷘⷙⷚⷛⷜⷝⷞ⷟ +
    2DE0 ⷠⷡⷢⷣⷤⷥⷦⷧⷨⷩⷪⷫⷬⷭⷮⷯⷰⷱⷲⷳⷴⷵⷶⷷⷸⷹⷺⷻⷼⷽⷾⷿ +
    2E00 ⸀⸁⸂⸃⸄⸅⸆⸇⸈⸉⸊⸋⸌⸍⸎⸏⸐⸑⸒⸓⸔⸕⸖⸗⸘⸙⸚⸛⸜⸝⸞⸟ +
    2E20 ⸠⸡⸢⸣⸤⸥⸦⸧⸨⸩⸪⸫⸬⸭⸮ⸯ⸰⸱⸲⸳⸴⸵⸶⸷⸸⸹⸺⸻⸼⸽⸾⸿ +
    2E40 ⹀⹁⹂⹃⹄⹅⹆⹇⹈⹉⹊⹋⹌⹍⹎⹏⹐⹑⹒⹓⹔⹕⹖⹗⹘⹙⹚⹛⹜⹝⹞⹟ +
    2E60 ⹠⹡⹢⹣⹤⹥⹦⹧⹨⹩⹪⹫⹬⹭⹮⹯⹰⹱⹲⹳⹴⹵⹶⹷⹸⹹⹺⹻⹼⹽⹾⹿ +
    2E80 ⺀⺁⺂⺃⺄⺅⺆⺇⺈⺉⺊⺋⺌⺍⺎⺏⺐⺑⺒⺓⺔⺕⺖⺗⺘⺙⺚⺛⺜⺝⺞⺟ +
    2EA0 ⺠⺡⺢⺣⺤⺥⺦⺧⺨⺩⺪⺫⺬⺭⺮⺯⺰⺱⺲⺳⺴⺵⺶⺷⺸⺹⺺⺻⺼⺽⺾⺿ +
    2EC0 ⻀⻁⻂⻃⻄⻅⻆⻇⻈⻉⻊⻋⻌⻍⻎⻏⻐⻑⻒⻓⻔⻕⻖⻗⻘⻙⻚⻛⻜⻝⻞⻟ +
    2EE0 ⻠⻡⻢⻣⻤⻥⻦⻧⻨⻩⻪⻫⻬⻭⻮⻯⻰⻱⻲⻳⻴⻵⻶⻷⻸⻹⻺⻻⻼⻽⻾⻿ +
    2F00 ⼀⼁⼂⼃⼄⼅⼆⼇⼈⼉⼊⼋⼌⼍⼎⼏⼐⼑⼒⼓⼔⼕⼖⼗⼘⼙⼚⼛⼜⼝⼞⼟ +
    2F20 ⼠⼡⼢⼣⼤⼥⼦⼧⼨⼩⼪⼫⼬⼭⼮⼯⼰⼱⼲⼳⼴⼵⼶⼷⼸⼹⼺⼻⼼⼽⼾⼿ +
    2F40 ⽀⽁⽂⽃⽄⽅⽆⽇⽈⽉⽊⽋⽌⽍⽎⽏⽐⽑⽒⽓⽔⽕⽖⽗⽘⽙⽚⽛⽜⽝⽞⽟ +
    2F60 ⽠⽡⽢⽣⽤⽥⽦⽧⽨⽩⽪⽫⽬⽭⽮⽯⽰⽱⽲⽳⽴⽵⽶⽷⽸⽹⽺⽻⽼⽽⽾⽿ +
    2F80 ⾀⾁⾂⾃⾄⾅⾆⾇⾈⾉⾊⾋⾌⾍⾎⾏⾐⾑⾒⾓⾔⾕⾖⾗⾘⾙⾚⾛⾜⾝⾞⾟ +
    2FA0 ⾠⾡⾢⾣⾤⾥⾦⾧⾨⾩⾪⾫⾬⾭⾮⾯⾰⾱⾲⾳⾴⾵⾶⾷⾸⾹⾺⾻⾼⾽⾾⾿ +
    2FC0 ⿀⿁⿂⿃⿄⿅⿆⿇⿈⿉⿊⿋⿌⿍⿎⿏⿐⿑⿒⿓⿔⿕⿖⿗⿘⿙⿚⿛⿜⿝⿞⿟ +
    2FE0 ⿠⿡⿢⿣⿤⿥⿦⿧⿨⿩⿪⿫⿬⿭⿮⿯⿰⿱⿲⿳⿴⿵⿶⿷⿸⿹⿺⿻⿼⿽⿾⿿ +
    3000  、。〃〄々〆〇〈〉《》「」『』【】〒〓〔〕〖〗〘〙〚〛〜〝〞〟 +
    3020 〠〡〢〣〤〥〦〧〨〩〪〭〮〯〫〬〰〱〲〳〴〵〶〷〸〹〺〻〼〽〾〿 +
    3040 ぀ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞた +
    3060 だちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみ +
    3080 むめもゃやゅゆょよらりるれろゎわゐゑをんゔゕゖ゗゘゙゚゛゜ゝゞゟ +
    30A0 ゠ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタ +
    30C0 ダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミ +
    30E0 ムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶヷヸヹヺ・ーヽヾヿ +
    3100 ㄀㄁㄂㄃㄄ㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏㄐㄑㄒㄓㄔㄕㄖㄗㄘㄙㄚㄛㄜㄝㄞㄟ +
    3120 ㄠㄡㄢㄣㄤㄥㄦㄧㄨㄩㄪㄫㄬㄭㄮㄯ㄰ㄱㄲㄳㄴㄵㄶㄷㄸㄹㄺㄻㄼㄽㄾㄿ +
    3140 ㅀㅁㅂㅃㅄㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟ +
    3160 ㅠㅡㅢㅣㅤㅥㅦㅧㅨㅩㅪㅫㅬㅭㅮㅯㅰㅱㅲㅳㅴㅵㅶㅷㅸㅹㅺㅻㅼㅽㅾㅿ +
    3180 ㆀㆁㆂㆃㆄㆅㆆㆇㆈㆉㆊㆋㆌㆍㆎ㆏㆐㆑㆒㆓㆔㆕㆖㆗㆘㆙㆚㆛㆜㆝㆞㆟ +
    31A0 ㆠㆡㆢㆣㆤㆥㆦㆧㆨㆩㆪㆫㆬㆭㆮㆯㆰㆱㆲㆳㆴㆵㆶㆷㆸㆹㆺㆻㆼㆽㆾㆿ +
    31C0 ㇀㇁㇂㇃㇄㇅㇆㇇㇈㇉㇊㇋㇌㇍㇎㇏㇐㇑㇒㇓㇔㇕㇖㇗㇘㇙㇚㇛㇜㇝㇞㇟ +
    31E0 ㇠㇡㇢㇣㇤㇥㇦㇧㇨㇩㇪㇫㇬㇭㇮㇯ㇰㇱㇲㇳㇴㇵㇶㇷㇸㇹㇺㇻㇼㇽㇾㇿ +
    3200 ㈀㈁㈂㈃㈄㈅㈆㈇㈈㈉㈊㈋㈌㈍㈎㈏㈐㈑㈒㈓㈔㈕㈖㈗㈘㈙㈚㈛㈜㈝㈞㈟ +
    3220 ㈠㈡㈢㈣㈤㈥㈦㈧㈨㈩㈪㈫㈬㈭㈮㈯㈰㈱㈲㈳㈴㈵㈶㈷㈸㈹㈺㈻㈼㈽㈾㈿ +
    3240 ㉀㉁㉂㉃㉄㉅㉆㉇㉈㉉㉊㉋㉌㉍㉎㉏㉐㉑㉒㉓㉔㉕㉖㉗㉘㉙㉚㉛㉜㉝㉞㉟ +
    3260 ㉠㉡㉢㉣㉤㉥㉦㉧㉨㉩㉪㉫㉬㉭㉮㉯㉰㉱㉲㉳㉴㉵㉶㉷㉸㉹㉺㉻㉼㉽㉾㉿ +
    3280 ㊀㊁㊂㊃㊄㊅㊆㊇㊈㊉㊊㊋㊌㊍㊎㊏㊐㊑㊒㊓㊔㊕㊖㊗㊘㊙㊚㊛㊜㊝㊞㊟ +
    32A0 ㊠㊡㊢㊣㊤㊥㊦㊧㊨㊩㊪㊫㊬㊭㊮㊯㊰㊱㊲㊳㊴㊵㊶㊷㊸㊹㊺㊻㊼㊽㊾㊿ +
    32C0 ㋀㋁㋂㋃㋄㋅㋆㋇㋈㋉㋊㋋㋌㋍㋎㋏㋐㋑㋒㋓㋔㋕㋖㋗㋘㋙㋚㋛㋜㋝㋞㋟ +
    32E0 ㋠㋡㋢㋣㋤㋥㋦㋧㋨㋩㋪㋫㋬㋭㋮㋯㋰㋱㋲㋳㋴㋵㋶㋷㋸㋹㋺㋻㋼㋽㋾㋿ +
    3300 ㌀㌁㌂㌃㌄㌅㌆㌇㌈㌉㌊㌋㌌㌍㌎㌏㌐㌑㌒㌓㌔㌕㌖㌗㌘㌙㌚㌛㌜㌝㌞㌟ +
    3320 ㌠㌡㌢㌣㌤㌥㌦㌧㌨㌩㌪㌫㌬㌭㌮㌯㌰㌱㌲㌳㌴㌵㌶㌷㌸㌹㌺㌻㌼㌽㌾㌿ +
    3340 ㍀㍁㍂㍃㍄㍅㍆㍇㍈㍉㍊㍋㍌㍍㍎㍏㍐㍑㍒㍓㍔㍕㍖㍗㍘㍙㍚㍛㍜㍝㍞㍟ +
    3360 ㍠㍡㍢㍣㍤㍥㍦㍧㍨㍩㍪㍫㍬㍭㍮㍯㍰㍱㍲㍳㍴㍵㍶㍷㍸㍹㍺㍻㍼㍽㍾㍿ +
    3380 ㎀㎁㎂㎃㎄㎅㎆㎇㎈㎉㎊㎋㎌㎍㎎㎏㎐㎑㎒㎓㎔㎕㎖㎗㎘㎙㎚㎛㎜㎝㎞㎟ +
    33A0 ㎠㎡㎢㎣㎤㎥㎦㎧㎨㎩㎪㎫㎬㎭㎮㎯㎰㎱㎲㎳㎴㎵㎶㎷㎸㎹㎺㎻㎼㎽㎾㎿ +
    33C0 ㏀㏁㏂㏃㏄㏅㏆㏇㏈㏉㏊㏋㏌㏍㏎㏏㏐㏑㏒㏓㏔㏕㏖㏗㏘㏙㏚㏛㏜㏝㏞㏟ +
    33E0 ㏠㏡㏢㏣㏤㏥㏦㏧㏨㏩㏪㏫㏬㏭㏮㏯㏰㏱㏲㏳㏴㏵㏶㏷㏸㏹㏺㏻㏼㏽㏾㏿ +
    3400 㐀㐁㐂㐃㐄㐅㐆㐇㐈㐉㐊㐋㐌㐍㐎㐏㐐㐑㐒㐓㐔㐕㐖㐗㐘㐙㐚㐛㐜㐝㐞㐟 +
    3420 㐠㐡㐢㐣㐤㐥㐦㐧㐨㐩㐪㐫㐬㐭㐮㐯㐰㐱㐲㐳㐴㐵㐶㐷㐸㐹㐺㐻㐼㐽㐾㐿 +
    3440 㑀㑁㑂㑃㑄㑅㑆㑇㑈㑉㑊㑋㑌㑍㑎㑏㑐㑑㑒㑓㑔㑕㑖㑗㑘㑙㑚㑛㑜㑝㑞㑟 +
    3460 㑠㑡㑢㑣㑤㑥㑦㑧㑨㑩㑪㑫㑬㑭㑮㑯㑰㑱㑲㑳㑴㑵㑶㑷㑸㑹㑺㑻㑼㑽㑾㑿 +
    3480 㒀㒁㒂㒃㒄㒅㒆㒇㒈㒉㒊㒋㒌㒍㒎㒏㒐㒑㒒㒓㒔㒕㒖㒗㒘㒙㒚㒛㒜㒝㒞㒟 +
    34A0 㒠㒡㒢㒣㒤㒥㒦㒧㒨㒩㒪㒫㒬㒭㒮㒯㒰㒱㒲㒳㒴㒵㒶㒷㒸㒹㒺㒻㒼㒽㒾㒿 +
    34C0 㓀㓁㓂㓃㓄㓅㓆㓇㓈㓉㓊㓋㓌㓍㓎㓏㓐㓑㓒㓓㓔㓕㓖㓗㓘㓙㓚㓛㓜㓝㓞㓟 +
    34E0 㓠㓡㓢㓣㓤㓥㓦㓧㓨㓩㓪㓫㓬㓭㓮㓯㓰㓱㓲㓳㓴㓵㓶㓷㓸㓹㓺㓻㓼㓽㓾㓿 +
    3500 㔀㔁㔂㔃㔄㔅㔆㔇㔈㔉㔊㔋㔌㔍㔎㔏㔐㔑㔒㔓㔔㔕㔖㔗㔘㔙㔚㔛㔜㔝㔞㔟 +
    3520 㔠㔡㔢㔣㔤㔥㔦㔧㔨㔩㔪㔫㔬㔭㔮㔯㔰㔱㔲㔳㔴㔵㔶㔷㔸㔹㔺㔻㔼㔽㔾㔿 +
    3540 㕀㕁㕂㕃㕄㕅㕆㕇㕈㕉㕊㕋㕌㕍㕎㕏㕐㕑㕒㕓㕔㕕㕖㕗㕘㕙㕚㕛㕜㕝㕞㕟 +
    3560 㕠㕡㕢㕣㕤㕥㕦㕧㕨㕩㕪㕫㕬㕭㕮㕯㕰㕱㕲㕳㕴㕵㕶㕷㕸㕹㕺㕻㕼㕽㕾㕿 +
    3580 㖀㖁㖂㖃㖄㖅㖆㖇㖈㖉㖊㖋㖌㖍㖎㖏㖐㖑㖒㖓㖔㖕㖖㖗㖘㖙㖚㖛㖜㖝㖞㖟 +
    35A0 㖠㖡㖢㖣㖤㖥㖦㖧㖨㖩㖪㖫㖬㖭㖮㖯㖰㖱㖲㖳㖴㖵㖶㖷㖸㖹㖺㖻㖼㖽㖾㖿 +
    35C0 㗀㗁㗂㗃㗄㗅㗆㗇㗈㗉㗊㗋㗌㗍㗎㗏㗐㗑㗒㗓㗔㗕㗖㗗㗘㗙㗚㗛㗜㗝㗞㗟 +
    35E0 㗠㗡㗢㗣㗤㗥㗦㗧㗨㗩㗪㗫㗬㗭㗮㗯㗰㗱㗲㗳㗴㗵㗶㗷㗸㗹㗺㗻㗼㗽㗾㗿 +
    3600 㘀㘁㘂㘃㘄㘅㘆㘇㘈㘉㘊㘋㘌㘍㘎㘏㘐㘑㘒㘓㘔㘕㘖㘗㘘㘙㘚㘛㘜㘝㘞㘟 +
    3620 㘠㘡㘢㘣㘤㘥㘦㘧㘨㘩㘪㘫㘬㘭㘮㘯㘰㘱㘲㘳㘴㘵㘶㘷㘸㘹㘺㘻㘼㘽㘾㘿 +
    3640 㙀㙁㙂㙃㙄㙅㙆㙇㙈㙉㙊㙋㙌㙍㙎㙏㙐㙑㙒㙓㙔㙕㙖㙗㙘㙙㙚㙛㙜㙝㙞㙟 +
    3660 㙠㙡㙢㙣㙤㙥㙦㙧㙨㙩㙪㙫㙬㙭㙮㙯㙰㙱㙲㙳㙴㙵㙶㙷㙸㙹㙺㙻㙼㙽㙾㙿 +
    3680 㚀㚁㚂㚃㚄㚅㚆㚇㚈㚉㚊㚋㚌㚍㚎㚏㚐㚑㚒㚓㚔㚕㚖㚗㚘㚙㚚㚛㚜㚝㚞㚟 +
    36A0 㚠㚡㚢㚣㚤㚥㚦㚧㚨㚩㚪㚫㚬㚭㚮㚯㚰㚱㚲㚳㚴㚵㚶㚷㚸㚹㚺㚻㚼㚽㚾㚿 +
    36C0 㛀㛁㛂㛃㛄㛅㛆㛇㛈㛉㛊㛋㛌㛍㛎㛏㛐㛑㛒㛓㛔㛕㛖㛗㛘㛙㛚㛛㛜㛝㛞㛟 +
    36E0 㛠㛡㛢㛣㛤㛥㛦㛧㛨㛩㛪㛫㛬㛭㛮㛯㛰㛱㛲㛳㛴㛵㛶㛷㛸㛹㛺㛻㛼㛽㛾㛿 +
    3700 㜀㜁㜂㜃㜄㜅㜆㜇㜈㜉㜊㜋㜌㜍㜎㜏㜐㜑㜒㜓㜔㜕㜖㜗㜘㜙㜚㜛㜜㜝㜞㜟 +
    3720 㜠㜡㜢㜣㜤㜥㜦㜧㜨㜩㜪㜫㜬㜭㜮㜯㜰㜱㜲㜳㜴㜵㜶㜷㜸㜹㜺㜻㜼㜽㜾㜿 +
    3740 㝀㝁㝂㝃㝄㝅㝆㝇㝈㝉㝊㝋㝌㝍㝎㝏㝐㝑㝒㝓㝔㝕㝖㝗㝘㝙㝚㝛㝜㝝㝞㝟 +
    3760 㝠㝡㝢㝣㝤㝥㝦㝧㝨㝩㝪㝫㝬㝭㝮㝯㝰㝱㝲㝳㝴㝵㝶㝷㝸㝹㝺㝻㝼㝽㝾㝿 +
    3780 㞀㞁㞂㞃㞄㞅㞆㞇㞈㞉㞊㞋㞌㞍㞎㞏㞐㞑㞒㞓㞔㞕㞖㞗㞘㞙㞚㞛㞜㞝㞞㞟 +
    37A0 㞠㞡㞢㞣㞤㞥㞦㞧㞨㞩㞪㞫㞬㞭㞮㞯㞰㞱㞲㞳㞴㞵㞶㞷㞸㞹㞺㞻㞼㞽㞾㞿 +
    37C0 㟀㟁㟂㟃㟄㟅㟆㟇㟈㟉㟊㟋㟌㟍㟎㟏㟐㟑㟒㟓㟔㟕㟖㟗㟘㟙㟚㟛㟜㟝㟞㟟 +
    37E0 㟠㟡㟢㟣㟤㟥㟦㟧㟨㟩㟪㟫㟬㟭㟮㟯㟰㟱㟲㟳㟴㟵㟶㟷㟸㟹㟺㟻㟼㟽㟾㟿 +
    3800 㠀㠁㠂㠃㠄㠅㠆㠇㠈㠉㠊㠋㠌㠍㠎㠏㠐㠑㠒㠓㠔㠕㠖㠗㠘㠙㠚㠛㠜㠝㠞㠟 +
    3820 㠠㠡㠢㠣㠤㠥㠦㠧㠨㠩㠪㠫㠬㠭㠮㠯㠰㠱㠲㠳㠴㠵㠶㠷㠸㠹㠺㠻㠼㠽㠾㠿 +
    3840 㡀㡁㡂㡃㡄㡅㡆㡇㡈㡉㡊㡋㡌㡍㡎㡏㡐㡑㡒㡓㡔㡕㡖㡗㡘㡙㡚㡛㡜㡝㡞㡟 +
    3860 㡠㡡㡢㡣㡤㡥㡦㡧㡨㡩㡪㡫㡬㡭㡮㡯㡰㡱㡲㡳㡴㡵㡶㡷㡸㡹㡺㡻㡼㡽㡾㡿 +
    3880 㢀㢁㢂㢃㢄㢅㢆㢇㢈㢉㢊㢋㢌㢍㢎㢏㢐㢑㢒㢓㢔㢕㢖㢗㢘㢙㢚㢛㢜㢝㢞㢟 +
    38A0 㢠㢡㢢㢣㢤㢥㢦㢧㢨㢩㢪㢫㢬㢭㢮㢯㢰㢱㢲㢳㢴㢵㢶㢷㢸㢹㢺㢻㢼㢽㢾㢿 +
    38C0 㣀㣁㣂㣃㣄㣅㣆㣇㣈㣉㣊㣋㣌㣍㣎㣏㣐㣑㣒㣓㣔㣕㣖㣗㣘㣙㣚㣛㣜㣝㣞㣟 +
    38E0 㣠㣡㣢㣣㣤㣥㣦㣧㣨㣩㣪㣫㣬㣭㣮㣯㣰㣱㣲㣳㣴㣵㣶㣷㣸㣹㣺㣻㣼㣽㣾㣿 +
    3900 㤀㤁㤂㤃㤄㤅㤆㤇㤈㤉㤊㤋㤌㤍㤎㤏㤐㤑㤒㤓㤔㤕㤖㤗㤘㤙㤚㤛㤜㤝㤞㤟 +
    3920 㤠㤡㤢㤣㤤㤥㤦㤧㤨㤩㤪㤫㤬㤭㤮㤯㤰㤱㤲㤳㤴㤵㤶㤷㤸㤹㤺㤻㤼㤽㤾㤿 +
    3940 㥀㥁㥂㥃㥄㥅㥆㥇㥈㥉㥊㥋㥌㥍㥎㥏㥐㥑㥒㥓㥔㥕㥖㥗㥘㥙㥚㥛㥜㥝㥞㥟 +
    3960 㥠㥡㥢㥣㥤㥥㥦㥧㥨㥩㥪㥫㥬㥭㥮㥯㥰㥱㥲㥳㥴㥵㥶㥷㥸㥹㥺㥻㥼㥽㥾㥿 +
    3980 㦀㦁㦂㦃㦄㦅㦆㦇㦈㦉㦊㦋㦌㦍㦎㦏㦐㦑㦒㦓㦔㦕㦖㦗㦘㦙㦚㦛㦜㦝㦞㦟 +
    39A0 㦠㦡㦢㦣㦤㦥㦦㦧㦨㦩㦪㦫㦬㦭㦮㦯㦰㦱㦲㦳㦴㦵㦶㦷㦸㦹㦺㦻㦼㦽㦾㦿 +
    39C0 㧀㧁㧂㧃㧄㧅㧆㧇㧈㧉㧊㧋㧌㧍㧎㧏㧐㧑㧒㧓㧔㧕㧖㧗㧘㧙㧚㧛㧜㧝㧞㧟 +
    39E0 㧠㧡㧢㧣㧤㧥㧦㧧㧨㧩㧪㧫㧬㧭㧮㧯㧰㧱㧲㧳㧴㧵㧶㧷㧸㧹㧺㧻㧼㧽㧾㧿 +
    3A00 㨀㨁㨂㨃㨄㨅㨆㨇㨈㨉㨊㨋㨌㨍㨎㨏㨐㨑㨒㨓㨔㨕㨖㨗㨘㨙㨚㨛㨜㨝㨞㨟 +
    3A20 㨠㨡㨢㨣㨤㨥㨦㨧㨨㨩㨪㨫㨬㨭㨮㨯㨰㨱㨲㨳㨴㨵㨶㨷㨸㨹㨺㨻㨼㨽㨾㨿 +
    3A40 㩀㩁㩂㩃㩄㩅㩆㩇㩈㩉㩊㩋㩌㩍㩎㩏㩐㩑㩒㩓㩔㩕㩖㩗㩘㩙㩚㩛㩜㩝㩞㩟 +
    3A60 㩠㩡㩢㩣㩤㩥㩦㩧㩨㩩㩪㩫㩬㩭㩮㩯㩰㩱㩲㩳㩴㩵㩶㩷㩸㩹㩺㩻㩼㩽㩾㩿 +
    3A80 㪀㪁㪂㪃㪄㪅㪆㪇㪈㪉㪊㪋㪌㪍㪎㪏㪐㪑㪒㪓㪔㪕㪖㪗㪘㪙㪚㪛㪜㪝㪞㪟 +
    3AA0 㪠㪡㪢㪣㪤㪥㪦㪧㪨㪩㪪㪫㪬㪭㪮㪯㪰㪱㪲㪳㪴㪵㪶㪷㪸㪹㪺㪻㪼㪽㪾㪿 +
    3AC0 㫀㫁㫂㫃㫄㫅㫆㫇㫈㫉㫊㫋㫌㫍㫎㫏㫐㫑㫒㫓㫔㫕㫖㫗㫘㫙㫚㫛㫜㫝㫞㫟 +
    3AE0 㫠㫡㫢㫣㫤㫥㫦㫧㫨㫩㫪㫫㫬㫭㫮㫯㫰㫱㫲㫳㫴㫵㫶㫷㫸㫹㫺㫻㫼㫽㫾㫿 +
    3B00 㬀㬁㬂㬃㬄㬅㬆㬇㬈㬉㬊㬋㬌㬍㬎㬏㬐㬑㬒㬓㬔㬕㬖㬗㬘㬙㬚㬛㬜㬝㬞㬟 +
    3B20 㬠㬡㬢㬣㬤㬥㬦㬧㬨㬩㬪㬫㬬㬭㬮㬯㬰㬱㬲㬳㬴㬵㬶㬷㬸㬹㬺㬻㬼㬽㬾㬿 +
    3B40 㭀㭁㭂㭃㭄㭅㭆㭇㭈㭉㭊㭋㭌㭍㭎㭏㭐㭑㭒㭓㭔㭕㭖㭗㭘㭙㭚㭛㭜㭝㭞㭟 +
    3B60 㭠㭡㭢㭣㭤㭥㭦㭧㭨㭩㭪㭫㭬㭭㭮㭯㭰㭱㭲㭳㭴㭵㭶㭷㭸㭹㭺㭻㭼㭽㭾㭿 +
    3B80 㮀㮁㮂㮃㮄㮅㮆㮇㮈㮉㮊㮋㮌㮍㮎㮏㮐㮑㮒㮓㮔㮕㮖㮗㮘㮙㮚㮛㮜㮝㮞㮟 +
    3BA0 㮠㮡㮢㮣㮤㮥㮦㮧㮨㮩㮪㮫㮬㮭㮮㮯㮰㮱㮲㮳㮴㮵㮶㮷㮸㮹㮺㮻㮼㮽㮾㮿 +
    3BC0 㯀㯁㯂㯃㯄㯅㯆㯇㯈㯉㯊㯋㯌㯍㯎㯏㯐㯑㯒㯓㯔㯕㯖㯗㯘㯙㯚㯛㯜㯝㯞㯟 +
    3BE0 㯠㯡㯢㯣㯤㯥㯦㯧㯨㯩㯪㯫㯬㯭㯮㯯㯰㯱㯲㯳㯴㯵㯶㯷㯸㯹㯺㯻㯼㯽㯾㯿 +
    3C00 㰀㰁㰂㰃㰄㰅㰆㰇㰈㰉㰊㰋㰌㰍㰎㰏㰐㰑㰒㰓㰔㰕㰖㰗㰘㰙㰚㰛㰜㰝㰞㰟 +
    3C20 㰠㰡㰢㰣㰤㰥㰦㰧㰨㰩㰪㰫㰬㰭㰮㰯㰰㰱㰲㰳㰴㰵㰶㰷㰸㰹㰺㰻㰼㰽㰾㰿 +
    3C40 㱀㱁㱂㱃㱄㱅㱆㱇㱈㱉㱊㱋㱌㱍㱎㱏㱐㱑㱒㱓㱔㱕㱖㱗㱘㱙㱚㱛㱜㱝㱞㱟 +
    3C60 㱠㱡㱢㱣㱤㱥㱦㱧㱨㱩㱪㱫㱬㱭㱮㱯㱰㱱㱲㱳㱴㱵㱶㱷㱸㱹㱺㱻㱼㱽㱾㱿 +
    3C80 㲀㲁㲂㲃㲄㲅㲆㲇㲈㲉㲊㲋㲌㲍㲎㲏㲐㲑㲒㲓㲔㲕㲖㲗㲘㲙㲚㲛㲜㲝㲞㲟 +
    3CA0 㲠㲡㲢㲣㲤㲥㲦㲧㲨㲩㲪㲫㲬㲭㲮㲯㲰㲱㲲㲳㲴㲵㲶㲷㲸㲹㲺㲻㲼㲽㲾㲿 +
    3CC0 㳀㳁㳂㳃㳄㳅㳆㳇㳈㳉㳊㳋㳌㳍㳎㳏㳐㳑㳒㳓㳔㳕㳖㳗㳘㳙㳚㳛㳜㳝㳞㳟 +
    3CE0 㳠㳡㳢㳣㳤㳥㳦㳧㳨㳩㳪㳫㳬㳭㳮㳯㳰㳱㳲㳳㳴㳵㳶㳷㳸㳹㳺㳻㳼㳽㳾㳿 +
    3D00 㴀㴁㴂㴃㴄㴅㴆㴇㴈㴉㴊㴋㴌㴍㴎㴏㴐㴑㴒㴓㴔㴕㴖㴗㴘㴙㴚㴛㴜㴝㴞㴟 +
    3D20 㴠㴡㴢㴣㴤㴥㴦㴧㴨㴩㴪㴫㴬㴭㴮㴯㴰㴱㴲㴳㴴㴵㴶㴷㴸㴹㴺㴻㴼㴽㴾㴿 +
    3D40 㵀㵁㵂㵃㵄㵅㵆㵇㵈㵉㵊㵋㵌㵍㵎㵏㵐㵑㵒㵓㵔㵕㵖㵗㵘㵙㵚㵛㵜㵝㵞㵟 +
    3D60 㵠㵡㵢㵣㵤㵥㵦㵧㵨㵩㵪㵫㵬㵭㵮㵯㵰㵱㵲㵳㵴㵵㵶㵷㵸㵹㵺㵻㵼㵽㵾㵿 +
    3D80 㶀㶁㶂㶃㶄㶅㶆㶇㶈㶉㶊㶋㶌㶍㶎㶏㶐㶑㶒㶓㶔㶕㶖㶗㶘㶙㶚㶛㶜㶝㶞㶟 +
    3DA0 㶠㶡㶢㶣㶤㶥㶦㶧㶨㶩㶪㶫㶬㶭㶮㶯㶰㶱㶲㶳㶴㶵㶶㶷㶸㶹㶺㶻㶼㶽㶾㶿 +
    3DC0 㷀㷁㷂㷃㷄㷅㷆㷇㷈㷉㷊㷋㷌㷍㷎㷏㷐㷑㷒㷓㷔㷕㷖㷗㷘㷙㷚㷛㷜㷝㷞㷟 +
    3DE0 㷠㷡㷢㷣㷤㷥㷦㷧㷨㷩㷪㷫㷬㷭㷮㷯㷰㷱㷲㷳㷴㷵㷶㷷㷸㷹㷺㷻㷼㷽㷾㷿 +
    3E00 㸀㸁㸂㸃㸄㸅㸆㸇㸈㸉㸊㸋㸌㸍㸎㸏㸐㸑㸒㸓㸔㸕㸖㸗㸘㸙㸚㸛㸜㸝㸞㸟 +
    3E20 㸠㸡㸢㸣㸤㸥㸦㸧㸨㸩㸪㸫㸬㸭㸮㸯㸰㸱㸲㸳㸴㸵㸶㸷㸸㸹㸺㸻㸼㸽㸾㸿 +
    3E40 㹀㹁㹂㹃㹄㹅㹆㹇㹈㹉㹊㹋㹌㹍㹎㹏㹐㹑㹒㹓㹔㹕㹖㹗㹘㹙㹚㹛㹜㹝㹞㹟 +
    3E60 㹠㹡㹢㹣㹤㹥㹦㹧㹨㹩㹪㹫㹬㹭㹮㹯㹰㹱㹲㹳㹴㹵㹶㹷㹸㹹㹺㹻㹼㹽㹾㹿 +
    3E80 㺀㺁㺂㺃㺄㺅㺆㺇㺈㺉㺊㺋㺌㺍㺎㺏㺐㺑㺒㺓㺔㺕㺖㺗㺘㺙㺚㺛㺜㺝㺞㺟 +
    3EA0 㺠㺡㺢㺣㺤㺥㺦㺧㺨㺩㺪㺫㺬㺭㺮㺯㺰㺱㺲㺳㺴㺵㺶㺷㺸㺹㺺㺻㺼㺽㺾㺿 +
    3EC0 㻀㻁㻂㻃㻄㻅㻆㻇㻈㻉㻊㻋㻌㻍㻎㻏㻐㻑㻒㻓㻔㻕㻖㻗㻘㻙㻚㻛㻜㻝㻞㻟 +
    3EE0 㻠㻡㻢㻣㻤㻥㻦㻧㻨㻩㻪㻫㻬㻭㻮㻯㻰㻱㻲㻳㻴㻵㻶㻷㻸㻹㻺㻻㻼㻽㻾㻿 +
    3F00 㼀㼁㼂㼃㼄㼅㼆㼇㼈㼉㼊㼋㼌㼍㼎㼏㼐㼑㼒㼓㼔㼕㼖㼗㼘㼙㼚㼛㼜㼝㼞㼟 +
    3F20 㼠㼡㼢㼣㼤㼥㼦㼧㼨㼩㼪㼫㼬㼭㼮㼯㼰㼱㼲㼳㼴㼵㼶㼷㼸㼹㼺㼻㼼㼽㼾㼿 +
    3F40 㽀㽁㽂㽃㽄㽅㽆㽇㽈㽉㽊㽋㽌㽍㽎㽏㽐㽑㽒㽓㽔㽕㽖㽗㽘㽙㽚㽛㽜㽝㽞㽟 +
    3F60 㽠㽡㽢㽣㽤㽥㽦㽧㽨㽩㽪㽫㽬㽭㽮㽯㽰㽱㽲㽳㽴㽵㽶㽷㽸㽹㽺㽻㽼㽽㽾㽿 +
    3F80 㾀㾁㾂㾃㾄㾅㾆㾇㾈㾉㾊㾋㾌㾍㾎㾏㾐㾑㾒㾓㾔㾕㾖㾗㾘㾙㾚㾛㾜㾝㾞㾟 +
    3FA0 㾠㾡㾢㾣㾤㾥㾦㾧㾨㾩㾪㾫㾬㾭㾮㾯㾰㾱㾲㾳㾴㾵㾶㾷㾸㾹㾺㾻㾼㾽㾾㾿 +
    3FC0 㿀㿁㿂㿃㿄㿅㿆㿇㿈㿉㿊㿋㿌㿍㿎㿏㿐㿑㿒㿓㿔㿕㿖㿗㿘㿙㿚㿛㿜㿝㿞㿟 +
    3FE0 㿠㿡㿢㿣㿤㿥㿦㿧㿨㿩㿪㿫㿬㿭㿮㿯㿰㿱㿲㿳㿴㿵㿶㿷㿸㿹㿺㿻㿼㿽㿾㿿 +
    4000 䀀䀁䀂䀃䀄䀅䀆䀇䀈䀉䀊䀋䀌䀍䀎䀏䀐䀑䀒䀓䀔䀕䀖䀗䀘䀙䀚䀛䀜䀝䀞䀟 +
    4020 䀠䀡䀢䀣䀤䀥䀦䀧䀨䀩䀪䀫䀬䀭䀮䀯䀰䀱䀲䀳䀴䀵䀶䀷䀸䀹䀺䀻䀼䀽䀾䀿 +
    4040 䁀䁁䁂䁃䁄䁅䁆䁇䁈䁉䁊䁋䁌䁍䁎䁏䁐䁑䁒䁓䁔䁕䁖䁗䁘䁙䁚䁛䁜䁝䁞䁟 +
    4060 䁠䁡䁢䁣䁤䁥䁦䁧䁨䁩䁪䁫䁬䁭䁮䁯䁰䁱䁲䁳䁴䁵䁶䁷䁸䁹䁺䁻䁼䁽䁾䁿 +
    4080 䂀䂁䂂䂃䂄䂅䂆䂇䂈䂉䂊䂋䂌䂍䂎䂏䂐䂑䂒䂓䂔䂕䂖䂗䂘䂙䂚䂛䂜䂝䂞䂟 +
    40A0 䂠䂡䂢䂣䂤䂥䂦䂧䂨䂩䂪䂫䂬䂭䂮䂯䂰䂱䂲䂳䂴䂵䂶䂷䂸䂹䂺䂻䂼䂽䂾䂿 +
    40C0 䃀䃁䃂䃃䃄䃅䃆䃇䃈䃉䃊䃋䃌䃍䃎䃏䃐䃑䃒䃓䃔䃕䃖䃗䃘䃙䃚䃛䃜䃝䃞䃟 +
    40E0 䃠䃡䃢䃣䃤䃥䃦䃧䃨䃩䃪䃫䃬䃭䃮䃯䃰䃱䃲䃳䃴䃵䃶䃷䃸䃹䃺䃻䃼䃽䃾䃿 +
    4100 䄀䄁䄂䄃䄄䄅䄆䄇䄈䄉䄊䄋䄌䄍䄎䄏䄐䄑䄒䄓䄔䄕䄖䄗䄘䄙䄚䄛䄜䄝䄞䄟 +
    4120 䄠䄡䄢䄣䄤䄥䄦䄧䄨䄩䄪䄫䄬䄭䄮䄯䄰䄱䄲䄳䄴䄵䄶䄷䄸䄹䄺䄻䄼䄽䄾䄿 +
    4140 䅀䅁䅂䅃䅄䅅䅆䅇䅈䅉䅊䅋䅌䅍䅎䅏䅐䅑䅒䅓䅔䅕䅖䅗䅘䅙䅚䅛䅜䅝䅞䅟 +
    4160 䅠䅡䅢䅣䅤䅥䅦䅧䅨䅩䅪䅫䅬䅭䅮䅯䅰䅱䅲䅳䅴䅵䅶䅷䅸䅹䅺䅻䅼䅽䅾䅿 +
    4180 䆀䆁䆂䆃䆄䆅䆆䆇䆈䆉䆊䆋䆌䆍䆎䆏䆐䆑䆒䆓䆔䆕䆖䆗䆘䆙䆚䆛䆜䆝䆞䆟 +
    41A0 䆠䆡䆢䆣䆤䆥䆦䆧䆨䆩䆪䆫䆬䆭䆮䆯䆰䆱䆲䆳䆴䆵䆶䆷䆸䆹䆺䆻䆼䆽䆾䆿 +
    41C0 䇀䇁䇂䇃䇄䇅䇆䇇䇈䇉䇊䇋䇌䇍䇎䇏䇐䇑䇒䇓䇔䇕䇖䇗䇘䇙䇚䇛䇜䇝䇞䇟 +
    41E0 䇠䇡䇢䇣䇤䇥䇦䇧䇨䇩䇪䇫䇬䇭䇮䇯䇰䇱䇲䇳䇴䇵䇶䇷䇸䇹䇺䇻䇼䇽䇾䇿 +
    4200 䈀䈁䈂䈃䈄䈅䈆䈇䈈䈉䈊䈋䈌䈍䈎䈏䈐䈑䈒䈓䈔䈕䈖䈗䈘䈙䈚䈛䈜䈝䈞䈟 +
    4220 䈠䈡䈢䈣䈤䈥䈦䈧䈨䈩䈪䈫䈬䈭䈮䈯䈰䈱䈲䈳䈴䈵䈶䈷䈸䈹䈺䈻䈼䈽䈾䈿 +
    4240 䉀䉁䉂䉃䉄䉅䉆䉇䉈䉉䉊䉋䉌䉍䉎䉏䉐䉑䉒䉓䉔䉕䉖䉗䉘䉙䉚䉛䉜䉝䉞䉟 +
    4260 䉠䉡䉢䉣䉤䉥䉦䉧䉨䉩䉪䉫䉬䉭䉮䉯䉰䉱䉲䉳䉴䉵䉶䉷䉸䉹䉺䉻䉼䉽䉾䉿 +
    4280 䊀䊁䊂䊃䊄䊅䊆䊇䊈䊉䊊䊋䊌䊍䊎䊏䊐䊑䊒䊓䊔䊕䊖䊗䊘䊙䊚䊛䊜䊝䊞䊟 +
    42A0 䊠䊡䊢䊣䊤䊥䊦䊧䊨䊩䊪䊫䊬䊭䊮䊯䊰䊱䊲䊳䊴䊵䊶䊷䊸䊹䊺䊻䊼䊽䊾䊿 +
    42C0 䋀䋁䋂䋃䋄䋅䋆䋇䋈䋉䋊䋋䋌䋍䋎䋏䋐䋑䋒䋓䋔䋕䋖䋗䋘䋙䋚䋛䋜䋝䋞䋟 +
    42E0 䋠䋡䋢䋣䋤䋥䋦䋧䋨䋩䋪䋫䋬䋭䋮䋯䋰䋱䋲䋳䋴䋵䋶䋷䋸䋹䋺䋻䋼䋽䋾䋿 +
    4300 䌀䌁䌂䌃䌄䌅䌆䌇䌈䌉䌊䌋䌌䌍䌎䌏䌐䌑䌒䌓䌔䌕䌖䌗䌘䌙䌚䌛䌜䌝䌞䌟 +
    4320 䌠䌡䌢䌣䌤䌥䌦䌧䌨䌩䌪䌫䌬䌭䌮䌯䌰䌱䌲䌳䌴䌵䌶䌷䌸䌹䌺䌻䌼䌽䌾䌿 +
    4340 䍀䍁䍂䍃䍄䍅䍆䍇䍈䍉䍊䍋䍌䍍䍎䍏䍐䍑䍒䍓䍔䍕䍖䍗䍘䍙䍚䍛䍜䍝䍞䍟 +
    4360 䍠䍡䍢䍣䍤䍥䍦䍧䍨䍩䍪䍫䍬䍭䍮䍯䍰䍱䍲䍳䍴䍵䍶䍷䍸䍹䍺䍻䍼䍽䍾䍿 +
    4380 䎀䎁䎂䎃䎄䎅䎆䎇䎈䎉䎊䎋䎌䎍䎎䎏䎐䎑䎒䎓䎔䎕䎖䎗䎘䎙䎚䎛䎜䎝䎞䎟 +
    43A0 䎠䎡䎢䎣䎤䎥䎦䎧䎨䎩䎪䎫䎬䎭䎮䎯䎰䎱䎲䎳䎴䎵䎶䎷䎸䎹䎺䎻䎼䎽䎾䎿 +
    43C0 䏀䏁䏂䏃䏄䏅䏆䏇䏈䏉䏊䏋䏌䏍䏎䏏䏐䏑䏒䏓䏔䏕䏖䏗䏘䏙䏚䏛䏜䏝䏞䏟 +
    43E0 䏠䏡䏢䏣䏤䏥䏦䏧䏨䏩䏪䏫䏬䏭䏮䏯䏰䏱䏲䏳䏴䏵䏶䏷䏸䏹䏺䏻䏼䏽䏾䏿 +
    4400 䐀䐁䐂䐃䐄䐅䐆䐇䐈䐉䐊䐋䐌䐍䐎䐏䐐䐑䐒䐓䐔䐕䐖䐗䐘䐙䐚䐛䐜䐝䐞䐟 +
    4420 䐠䐡䐢䐣䐤䐥䐦䐧䐨䐩䐪䐫䐬䐭䐮䐯䐰䐱䐲䐳䐴䐵䐶䐷䐸䐹䐺䐻䐼䐽䐾䐿 +
    4440 䑀䑁䑂䑃䑄䑅䑆䑇䑈䑉䑊䑋䑌䑍䑎䑏䑐䑑䑒䑓䑔䑕䑖䑗䑘䑙䑚䑛䑜䑝䑞䑟 +
    4460 䑠䑡䑢䑣䑤䑥䑦䑧䑨䑩䑪䑫䑬䑭䑮䑯䑰䑱䑲䑳䑴䑵䑶䑷䑸䑹䑺䑻䑼䑽䑾䑿 +
    4480 䒀䒁䒂䒃䒄䒅䒆䒇䒈䒉䒊䒋䒌䒍䒎䒏䒐䒑䒒䒓䒔䒕䒖䒗䒘䒙䒚䒛䒜䒝䒞䒟 +
    44A0 䒠䒡䒢䒣䒤䒥䒦䒧䒨䒩䒪䒫䒬䒭䒮䒯䒰䒱䒲䒳䒴䒵䒶䒷䒸䒹䒺䒻䒼䒽䒾䒿 +
    44C0 䓀䓁䓂䓃䓄䓅䓆䓇䓈䓉䓊䓋䓌䓍䓎䓏䓐䓑䓒䓓䓔䓕䓖䓗䓘䓙䓚䓛䓜䓝䓞䓟 +
    44E0 䓠䓡䓢䓣䓤䓥䓦䓧䓨䓩䓪䓫䓬䓭䓮䓯䓰䓱䓲䓳䓴䓵䓶䓷䓸䓹䓺䓻䓼䓽䓾䓿 +
    4500 䔀䔁䔂䔃䔄䔅䔆䔇䔈䔉䔊䔋䔌䔍䔎䔏䔐䔑䔒䔓䔔䔕䔖䔗䔘䔙䔚䔛䔜䔝䔞䔟 +
    4520 䔠䔡䔢䔣䔤䔥䔦䔧䔨䔩䔪䔫䔬䔭䔮䔯䔰䔱䔲䔳䔴䔵䔶䔷䔸䔹䔺䔻䔼䔽䔾䔿 +
    4540 䕀䕁䕂䕃䕄䕅䕆䕇䕈䕉䕊䕋䕌䕍䕎䕏䕐䕑䕒䕓䕔䕕䕖䕗䕘䕙䕚䕛䕜䕝䕞䕟 +
    4560 䕠䕡䕢䕣䕤䕥䕦䕧䕨䕩䕪䕫䕬䕭䕮䕯䕰䕱䕲䕳䕴䕵䕶䕷䕸䕹䕺䕻䕼䕽䕾䕿 +
    4580 䖀䖁䖂䖃䖄䖅䖆䖇䖈䖉䖊䖋䖌䖍䖎䖏䖐䖑䖒䖓䖔䖕䖖䖗䖘䖙䖚䖛䖜䖝䖞䖟 +
    45A0 䖠䖡䖢䖣䖤䖥䖦䖧䖨䖩䖪䖫䖬䖭䖮䖯䖰䖱䖲䖳䖴䖵䖶䖷䖸䖹䖺䖻䖼䖽䖾䖿 +
    45C0 䗀䗁䗂䗃䗄䗅䗆䗇䗈䗉䗊䗋䗌䗍䗎䗏䗐䗑䗒䗓䗔䗕䗖䗗䗘䗙䗚䗛䗜䗝䗞䗟 +
    45E0 䗠䗡䗢䗣䗤䗥䗦䗧䗨䗩䗪䗫䗬䗭䗮䗯䗰䗱䗲䗳䗴䗵䗶䗷䗸䗹䗺䗻䗼䗽䗾䗿 +
    4600 䘀䘁䘂䘃䘄䘅䘆䘇䘈䘉䘊䘋䘌䘍䘎䘏䘐䘑䘒䘓䘔䘕䘖䘗䘘䘙䘚䘛䘜䘝䘞䘟 +
    4620 䘠䘡䘢䘣䘤䘥䘦䘧䘨䘩䘪䘫䘬䘭䘮䘯䘰䘱䘲䘳䘴䘵䘶䘷䘸䘹䘺䘻䘼䘽䘾䘿 +
    4640 䙀䙁䙂䙃䙄䙅䙆䙇䙈䙉䙊䙋䙌䙍䙎䙏䙐䙑䙒䙓䙔䙕䙖䙗䙘䙙䙚䙛䙜䙝䙞䙟 +
    4660 䙠䙡䙢䙣䙤䙥䙦䙧䙨䙩䙪䙫䙬䙭䙮䙯䙰䙱䙲䙳䙴䙵䙶䙷䙸䙹䙺䙻䙼䙽䙾䙿 +
    4680 䚀䚁䚂䚃䚄䚅䚆䚇䚈䚉䚊䚋䚌䚍䚎䚏䚐䚑䚒䚓䚔䚕䚖䚗䚘䚙䚚䚛䚜䚝䚞䚟 +
    46A0 䚠䚡䚢䚣䚤䚥䚦䚧䚨䚩䚪䚫䚬䚭䚮䚯䚰䚱䚲䚳䚴䚵䚶䚷䚸䚹䚺䚻䚼䚽䚾䚿 +
    46C0 䛀䛁䛂䛃䛄䛅䛆䛇䛈䛉䛊䛋䛌䛍䛎䛏䛐䛑䛒䛓䛔䛕䛖䛗䛘䛙䛚䛛䛜䛝䛞䛟 +
    46E0 䛠䛡䛢䛣䛤䛥䛦䛧䛨䛩䛪䛫䛬䛭䛮䛯䛰䛱䛲䛳䛴䛵䛶䛷䛸䛹䛺䛻䛼䛽䛾䛿 +
    4700 䜀䜁䜂䜃䜄䜅䜆䜇䜈䜉䜊䜋䜌䜍䜎䜏䜐䜑䜒䜓䜔䜕䜖䜗䜘䜙䜚䜛䜜䜝䜞䜟 +
    4720 䜠䜡䜢䜣䜤䜥䜦䜧䜨䜩䜪䜫䜬䜭䜮䜯䜰䜱䜲䜳䜴䜵䜶䜷䜸䜹䜺䜻䜼䜽䜾䜿 +
    4740 䝀䝁䝂䝃䝄䝅䝆䝇䝈䝉䝊䝋䝌䝍䝎䝏䝐䝑䝒䝓䝔䝕䝖䝗䝘䝙䝚䝛䝜䝝䝞䝟 +
    4760 䝠䝡䝢䝣䝤䝥䝦䝧䝨䝩䝪䝫䝬䝭䝮䝯䝰䝱䝲䝳䝴䝵䝶䝷䝸䝹䝺䝻䝼䝽䝾䝿 +
    4780 䞀䞁䞂䞃䞄䞅䞆䞇䞈䞉䞊䞋䞌䞍䞎䞏䞐䞑䞒䞓䞔䞕䞖䞗䞘䞙䞚䞛䞜䞝䞞䞟 +
    47A0 䞠䞡䞢䞣䞤䞥䞦䞧䞨䞩䞪䞫䞬䞭䞮䞯䞰䞱䞲䞳䞴䞵䞶䞷䞸䞹䞺䞻䞼䞽䞾䞿 +
    47C0 䟀䟁䟂䟃䟄䟅䟆䟇䟈䟉䟊䟋䟌䟍䟎䟏䟐䟑䟒䟓䟔䟕䟖䟗䟘䟙䟚䟛䟜䟝䟞䟟 +
    47E0 䟠䟡䟢䟣䟤䟥䟦䟧䟨䟩䟪䟫䟬䟭䟮䟯䟰䟱䟲䟳䟴䟵䟶䟷䟸䟹䟺䟻䟼䟽䟾䟿 +
    4800 䠀䠁䠂䠃䠄䠅䠆䠇䠈䠉䠊䠋䠌䠍䠎䠏䠐䠑䠒䠓䠔䠕䠖䠗䠘䠙䠚䠛䠜䠝䠞䠟 +
    4820 䠠䠡䠢䠣䠤䠥䠦䠧䠨䠩䠪䠫䠬䠭䠮䠯䠰䠱䠲䠳䠴䠵䠶䠷䠸䠹䠺䠻䠼䠽䠾䠿 +
    4840 䡀䡁䡂䡃䡄䡅䡆䡇䡈䡉䡊䡋䡌䡍䡎䡏䡐䡑䡒䡓䡔䡕䡖䡗䡘䡙䡚䡛䡜䡝䡞䡟 +
    4860 䡠䡡䡢䡣䡤䡥䡦䡧䡨䡩䡪䡫䡬䡭䡮䡯䡰䡱䡲䡳䡴䡵䡶䡷䡸䡹䡺䡻䡼䡽䡾䡿 +
    4880 䢀䢁䢂䢃䢄䢅䢆䢇䢈䢉䢊䢋䢌䢍䢎䢏䢐䢑䢒䢓䢔䢕䢖䢗䢘䢙䢚䢛䢜䢝䢞䢟 +
    48A0 䢠䢡䢢䢣䢤䢥䢦䢧䢨䢩䢪䢫䢬䢭䢮䢯䢰䢱䢲䢳䢴䢵䢶䢷䢸䢹䢺䢻䢼䢽䢾䢿 +
    48C0 䣀䣁䣂䣃䣄䣅䣆䣇䣈䣉䣊䣋䣌䣍䣎䣏䣐䣑䣒䣓䣔䣕䣖䣗䣘䣙䣚䣛䣜䣝䣞䣟 +
    48E0 䣠䣡䣢䣣䣤䣥䣦䣧䣨䣩䣪䣫䣬䣭䣮䣯䣰䣱䣲䣳䣴䣵䣶䣷䣸䣹䣺䣻䣼䣽䣾䣿 +
    4900 䤀䤁䤂䤃䤄䤅䤆䤇䤈䤉䤊䤋䤌䤍䤎䤏䤐䤑䤒䤓䤔䤕䤖䤗䤘䤙䤚䤛䤜䤝䤞䤟 +
    4920 䤠䤡䤢䤣䤤䤥䤦䤧䤨䤩䤪䤫䤬䤭䤮䤯䤰䤱䤲䤳䤴䤵䤶䤷䤸䤹䤺䤻䤼䤽䤾䤿 +
    4940 䥀䥁䥂䥃䥄䥅䥆䥇䥈䥉䥊䥋䥌䥍䥎䥏䥐䥑䥒䥓䥔䥕䥖䥗䥘䥙䥚䥛䥜䥝䥞䥟 +
    4960 䥠䥡䥢䥣䥤䥥䥦䥧䥨䥩䥪䥫䥬䥭䥮䥯䥰䥱䥲䥳䥴䥵䥶䥷䥸䥹䥺䥻䥼䥽䥾䥿 +
    4980 䦀䦁䦂䦃䦄䦅䦆䦇䦈䦉䦊䦋䦌䦍䦎䦏䦐䦑䦒䦓䦔䦕䦖䦗䦘䦙䦚䦛䦜䦝䦞䦟 +
    49A0 䦠䦡䦢䦣䦤䦥䦦䦧䦨䦩䦪䦫䦬䦭䦮䦯䦰䦱䦲䦳䦴䦵䦶䦷䦸䦹䦺䦻䦼䦽䦾䦿 +
    49C0 䧀䧁䧂䧃䧄䧅䧆䧇䧈䧉䧊䧋䧌䧍䧎䧏䧐䧑䧒䧓䧔䧕䧖䧗䧘䧙䧚䧛䧜䧝䧞䧟 +
    49E0 䧠䧡䧢䧣䧤䧥䧦䧧䧨䧩䧪䧫䧬䧭䧮䧯䧰䧱䧲䧳䧴䧵䧶䧷䧸䧹䧺䧻䧼䧽䧾䧿 +
    4A00 䨀䨁䨂䨃䨄䨅䨆䨇䨈䨉䨊䨋䨌䨍䨎䨏䨐䨑䨒䨓䨔䨕䨖䨗䨘䨙䨚䨛䨜䨝䨞䨟 +
    4A20 䨠䨡䨢䨣䨤䨥䨦䨧䨨䨩䨪䨫䨬䨭䨮䨯䨰䨱䨲䨳䨴䨵䨶䨷䨸䨹䨺䨻䨼䨽䨾䨿 +
    4A40 䩀䩁䩂䩃䩄䩅䩆䩇䩈䩉䩊䩋䩌䩍䩎䩏䩐䩑䩒䩓䩔䩕䩖䩗䩘䩙䩚䩛䩜䩝䩞䩟 +
    4A60 䩠䩡䩢䩣䩤䩥䩦䩧䩨䩩䩪䩫䩬䩭䩮䩯䩰䩱䩲䩳䩴䩵䩶䩷䩸䩹䩺䩻䩼䩽䩾䩿 +
    4A80 䪀䪁䪂䪃䪄䪅䪆䪇䪈䪉䪊䪋䪌䪍䪎䪏䪐䪑䪒䪓䪔䪕䪖䪗䪘䪙䪚䪛䪜䪝䪞䪟 +
    4AA0 䪠䪡䪢䪣䪤䪥䪦䪧䪨䪩䪪䪫䪬䪭䪮䪯䪰䪱䪲䪳䪴䪵䪶䪷䪸䪹䪺䪻䪼䪽䪾䪿 +
    4AC0 䫀䫁䫂䫃䫄䫅䫆䫇䫈䫉䫊䫋䫌䫍䫎䫏䫐䫑䫒䫓䫔䫕䫖䫗䫘䫙䫚䫛䫜䫝䫞䫟 +
    4AE0 䫠䫡䫢䫣䫤䫥䫦䫧䫨䫩䫪䫫䫬䫭䫮䫯䫰䫱䫲䫳䫴䫵䫶䫷䫸䫹䫺䫻䫼䫽䫾䫿 +
    4B00 䬀䬁䬂䬃䬄䬅䬆䬇䬈䬉䬊䬋䬌䬍䬎䬏䬐䬑䬒䬓䬔䬕䬖䬗䬘䬙䬚䬛䬜䬝䬞䬟 +
    4B20 䬠䬡䬢䬣䬤䬥䬦䬧䬨䬩䬪䬫䬬䬭䬮䬯䬰䬱䬲䬳䬴䬵䬶䬷䬸䬹䬺䬻䬼䬽䬾䬿 +
    4B40 䭀䭁䭂䭃䭄䭅䭆䭇䭈䭉䭊䭋䭌䭍䭎䭏䭐䭑䭒䭓䭔䭕䭖䭗䭘䭙䭚䭛䭜䭝䭞䭟 +
    4B60 䭠䭡䭢䭣䭤䭥䭦䭧䭨䭩䭪䭫䭬䭭䭮䭯䭰䭱䭲䭳䭴䭵䭶䭷䭸䭹䭺䭻䭼䭽䭾䭿 +
    4B80 䮀䮁䮂䮃䮄䮅䮆䮇䮈䮉䮊䮋䮌䮍䮎䮏䮐䮑䮒䮓䮔䮕䮖䮗䮘䮙䮚䮛䮜䮝䮞䮟 +
    4BA0 䮠䮡䮢䮣䮤䮥䮦䮧䮨䮩䮪䮫䮬䮭䮮䮯䮰䮱䮲䮳䮴䮵䮶䮷䮸䮹䮺䮻䮼䮽䮾䮿 +
    4BC0 䯀䯁䯂䯃䯄䯅䯆䯇䯈䯉䯊䯋䯌䯍䯎䯏䯐䯑䯒䯓䯔䯕䯖䯗䯘䯙䯚䯛䯜䯝䯞䯟 +
    4BE0 䯠䯡䯢䯣䯤䯥䯦䯧䯨䯩䯪䯫䯬䯭䯮䯯䯰䯱䯲䯳䯴䯵䯶䯷䯸䯹䯺䯻䯼䯽䯾䯿 +
    4C00 䰀䰁䰂䰃䰄䰅䰆䰇䰈䰉䰊䰋䰌䰍䰎䰏䰐䰑䰒䰓䰔䰕䰖䰗䰘䰙䰚䰛䰜䰝䰞䰟 +
    4C20 䰠䰡䰢䰣䰤䰥䰦䰧䰨䰩䰪䰫䰬䰭䰮䰯䰰䰱䰲䰳䰴䰵䰶䰷䰸䰹䰺䰻䰼䰽䰾䰿 +
    4C40 䱀䱁䱂䱃䱄䱅䱆䱇䱈䱉䱊䱋䱌䱍䱎䱏䱐䱑䱒䱓䱔䱕䱖䱗䱘䱙䱚䱛䱜䱝䱞䱟 +
    4C60 䱠䱡䱢䱣䱤䱥䱦䱧䱨䱩䱪䱫䱬䱭䱮䱯䱰䱱䱲䱳䱴䱵䱶䱷䱸䱹䱺䱻䱼䱽䱾䱿 +
    4C80 䲀䲁䲂䲃䲄䲅䲆䲇䲈䲉䲊䲋䲌䲍䲎䲏䲐䲑䲒䲓䲔䲕䲖䲗䲘䲙䲚䲛䲜䲝䲞䲟 +
    4CA0 䲠䲡䲢䲣䲤䲥䲦䲧䲨䲩䲪䲫䲬䲭䲮䲯䲰䲱䲲䲳䲴䲵䲶䲷䲸䲹䲺䲻䲼䲽䲾䲿 +
    4CC0 䳀䳁䳂䳃䳄䳅䳆䳇䳈䳉䳊䳋䳌䳍䳎䳏䳐䳑䳒䳓䳔䳕䳖䳗䳘䳙䳚䳛䳜䳝䳞䳟 +
    4CE0 䳠䳡䳢䳣䳤䳥䳦䳧䳨䳩䳪䳫䳬䳭䳮䳯䳰䳱䳲䳳䳴䳵䳶䳷䳸䳹䳺䳻䳼䳽䳾䳿 +
    4D00 䴀䴁䴂䴃䴄䴅䴆䴇䴈䴉䴊䴋䴌䴍䴎䴏䴐䴑䴒䴓䴔䴕䴖䴗䴘䴙䴚䴛䴜䴝䴞䴟 +
    4D20 䴠䴡䴢䴣䴤䴥䴦䴧䴨䴩䴪䴫䴬䴭䴮䴯䴰䴱䴲䴳䴴䴵䴶䴷䴸䴹䴺䴻䴼䴽䴾䴿 +
    4D40 䵀䵁䵂䵃䵄䵅䵆䵇䵈䵉䵊䵋䵌䵍䵎䵏䵐䵑䵒䵓䵔䵕䵖䵗䵘䵙䵚䵛䵜䵝䵞䵟 +
    4D60 䵠䵡䵢䵣䵤䵥䵦䵧䵨䵩䵪䵫䵬䵭䵮䵯䵰䵱䵲䵳䵴䵵䵶䵷䵸䵹䵺䵻䵼䵽䵾䵿 +
    4D80 䶀䶁䶂䶃䶄䶅䶆䶇䶈䶉䶊䶋䶌䶍䶎䶏䶐䶑䶒䶓䶔䶕䶖䶗䶘䶙䶚䶛䶜䶝䶞䶟 +
    4DA0 䶠䶡䶢䶣䶤䶥䶦䶧䶨䶩䶪䶫䶬䶭䶮䶯䶰䶱䶲䶳䶴䶵䶶䶷䶸䶹䶺䶻䶼䶽䶾䶿 +
    4DC0 ䷀䷁䷂䷃䷄䷅䷆䷇䷈䷉䷊䷋䷌䷍䷎䷏䷐䷑䷒䷓䷔䷕䷖䷗䷘䷙䷚䷛䷜䷝䷞䷟ +
    4DE0 ䷠䷡䷢䷣䷤䷥䷦䷧䷨䷩䷪䷫䷬䷭䷮䷯䷰䷱䷲䷳䷴䷵䷶䷷䷸䷹䷺䷻䷼䷽䷾䷿ +
    4E00 一丁丂七丄丅丆万丈三上下丌不与丏丐丑丒专且丕世丗丘丙业丛东丝丞丟 +
    4E20 丠両丢丣两严並丧丨丩个丫丬中丮丯丰丱串丳临丵丶丷丸丹为主丼丽举丿 +
    4E40 乀乁乂乃乄久乆乇么义乊之乌乍乎乏乐乑乒乓乔乕乖乗乘乙乚乛乜九乞也 +
    4E60 习乡乢乣乤乥书乧乨乩乪乫乬乭乮乯买乱乲乳乴乵乶乷乸乹乺乻乼乽乾乿 +
    4E80 亀亁亂亃亄亅了亇予争亊事二亍于亏亐云互亓五井亖亗亘亙亚些亜亝亞亟 +
    4EA0 亠亡亢亣交亥亦产亨亩亪享京亭亮亯亰亱亲亳亴亵亶亷亸亹人亻亼亽亾亿 +
    4EC0 什仁仂仃仄仅仆仇仈仉今介仌仍从仏仐仑仒仓仔仕他仗付仙仚仛仜仝仞仟 +
    4EE0 仠仡仢代令以仦仧仨仩仪仫们仭仮仯仰仱仲仳仴仵件价仸仹仺任仼份仾仿 +
    4F00 伀企伂伃伄伅伆伇伈伉伊伋伌伍伎伏伐休伒伓伔伕伖众优伙会伛伜伝伞伟 +
    4F20 传伡伢伣伤伥伦伧伨伩伪伫伬伭伮伯估伱伲伳伴伵伶伷伸伹伺伻似伽伾伿 +
    4F40 佀佁佂佃佄佅但佇佈佉佊佋佌位低住佐佑佒体佔何佖佗佘余佚佛作佝佞佟 +
    4F60 你佡佢佣佤佥佦佧佨佩佪佫佬佭佮佯佰佱佲佳佴併佶佷佸佹佺佻佼佽佾使 +
    4F80 侀侁侂侃侄侅來侇侈侉侊例侌侍侎侏侐侑侒侓侔侕侖侗侘侙侚供侜依侞侟 +
    4FA0 侠価侢侣侤侥侦侧侨侩侪侫侬侭侮侯侰侱侲侳侴侵侶侷侸侹侺侻侼侽侾便 +
    4FC0 俀俁係促俄俅俆俇俈俉俊俋俌俍俎俏俐俑俒俓俔俕俖俗俘俙俚俛俜保俞俟 +
    4FE0 俠信俢俣俤俥俦俧俨俩俪俫俬俭修俯俰俱俲俳俴俵俶俷俸俹俺俻俼俽俾俿 +
    5000 倀倁倂倃倄倅倆倇倈倉倊個倌倍倎倏倐們倒倓倔倕倖倗倘候倚倛倜倝倞借 +
    5020 倠倡倢倣値倥倦倧倨倩倪倫倬倭倮倯倰倱倲倳倴倵倶倷倸倹债倻值倽倾倿 +
    5040 偀偁偂偃偄偅偆假偈偉偊偋偌偍偎偏偐偑偒偓偔偕偖偗偘偙做偛停偝偞偟 +
    5060 偠偡偢偣偤健偦偧偨偩偪偫偬偭偮偯偰偱偲偳側偵偶偷偸偹偺偻偼偽偾偿 +
    5080 傀傁傂傃傄傅傆傇傈傉傊傋傌傍傎傏傐傑傒傓傔傕傖傗傘備傚傛傜傝傞傟 +
    50A0 傠傡傢傣傤傥傦傧储傩傪傫催傭傮傯傰傱傲傳傴債傶傷傸傹傺傻傼傽傾傿 +
    50C0 僀僁僂僃僄僅僆僇僈僉僊僋僌働僎像僐僑僒僓僔僕僖僗僘僙僚僛僜僝僞僟 +
    50E0 僠僡僢僣僤僥僦僧僨僩僪僫僬僭僮僯僰僱僲僳僴僵僶僷僸價僺僻僼僽僾僿 +
    5100 儀儁儂儃億儅儆儇儈儉儊儋儌儍儎儏儐儑儒儓儔儕儖儗儘儙儚儛儜儝儞償 +
    5120 儠儡儢儣儤儥儦儧儨儩優儫儬儭儮儯儰儱儲儳儴儵儶儷儸儹儺儻儼儽儾儿 +
    5140 兀允兂元兄充兆兇先光兊克兌免兎兏児兑兒兓兔兕兖兗兘兙党兛兜兝兞兟 +
    5160 兠兡兢兣兤入兦內全兩兪八公六兮兯兰共兲关兴兵其具典兹兺养兼兽兾兿 +
    5180 冀冁冂冃冄内円冇冈冉冊冋册再冎冏冐冑冒冓冔冕冖冗冘写冚军农冝冞冟 +
    51A0 冠冡冢冣冤冥冦冧冨冩冪冫冬冭冮冯冰冱冲决冴况冶冷冸冹冺冻冼冽冾冿 +
    51C0 净凁凂凃凄凅准凇凈凉凊凋凌凍凎减凐凑凒凓凔凕凖凗凘凙凚凛凜凝凞凟 +
    51E0 几凡凢凣凤凥処凧凨凩凪凫凬凭凮凯凰凱凲凳凴凵凶凷凸凹出击凼函凾凿 +
    5200 刀刁刂刃刄刅分切刈刉刊刋刌刍刎刏刐刑划刓刔刕刖列刘则刚创刜初刞刟 +
    5220 删刡刢刣判別刦刧刨利刪别刬刭刮刯到刱刲刳刴刵制刷券刹刺刻刼刽刾刿 +
    5240 剀剁剂剃剄剅剆則剈剉削剋剌前剎剏剐剑剒剓剔剕剖剗剘剙剚剛剜剝剞剟 +
    5260 剠剡剢剣剤剥剦剧剨剩剪剫剬剭剮副剰剱割剳剴創剶剷剸剹剺剻剼剽剾剿 +
    5280 劀劁劂劃劄劅劆劇劈劉劊劋劌劍劎劏劐劑劒劓劔劕劖劗劘劙劚力劜劝办功 +
    52A0 加务劢劣劤劥劦劧动助努劫劬劭劮劯劰励劲劳労劵劶劷劸効劺劻劼劽劾势 +
    52C0 勀勁勂勃勄勅勆勇勈勉勊勋勌勍勎勏勐勑勒勓勔動勖勗勘務勚勛勜勝勞募 +
    52E0 勠勡勢勣勤勥勦勧勨勩勪勫勬勭勮勯勰勱勲勳勴勵勶勷勸勹勺勻勼勽勾勿 +
    5300 匀匁匂匃匄包匆匇匈匉匊匋匌匍匎匏匐匑匒匓匔匕化北匘匙匚匛匜匝匞匟 +
    5320 匠匡匢匣匤匥匦匧匨匩匪匫匬匭匮匯匰匱匲匳匴匵匶匷匸匹区医匼匽匾匿 +
    5340 區十卂千卄卅卆升午卉半卋卌卍华协卐卑卒卓協单卖南単卙博卛卜卝卞卟 +
    5360 占卡卢卣卤卥卦卧卨卩卪卫卬卭卮卯印危卲即却卵卶卷卸卹卺卻卼卽卾卿 +
    5380 厀厁厂厃厄厅历厇厈厉厊压厌厍厎厏厐厑厒厓厔厕厖厗厘厙厚厛厜厝厞原 +
    53A0 厠厡厢厣厤厥厦厧厨厩厪厫厬厭厮厯厰厱厲厳厴厵厶厷厸厹厺去厼厽厾县 +
    53C0 叀叁参參叄叅叆叇又叉及友双反収叏叐发叒叓叔叕取受变叙叚叛叜叝叞叟 +
    53E0 叠叡叢口古句另叧叨叩只叫召叭叮可台叱史右叴叵叶号司叹叺叻叼叽叾叿 +
    5400 吀吁吂吃各吅吆吇合吉吊吋同名后吏吐向吒吓吔吕吖吗吘吙吚君吜吝吞吟 +
    5420 吠吡吢吣吤吥否吧吨吩吪含听吭吮启吰吱吲吳吴吵吶吷吸吹吺吻吼吽吾吿 +
    5440 呀呁呂呃呄呅呆呇呈呉告呋呌呍呎呏呐呑呒呓呔呕呖呗员呙呚呛呜呝呞呟 +
    5460 呠呡呢呣呤呥呦呧周呩呪呫呬呭呮呯呰呱呲味呴呵呶呷呸呹呺呻呼命呾呿 +
    5480 咀咁咂咃咄咅咆咇咈咉咊咋和咍咎咏咐咑咒咓咔咕咖咗咘咙咚咛咜咝咞咟 +
    54A0 咠咡咢咣咤咥咦咧咨咩咪咫咬咭咮咯咰咱咲咳咴咵咶咷咸咹咺咻咼咽咾咿 +
    54C0 哀品哂哃哄哅哆哇哈哉哊哋哌响哎哏哐哑哒哓哔哕哖哗哘哙哚哛哜哝哞哟 +
    54E0 哠員哢哣哤哥哦哧哨哩哪哫哬哭哮哯哰哱哲哳哴哵哶哷哸哹哺哻哼哽哾哿 +
    5500 唀唁唂唃唄唅唆唇唈唉唊唋唌唍唎唏唐唑唒唓唔唕唖唗唘唙唚唛唜唝唞唟 +
    5520 唠唡唢唣唤唥唦唧唨唩唪唫唬唭售唯唰唱唲唳唴唵唶唷唸唹唺唻唼唽唾唿 +
    5540 啀啁啂啃啄啅商啇啈啉啊啋啌啍啎問啐啑啒啓啔啕啖啗啘啙啚啛啜啝啞啟 +
    5560 啠啡啢啣啤啥啦啧啨啩啪啫啬啭啮啯啰啱啲啳啴啵啶啷啸啹啺啻啼啽啾啿 +
    5580 喀喁喂喃善喅喆喇喈喉喊喋喌喍喎喏喐喑喒喓喔喕喖喗喘喙喚喛喜喝喞喟 +
    55A0 喠喡喢喣喤喥喦喧喨喩喪喫喬喭單喯喰喱喲喳喴喵営喷喸喹喺喻喼喽喾喿 +
    55C0 嗀嗁嗂嗃嗄嗅嗆嗇嗈嗉嗊嗋嗌嗍嗎嗏嗐嗑嗒嗓嗔嗕嗖嗗嗘嗙嗚嗛嗜嗝嗞嗟 +
    55E0 嗠嗡嗢嗣嗤嗥嗦嗧嗨嗩嗪嗫嗬嗭嗮嗯嗰嗱嗲嗳嗴嗵嗶嗷嗸嗹嗺嗻嗼嗽嗾嗿 +
    5600 嘀嘁嘂嘃嘄嘅嘆嘇嘈嘉嘊嘋嘌嘍嘎嘏嘐嘑嘒嘓嘔嘕嘖嘗嘘嘙嘚嘛嘜嘝嘞嘟 +
    5620 嘠嘡嘢嘣嘤嘥嘦嘧嘨嘩嘪嘫嘬嘭嘮嘯嘰嘱嘲嘳嘴嘵嘶嘷嘸嘹嘺嘻嘼嘽嘾嘿 +
    5640 噀噁噂噃噄噅噆噇噈噉噊噋噌噍噎噏噐噑噒噓噔噕噖噗噘噙噚噛噜噝噞噟 +
    5660 噠噡噢噣噤噥噦噧器噩噪噫噬噭噮噯噰噱噲噳噴噵噶噷噸噹噺噻噼噽噾噿 +
    5680 嚀嚁嚂嚃嚄嚅嚆嚇嚈嚉嚊嚋嚌嚍嚎嚏嚐嚑嚒嚓嚔嚕嚖嚗嚘嚙嚚嚛嚜嚝嚞嚟 +
    56A0 嚠嚡嚢嚣嚤嚥嚦嚧嚨嚩嚪嚫嚬嚭嚮嚯嚰嚱嚲嚳嚴嚵嚶嚷嚸嚹嚺嚻嚼嚽嚾嚿 +
    56C0 囀囁囂囃囄囅囆囇囈囉囊囋囌囍囎囏囐囑囒囓囔囕囖囗囘囙囚四囜囝回囟 +
    56E0 因囡团団囤囥囦囧囨囩囪囫囬园囮囯困囱囲図围囵囶囷囸囹固囻囼国图囿 +
    5700 圀圁圂圃圄圅圆圇圈圉圊國圌圍圎圏圐圑園圓圔圕圖圗團圙圚圛圜圝圞土 +
    5720 圠圡圢圣圤圥圦圧在圩圪圫圬圭圮圯地圱圲圳圴圵圶圷圸圹场圻圼圽圾圿 +
    5740 址坁坂坃坄坅坆均坈坉坊坋坌坍坎坏坐坑坒坓坔坕坖块坘坙坚坛坜坝坞坟 +
    5760 坠坡坢坣坤坥坦坧坨坩坪坫坬坭坮坯坰坱坲坳坴坵坶坷坸坹坺坻坼坽坾坿 +
    5780 垀垁垂垃垄垅垆垇垈垉垊型垌垍垎垏垐垑垒垓垔垕垖垗垘垙垚垛垜垝垞垟 +
    57A0 垠垡垢垣垤垥垦垧垨垩垪垫垬垭垮垯垰垱垲垳垴垵垶垷垸垹垺垻垼垽垾垿 +
    57C0 埀埁埂埃埄埅埆埇埈埉埊埋埌埍城埏埐埑埒埓埔埕埖埗埘埙埚埛埜埝埞域 +
    57E0 埠埡埢埣埤埥埦埧埨埩埪埫埬埭埮埯埰埱埲埳埴埵埶執埸培基埻埼埽埾埿 +
    5800 堀堁堂堃堄堅堆堇堈堉堊堋堌堍堎堏堐堑堒堓堔堕堖堗堘堙堚堛堜堝堞堟 +
    5820 堠堡堢堣堤堥堦堧堨堩堪堫堬堭堮堯堰報堲堳場堵堶堷堸堹堺堻堼堽堾堿 +
    5840 塀塁塂塃塄塅塆塇塈塉塊塋塌塍塎塏塐塑塒塓塔塕塖塗塘塙塚塛塜塝塞塟 +
    5860 塠塡塢塣塤塥塦塧塨塩塪填塬塭塮塯塰塱塲塳塴塵塶塷塸塹塺塻塼塽塾塿 +
    5880 墀墁墂境墄墅墆墇墈墉墊墋墌墍墎墏墐墑墒墓墔墕墖増墘墙墚墛墜墝增墟 +
    58A0 墠墡墢墣墤墥墦墧墨墩墪墫墬墭墮墯墰墱墲墳墴墵墶墷墸墹墺墻墼墽墾墿 +
    58C0 壀壁壂壃壄壅壆壇壈壉壊壋壌壍壎壏壐壑壒壓壔壕壖壗壘壙壚壛壜壝壞壟 +
    58E0 壠壡壢壣壤壥壦壧壨壩壪士壬壭壮壯声壱売壳壴壵壶壷壸壹壺壻壼壽壾壿 +
    5900 夀夁夂夃处夅夆备夈変夊夋夌复夎夏夐夑夒夓夔夕外夗夘夙多夛夜夝夞够 +
    5920 夠夡夢夣夤夥夦大夨天太夫夬夭央夯夰失夲夳头夵夶夷夸夹夺夻夼夽夾夿 +
    5940 奀奁奂奃奄奅奆奇奈奉奊奋奌奍奎奏奐契奒奓奔奕奖套奘奙奚奛奜奝奞奟 +
    5960 奠奡奢奣奤奥奦奧奨奩奪奫奬奭奮奯奰奱奲女奴奵奶奷奸她奺奻奼好奾奿 +
    5980 妀妁如妃妄妅妆妇妈妉妊妋妌妍妎妏妐妑妒妓妔妕妖妗妘妙妚妛妜妝妞妟 +
    59A0 妠妡妢妣妤妥妦妧妨妩妪妫妬妭妮妯妰妱妲妳妴妵妶妷妸妹妺妻妼妽妾妿 +
    59C0 姀姁姂姃姄姅姆姇姈姉姊始姌姍姎姏姐姑姒姓委姕姖姗姘姙姚姛姜姝姞姟 +
    59E0 姠姡姢姣姤姥姦姧姨姩姪姫姬姭姮姯姰姱姲姳姴姵姶姷姸姹姺姻姼姽姾姿 +
    5A00 娀威娂娃娄娅娆娇娈娉娊娋娌娍娎娏娐娑娒娓娔娕娖娗娘娙娚娛娜娝娞娟 +
    5A20 娠娡娢娣娤娥娦娧娨娩娪娫娬娭娮娯娰娱娲娳娴娵娶娷娸娹娺娻娼娽娾娿 +
    5A40 婀婁婂婃婄婅婆婇婈婉婊婋婌婍婎婏婐婑婒婓婔婕婖婗婘婙婚婛婜婝婞婟 +
    5A60 婠婡婢婣婤婥婦婧婨婩婪婫婬婭婮婯婰婱婲婳婴婵婶婷婸婹婺婻婼婽婾婿 +
    5A80 媀媁媂媃媄媅媆媇媈媉媊媋媌媍媎媏媐媑媒媓媔媕媖媗媘媙媚媛媜媝媞媟 +
    5AA0 媠媡媢媣媤媥媦媧媨媩媪媫媬媭媮媯媰媱媲媳媴媵媶媷媸媹媺媻媼媽媾媿 +
    5AC0 嫀嫁嫂嫃嫄嫅嫆嫇嫈嫉嫊嫋嫌嫍嫎嫏嫐嫑嫒嫓嫔嫕嫖嫗嫘嫙嫚嫛嫜嫝嫞嫟 +
    5AE0 嫠嫡嫢嫣嫤嫥嫦嫧嫨嫩嫪嫫嫬嫭嫮嫯嫰嫱嫲嫳嫴嫵嫶嫷嫸嫹嫺嫻嫼嫽嫾嫿 +
    5B00 嬀嬁嬂嬃嬄嬅嬆嬇嬈嬉嬊嬋嬌嬍嬎嬏嬐嬑嬒嬓嬔嬕嬖嬗嬘嬙嬚嬛嬜嬝嬞嬟 +
    5B20 嬠嬡嬢嬣嬤嬥嬦嬧嬨嬩嬪嬫嬬嬭嬮嬯嬰嬱嬲嬳嬴嬵嬶嬷嬸嬹嬺嬻嬼嬽嬾嬿 +
    5B40 孀孁孂孃孄孅孆孇孈孉孊孋孌孍孎孏子孑孒孓孔孕孖字存孙孚孛孜孝孞孟 +
    5B60 孠孡孢季孤孥学孧孨孩孪孫孬孭孮孯孰孱孲孳孴孵孶孷學孹孺孻孼孽孾孿 +
    5B80 宀宁宂它宄宅宆宇守安宊宋完宍宎宏宐宑宒宓宔宕宖宗官宙定宛宜宝实実 +
    5BA0 宠审客宣室宥宦宧宨宩宪宫宬宭宮宯宰宱宲害宴宵家宷宸容宺宻宼宽宾宿 +
    5BC0 寀寁寂寃寄寅密寇寈寉寊寋富寍寎寏寐寑寒寓寔寕寖寗寘寙寚寛寜寝寞察 +
    5BE0 寠寡寢寣寤寥實寧寨審寪寫寬寭寮寯寰寱寲寳寴寵寶寷寸对寺寻导寽対寿 +
    5C00 尀封専尃射尅将將專尉尊尋尌對導小尐少尒尓尔尕尖尗尘尙尚尛尜尝尞尟 +
    5C20 尠尡尢尣尤尥尦尧尨尩尪尫尬尭尮尯尰就尲尳尴尵尶尷尸尹尺尻尼尽尾尿 +
    5C40 局屁层屃屄居屆屇屈屉届屋屌屍屎屏屐屑屒屓屔展屖屗屘屙屚屛屜屝属屟 +
    5C60 屠屡屢屣層履屦屧屨屩屪屫屬屭屮屯屰山屲屳屴屵屶屷屸屹屺屻屼屽屾屿 +
    5C80 岀岁岂岃岄岅岆岇岈岉岊岋岌岍岎岏岐岑岒岓岔岕岖岗岘岙岚岛岜岝岞岟 +
    5CA0 岠岡岢岣岤岥岦岧岨岩岪岫岬岭岮岯岰岱岲岳岴岵岶岷岸岹岺岻岼岽岾岿 +
    5CC0 峀峁峂峃峄峅峆峇峈峉峊峋峌峍峎峏峐峑峒峓峔峕峖峗峘峙峚峛峜峝峞峟 +
    5CE0 峠峡峢峣峤峥峦峧峨峩峪峫峬峭峮峯峰峱峲峳峴峵島峷峸峹峺峻峼峽峾峿 +
    5D00 崀崁崂崃崄崅崆崇崈崉崊崋崌崍崎崏崐崑崒崓崔崕崖崗崘崙崚崛崜崝崞崟 +
    5D20 崠崡崢崣崤崥崦崧崨崩崪崫崬崭崮崯崰崱崲崳崴崵崶崷崸崹崺崻崼崽崾崿 +br />5D40 嵀嵁嵂嵃嵄嵅嵆嵇嵈嵉嵊嵋嵌嵍嵎嵏嵐嵑嵒嵓嵔嵕嵖嵗嵘嵙嵚嵛嵜嵝嵞嵟 +
    5D60 嵠嵡嵢嵣嵤嵥嵦嵧嵨嵩嵪嵫嵬嵭嵮嵯嵰嵱嵲嵳嵴嵵嵶嵷嵸嵹嵺嵻嵼嵽嵾嵿 +
    5D80 嶀嶁嶂嶃嶄嶅嶆嶇嶈嶉嶊嶋嶌嶍嶎嶏嶐嶑嶒嶓嶔嶕嶖嶗嶘嶙嶚嶛嶜嶝嶞嶟 +
    5DA0 嶠嶡嶢嶣嶤嶥嶦嶧嶨嶩嶪嶫嶬嶭嶮嶯嶰嶱嶲嶳嶴嶵嶶嶷嶸嶹嶺嶻嶼嶽嶾嶿 +
    5DC0 巀巁巂巃巄巅巆巇巈巉巊巋巌巍巎巏巐巑巒巓巔巕巖巗巘巙巚巛巜川州巟 +
    5DE0 巠巡巢巣巤工左巧巨巩巪巫巬巭差巯巰己已巳巴巵巶巷巸巹巺巻巼巽巾巿 +
    5E00 帀币市布帄帅帆帇师帉帊帋希帍帎帏帐帑帒帓帔帕帖帗帘帙帚帛帜帝帞帟 +
    5E20 帠帡帢帣帤帥带帧帨帩帪師帬席帮帯帰帱帲帳帴帵帶帷常帹帺帻帼帽帾帿 +
    5E40 幀幁幂幃幄幅幆幇幈幉幊幋幌幍幎幏幐幑幒幓幔幕幖幗幘幙幚幛幜幝幞幟 +
    5E60 幠幡幢幣幤幥幦幧幨幩幪幫幬幭幮幯幰幱干平年幵并幷幸幹幺幻幼幽幾广 +
    5E80 庀庁庂広庄庅庆庇庈庉床庋庌庍庎序庐庑庒库应底庖店庘庙庚庛府庝庞废 +
    5EA0 庠庡庢庣庤庥度座庨庩庪庫庬庭庮庯庰庱庲庳庴庵庶康庸庹庺庻庼庽庾庿 +
    5EC0 廀廁廂廃廄廅廆廇廈廉廊廋廌廍廎廏廐廑廒廓廔廕廖廗廘廙廚廛廜廝廞廟 +
    5EE0 廠廡廢廣廤廥廦廧廨廩廪廫廬廭廮廯廰廱廲廳廴廵延廷廸廹建廻廼廽廾廿 +
    5F00 开弁异弃弄弅弆弇弈弉弊弋弌弍弎式弐弑弒弓弔引弖弗弘弙弚弛弜弝弞弟 +
    5F20 张弡弢弣弤弥弦弧弨弩弪弫弬弭弮弯弰弱弲弳弴張弶強弸弹强弻弼弽弾弿 +
    5F40 彀彁彂彃彄彅彆彇彈彉彊彋彌彍彎彏彐彑归当彔录彖彗彘彙彚彛彜彝彞彟 +
    5F60 彠彡形彣彤彥彦彧彨彩彪彫彬彭彮彯彰影彲彳彴彵彶彷彸役彺彻彼彽彾彿 +
    5F80 往征徂徃径待徆徇很徉徊律後徍徎徏徐徑徒従徔徕徖得徘徙徚徛徜徝從徟 +
    5FA0 徠御徢徣徤徥徦徧徨復循徫徬徭微徯徰徱徲徳徴徵徶德徸徹徺徻徼徽徾徿 +
    5FC0 忀忁忂心忄必忆忇忈忉忊忋忌忍忎忏忐忑忒忓忔忕忖志忘忙忚忛応忝忞忟 +
    5FE0 忠忡忢忣忤忥忦忧忨忩忪快忬忭忮忯忰忱忲忳忴念忶忷忸忹忺忻忼忽忾忿 +
    6000 怀态怂怃怄怅怆怇怈怉怊怋怌怍怎怏怐怑怒怓怔怕怖怗怘怙怚怛怜思怞怟 +
    6020 怠怡怢怣怤急怦性怨怩怪怫怬怭怮怯怰怱怲怳怴怵怶怷怸怹怺总怼怽怾怿 +
    6040 恀恁恂恃恄恅恆恇恈恉恊恋恌恍恎恏恐恑恒恓恔恕恖恗恘恙恚恛恜恝恞恟 +
    6060 恠恡恢恣恤恥恦恧恨恩恪恫恬恭恮息恰恱恲恳恴恵恶恷恸恹恺恻恼恽恾恿 +
    6080 悀悁悂悃悄悅悆悇悈悉悊悋悌悍悎悏悐悑悒悓悔悕悖悗悘悙悚悛悜悝悞悟 +
    60A0 悠悡悢患悤悥悦悧您悩悪悫悬悭悮悯悰悱悲悳悴悵悶悷悸悹悺悻悼悽悾悿 +
    60C0 惀惁惂惃惄情惆惇惈惉惊惋惌惍惎惏惐惑惒惓惔惕惖惗惘惙惚惛惜惝惞惟 +
    60E0 惠惡惢惣惤惥惦惧惨惩惪惫惬惭惮惯惰惱惲想惴惵惶惷惸惹惺惻惼惽惾惿 +
    6100 愀愁愂愃愄愅愆愇愈愉愊愋愌愍愎意愐愑愒愓愔愕愖愗愘愙愚愛愜愝愞感 +
    6120 愠愡愢愣愤愥愦愧愨愩愪愫愬愭愮愯愰愱愲愳愴愵愶愷愸愹愺愻愼愽愾愿 +
    6140 慀慁慂慃慄慅慆慇慈慉慊態慌慍慎慏慐慑慒慓慔慕慖慗慘慙慚慛慜慝慞慟 +
    6160 慠慡慢慣慤慥慦慧慨慩慪慫慬慭慮慯慰慱慲慳慴慵慶慷慸慹慺慻慼慽慾慿 +
    6180 憀憁憂憃憄憅憆憇憈憉憊憋憌憍憎憏憐憑憒憓憔憕憖憗憘憙憚憛憜憝憞憟 +
    61A0 憠憡憢憣憤憥憦憧憨憩憪憫憬憭憮憯憰憱憲憳憴憵憶憷憸憹憺憻憼憽憾憿 +
    61C0 懀懁懂懃懄懅懆懇懈應懊懋懌懍懎懏懐懑懒懓懔懕懖懗懘懙懚懛懜懝懞懟 +
    61E0 懠懡懢懣懤懥懦懧懨懩懪懫懬懭懮懯懰懱懲懳懴懵懶懷懸懹懺懻懼懽懾懿 +
    6200 戀戁戂戃戄戅戆戇戈戉戊戋戌戍戎戏成我戒戓戔戕或戗战戙戚戛戜戝戞戟 +
    6220 戠戡戢戣戤戥戦戧戨戩截戫戬戭戮戯戰戱戲戳戴戵戶户戸戹戺戻戼戽戾房 +
    6240 所扁扂扃扄扅扆扇扈扉扊手扌才扎扏扐扑扒打扔払扖扗托扙扚扛扜扝扞扟 +
    6260 扠扡扢扣扤扥扦执扨扩扪扫扬扭扮扯扰扱扲扳扴扵扶扷扸批扺扻扼扽找承 +
    6280 技抁抂抃抄抅抆抇抈抉把抋抌抍抎抏抐抑抒抓抔投抖抗折抙抚抛抜抝択抟 +
    62A0 抠抡抢抣护报抦抧抨抩抪披抬抭抮抯抰抱抲抳抴抵抶抷抸抹抺抻押抽抾抿 +
    62C0 拀拁拂拃拄担拆拇拈拉拊拋拌拍拎拏拐拑拒拓拔拕拖拗拘拙拚招拜拝拞拟 +
    62E0 拠拡拢拣拤拥拦拧拨择拪拫括拭拮拯拰拱拲拳拴拵拶拷拸拹拺拻拼拽拾拿 +
    6300 挀持挂挃挄挅挆指挈按挊挋挌挍挎挏挐挑挒挓挔挕挖挗挘挙挚挛挜挝挞挟 +
    6320 挠挡挢挣挤挥挦挧挨挩挪挫挬挭挮振挰挱挲挳挴挵挶挷挸挹挺挻挼挽挾挿 +
    6340 捀捁捂捃捄捅捆捇捈捉捊捋捌捍捎捏捐捑捒捓捔捕捖捗捘捙捚捛捜捝捞损 +
    6360 捠捡换捣捤捥捦捧捨捩捪捫捬捭据捯捰捱捲捳捴捵捶捷捸捹捺捻捼捽捾捿 +
    6380 掀掁掂掃掄掅掆掇授掉掊掋掌掍掎掏掐掑排掓掔掕掖掗掘掙掚掛掜掝掞掟 +
    63A0 掠採探掣掤接掦控推掩措掫掬掭掮掯掰掱掲掳掴掵掶掷掸掹掺掻掼掽掾掿 +
    63C0 揀揁揂揃揄揅揆揇揈揉揊揋揌揍揎描提揑插揓揔揕揖揗揘揙揚換揜揝揞揟 +
    63E0 揠握揢揣揤揥揦揧揨揩揪揫揬揭揮揯揰揱揲揳援揵揶揷揸揹揺揻揼揽揾揿 +
    6400 搀搁搂搃搄搅搆搇搈搉搊搋搌損搎搏搐搑搒搓搔搕搖搗搘搙搚搛搜搝搞搟 +
    6420 搠搡搢搣搤搥搦搧搨搩搪搫搬搭搮搯搰搱搲搳搴搵搶搷搸搹携搻搼搽搾搿 +
    6440 摀摁摂摃摄摅摆摇摈摉摊摋摌摍摎摏摐摑摒摓摔摕摖摗摘摙摚摛摜摝摞摟 +
    6460 摠摡摢摣摤摥摦摧摨摩摪摫摬摭摮摯摰摱摲摳摴摵摶摷摸摹摺摻摼摽摾摿 +
    6480 撀撁撂撃撄撅撆撇撈撉撊撋撌撍撎撏撐撑撒撓撔撕撖撗撘撙撚撛撜撝撞撟 +
    64A0 撠撡撢撣撤撥撦撧撨撩撪撫撬播撮撯撰撱撲撳撴撵撶撷撸撹撺撻撼撽撾撿 +
    64C0 擀擁擂擃擄擅擆擇擈擉擊擋擌操擎擏擐擑擒擓擔擕擖擗擘擙據擛擜擝擞擟 +
    64E0 擠擡擢擣擤擥擦擧擨擩擪擫擬擭擮擯擰擱擲擳擴擵擶擷擸擹擺擻擼擽擾擿 +
    6500 攀攁攂攃攄攅攆攇攈攉攊攋攌攍攎攏攐攑攒攓攔攕攖攗攘攙攚攛攜攝攞攟 +
    6520 攠攡攢攣攤攥攦攧攨攩攪攫攬攭攮支攰攱攲攳攴攵收攷攸改攺攻攼攽放政 +
    6540 敀敁敂敃敄故敆敇效敉敊敋敌敍敎敏敐救敒敓敔敕敖敗敘教敚敛敜敝敞敟 +
    6560 敠敡敢散敤敥敦敧敨敩敪敫敬敭敮敯数敱敲敳整敵敶敷數敹敺敻敼敽敾敿 +
    6580 斀斁斂斃斄斅斆文斈斉斊斋斌斍斎斏斐斑斒斓斔斕斖斗斘料斚斛斜斝斞斟 +
    65A0 斠斡斢斣斤斥斦斧斨斩斪斫斬断斮斯新斱斲斳斴斵斶斷斸方斺斻於施斾斿 +
    65C0 旀旁旂旃旄旅旆旇旈旉旊旋旌旍旎族旐旑旒旓旔旕旖旗旘旙旚旛旜旝旞旟 +
    65E0 无旡既旣旤日旦旧旨早旪旫旬旭旮旯旰旱旲旳旴旵时旷旸旹旺旻旼旽旾旿 +
    6600 昀昁昂昃昄昅昆昇昈昉昊昋昌昍明昏昐昑昒易昔昕昖昗昘昙昚昛昜昝昞星 +
    6620 映昡昢昣昤春昦昧昨昩昪昫昬昭昮是昰昱昲昳昴昵昶昷昸昹昺昻昼昽显昿 +
    6640 晀晁時晃晄晅晆晇晈晉晊晋晌晍晎晏晐晑晒晓晔晕晖晗晘晙晚晛晜晝晞晟 +
    6660 晠晡晢晣晤晥晦晧晨晩晪晫晬晭普景晰晱晲晳晴晵晶晷晸晹智晻晼晽晾晿 +
    6680 暀暁暂暃暄暅暆暇暈暉暊暋暌暍暎暏暐暑暒暓暔暕暖暗暘暙暚暛暜暝暞暟 +
    66A0 暠暡暢暣暤暥暦暧暨暩暪暫暬暭暮暯暰暱暲暳暴暵暶暷暸暹暺暻暼暽暾暿 +
    66C0 曀曁曂曃曄曅曆曇曈曉曊曋曌曍曎曏曐曑曒曓曔曕曖曗曘曙曚曛曜曝曞曟 +
    66E0 曠曡曢曣曤曥曦曧曨曩曪曫曬曭曮曯曰曱曲曳更曵曶曷書曹曺曻曼曽曾替 +
    6700 最朁朂會朄朅朆朇月有朊朋朌服朎朏朐朑朒朓朔朕朖朗朘朙朚望朜朝朞期 +
    6720 朠朡朢朣朤朥朦朧木朩未末本札朮术朰朱朲朳朴朵朶朷朸朹机朻朼朽朾朿 +
    6740 杀杁杂权杄杅杆杇杈杉杊杋杌杍李杏材村杒杓杔杕杖杗杘杙杚杛杜杝杞束 +
    6760 杠条杢杣杤来杦杧杨杩杪杫杬杭杮杯杰東杲杳杴杵杶杷杸杹杺杻杼杽松板 +
    6780 枀极枂枃构枅枆枇枈枉枊枋枌枍枎枏析枑枒枓枔枕枖林枘枙枚枛果枝枞枟 +
    67A0 枠枡枢枣枤枥枦枧枨枩枪枫枬枭枮枯枰枱枲枳枴枵架枷枸枹枺枻枼枽枾枿 +
    67C0 柀柁柂柃柄柅柆柇柈柉柊柋柌柍柎柏某柑柒染柔柕柖柗柘柙柚柛柜柝柞柟 +
    67E0 柠柡柢柣柤查柦柧柨柩柪柫柬柭柮柯柰柱柲柳柴柵柶柷柸柹柺査柼柽柾柿 +
    6800 栀栁栂栃栄栅栆标栈栉栊栋栌栍栎栏栐树栒栓栔栕栖栗栘栙栚栛栜栝栞栟 +
    6820 栠校栢栣栤栥栦栧栨栩株栫栬栭栮栯栰栱栲栳栴栵栶样核根栺栻格栽栾栿 +
    6840 桀桁桂桃桄桅框桇案桉桊桋桌桍桎桏桐桑桒桓桔桕桖桗桘桙桚桛桜桝桞桟 +
    6860 桠桡桢档桤桥桦桧桨桩桪桫桬桭桮桯桰桱桲桳桴桵桶桷桸桹桺桻桼桽桾桿 +
    6880 梀梁梂梃梄梅梆梇梈梉梊梋梌梍梎梏梐梑梒梓梔梕梖梗梘梙梚梛梜條梞梟 +
    68A0 梠梡梢梣梤梥梦梧梨梩梪梫梬梭梮梯械梱梲梳梴梵梶梷梸梹梺梻梼梽梾梿 +
    68C0 检棁棂棃棄棅棆棇棈棉棊棋棌棍棎棏棐棑棒棓棔棕棖棗棘棙棚棛棜棝棞棟 +
    68E0 棠棡棢棣棤棥棦棧棨棩棪棫棬棭森棯棰棱棲棳棴棵棶棷棸棹棺棻棼棽棾棿 +
    6900 椀椁椂椃椄椅椆椇椈椉椊椋椌植椎椏椐椑椒椓椔椕椖椗椘椙椚椛検椝椞椟 +
    6920 椠椡椢椣椤椥椦椧椨椩椪椫椬椭椮椯椰椱椲椳椴椵椶椷椸椹椺椻椼椽椾椿 +
    6940 楀楁楂楃楄楅楆楇楈楉楊楋楌楍楎楏楐楑楒楓楔楕楖楗楘楙楚楛楜楝楞楟 +
    6960 楠楡楢楣楤楥楦楧楨楩楪楫楬業楮楯楰楱楲楳楴極楶楷楸楹楺楻楼楽楾楿 +
    6980 榀榁概榃榄榅榆榇榈榉榊榋榌榍榎榏榐榑榒榓榔榕榖榗榘榙榚榛榜榝榞榟 +
    69A0 榠榡榢榣榤榥榦榧榨榩榪榫榬榭榮榯榰榱榲榳榴榵榶榷榸榹榺榻榼榽榾榿 +
    69C0 槀槁槂槃槄槅槆槇槈槉槊構槌槍槎槏槐槑槒槓槔槕槖槗様槙槚槛槜槝槞槟 +
    69E0 槠槡槢槣槤槥槦槧槨槩槪槫槬槭槮槯槰槱槲槳槴槵槶槷槸槹槺槻槼槽槾槿 +
    6A00 樀樁樂樃樄樅樆樇樈樉樊樋樌樍樎樏樐樑樒樓樔樕樖樗樘標樚樛樜樝樞樟 +
    6A20 樠模樢樣樤樥樦樧樨権横樫樬樭樮樯樰樱樲樳樴樵樶樷樸樹樺樻樼樽樾樿 +
    6A40 橀橁橂橃橄橅橆橇橈橉橊橋橌橍橎橏橐橑橒橓橔橕橖橗橘橙橚橛橜橝橞機 +
    6A60 橠橡橢橣橤橥橦橧橨橩橪橫橬橭橮橯橰橱橲橳橴橵橶橷橸橹橺橻橼橽橾橿 +
    6A80 檀檁檂檃檄檅檆檇檈檉檊檋檌檍檎檏檐檑檒檓檔檕檖檗檘檙檚檛檜檝檞檟 +
    6AA0 檠檡檢檣檤檥檦檧檨檩檪檫檬檭檮檯檰檱檲檳檴檵檶檷檸檹檺檻檼檽檾檿 +
    6AC0 櫀櫁櫂櫃櫄櫅櫆櫇櫈櫉櫊櫋櫌櫍櫎櫏櫐櫑櫒櫓櫔櫕櫖櫗櫘櫙櫚櫛櫜櫝櫞櫟 +
    6AE0 櫠櫡櫢櫣櫤櫥櫦櫧櫨櫩櫪櫫櫬櫭櫮櫯櫰櫱櫲櫳櫴櫵櫶櫷櫸櫹櫺櫻櫼櫽櫾櫿 +
    6B00 欀欁欂欃欄欅欆欇欈欉權欋欌欍欎欏欐欑欒欓欔欕欖欗欘欙欚欛欜欝欞欟 +
    6B20 欠次欢欣欤欥欦欧欨欩欪欫欬欭欮欯欰欱欲欳欴欵欶欷欸欹欺欻欼欽款欿 +
    6B40 歀歁歂歃歄歅歆歇歈歉歊歋歌歍歎歏歐歑歒歓歔歕歖歗歘歙歚歛歜歝歞歟 +
    6B60 歠歡止正此步武歧歨歩歪歫歬歭歮歯歰歱歲歳歴歵歶歷歸歹歺死歼歽歾歿 +
    6B80 殀殁殂殃殄殅殆殇殈殉殊残殌殍殎殏殐殑殒殓殔殕殖殗殘殙殚殛殜殝殞殟 +
    6BA0 殠殡殢殣殤殥殦殧殨殩殪殫殬殭殮殯殰殱殲殳殴段殶殷殸殹殺殻殼殽殾殿 +
    6BC0 毀毁毂毃毄毅毆毇毈毉毊毋毌母毎每毐毑毒毓比毕毖毗毘毙毚毛毜毝毞毟 +
    6BE0 毠毡毢毣毤毥毦毧毨毩毪毫毬毭毮毯毰毱毲毳毴毵毶毷毸毹毺毻毼毽毾毿 +
    6C00 氀氁氂氃氄氅氆氇氈氉氊氋氌氍氎氏氐民氒氓气氕氖気氘氙氚氛氜氝氞氟 +
    6C20 氠氡氢氣氤氥氦氧氨氩氪氫氬氭氮氯氰氱氲氳水氵氶氷永氹氺氻氼氽氾氿 +
    6C40 汀汁求汃汄汅汆汇汈汉汊汋汌汍汎汏汐汑汒汓汔汕汖汗汘汙汚汛汜汝汞江 +
    6C60 池污汢汣汤汥汦汧汨汩汪汫汬汭汮汯汰汱汲汳汴汵汶汷汸汹決汻汼汽汾汿 +
    6C80 沀沁沂沃沄沅沆沇沈沉沊沋沌沍沎沏沐沑沒沓沔沕沖沗沘沙沚沛沜沝沞沟 +
    6CA0 沠没沢沣沤沥沦沧沨沩沪沫沬沭沮沯沰沱沲河沴沵沶沷沸油沺治沼沽沾沿 +
    6CC0 泀況泂泃泄泅泆泇泈泉泊泋泌泍泎泏泐泑泒泓泔法泖泗泘泙泚泛泜泝泞泟 +
    6CE0 泠泡波泣泤泥泦泧注泩泪泫泬泭泮泯泰泱泲泳泴泵泶泷泸泹泺泻泼泽泾泿 +
    6D00 洀洁洂洃洄洅洆洇洈洉洊洋洌洍洎洏洐洑洒洓洔洕洖洗洘洙洚洛洜洝洞洟 +
    6D20 洠洡洢洣洤津洦洧洨洩洪洫洬洭洮洯洰洱洲洳洴洵洶洷洸洹洺活洼洽派洿 +
    6D40 浀流浂浃浄浅浆浇浈浉浊测浌浍济浏浐浑浒浓浔浕浖浗浘浙浚浛浜浝浞浟 +
    6D60 浠浡浢浣浤浥浦浧浨浩浪浫浬浭浮浯浰浱浲浳浴浵浶海浸浹浺浻浼浽浾浿 +
    6D80 涀涁涂涃涄涅涆涇消涉涊涋涌涍涎涏涐涑涒涓涔涕涖涗涘涙涚涛涜涝涞涟 +
    6DA0 涠涡涢涣涤涥润涧涨涩涪涫涬涭涮涯涰涱液涳涴涵涶涷涸涹涺涻涼涽涾涿 +
    6DC0 淀淁淂淃淄淅淆淇淈淉淊淋淌淍淎淏淐淑淒淓淔淕淖淗淘淙淚淛淜淝淞淟 +
    6DE0 淠淡淢淣淤淥淦淧淨淩淪淫淬淭淮淯淰深淲淳淴淵淶混淸淹淺添淼淽淾淿 +
    6E00 渀渁渂渃渄清渆渇済渉渊渋渌渍渎渏渐渑渒渓渔渕渖渗渘渙渚減渜渝渞渟 +
    6E20 渠渡渢渣渤渥渦渧渨温渪渫測渭渮港渰渱渲渳渴渵渶渷游渹渺渻渼渽渾渿 +
    6E40 湀湁湂湃湄湅湆湇湈湉湊湋湌湍湎湏湐湑湒湓湔湕湖湗湘湙湚湛湜湝湞湟 +
    6E60 湠湡湢湣湤湥湦湧湨湩湪湫湬湭湮湯湰湱湲湳湴湵湶湷湸湹湺湻湼湽湾湿 +
    6E80 満溁溂溃溄溅溆溇溈溉溊溋溌溍溎溏源溑溒溓溔溕準溗溘溙溚溛溜溝溞溟 +
    6EA0 溠溡溢溣溤溥溦溧溨溩溪溫溬溭溮溯溰溱溲溳溴溵溶溷溸溹溺溻溼溽溾溿 +
    6EC0 滀滁滂滃滄滅滆滇滈滉滊滋滌滍滎滏滐滑滒滓滔滕滖滗滘滙滚滛滜滝滞滟 +
    6EE0 滠满滢滣滤滥滦滧滨滩滪滫滬滭滮滯滰滱滲滳滴滵滶滷滸滹滺滻滼滽滾滿 +
    6F00 漀漁漂漃漄漅漆漇漈漉漊漋漌漍漎漏漐漑漒漓演漕漖漗漘漙漚漛漜漝漞漟 +
    6F20 漠漡漢漣漤漥漦漧漨漩漪漫漬漭漮漯漰漱漲漳漴漵漶漷漸漹漺漻漼漽漾漿 +
    6F40 潀潁潂潃潄潅潆潇潈潉潊潋潌潍潎潏潐潑潒潓潔潕潖潗潘潙潚潛潜潝潞潟 +
    6F60 潠潡潢潣潤潥潦潧潨潩潪潫潬潭潮潯潰潱潲潳潴潵潶潷潸潹潺潻潼潽潾潿 +
    6F80 澀澁澂澃澄澅澆澇澈澉澊澋澌澍澎澏澐澑澒澓澔澕澖澗澘澙澚澛澜澝澞澟 +
    6FA0 澠澡澢澣澤澥澦澧澨澩澪澫澬澭澮澯澰澱澲澳澴澵澶澷澸澹澺澻澼澽澾澿 +
    6FC0 激濁濂濃濄濅濆濇濈濉濊濋濌濍濎濏濐濑濒濓濔濕濖濗濘濙濚濛濜濝濞濟 +
    6FE0 濠濡濢濣濤濥濦濧濨濩濪濫濬濭濮濯濰濱濲濳濴濵濶濷濸濹濺濻濼濽濾濿 +
    7000 瀀瀁瀂瀃瀄瀅瀆瀇瀈瀉瀊瀋瀌瀍瀎瀏瀐瀑瀒瀓瀔瀕瀖瀗瀘瀙瀚瀛瀜瀝瀞瀟 +
    7020 瀠瀡瀢瀣瀤瀥瀦瀧瀨瀩瀪瀫瀬瀭瀮瀯瀰瀱瀲瀳瀴瀵瀶瀷瀸瀹瀺瀻瀼瀽瀾瀿 +
    7040 灀灁灂灃灄灅灆灇灈灉灊灋灌灍灎灏灐灑灒灓灔灕灖灗灘灙灚灛灜灝灞灟 +
    7060 灠灡灢灣灤灥灦灧灨灩灪火灬灭灮灯灰灱灲灳灴灵灶灷灸灹灺灻灼災灾灿 +
    7080 炀炁炂炃炄炅炆炇炈炉炊炋炌炍炎炏炐炑炒炓炔炕炖炗炘炙炚炛炜炝炞炟 +
    70A0 炠炡炢炣炤炥炦炧炨炩炪炫炬炭炮炯炰炱炲炳炴炵炶炷炸点為炻炼炽炾炿 +
    70C0 烀烁烂烃烄烅烆烇烈烉烊烋烌烍烎烏烐烑烒烓烔烕烖烗烘烙烚烛烜烝烞烟 +
    70E0 烠烡烢烣烤烥烦烧烨烩烪烫烬热烮烯烰烱烲烳烴烵烶烷烸烹烺烻烼烽烾烿 +
    7100 焀焁焂焃焄焅焆焇焈焉焊焋焌焍焎焏焐焑焒焓焔焕焖焗焘焙焚焛焜焝焞焟 +
    7120 焠無焢焣焤焥焦焧焨焩焪焫焬焭焮焯焰焱焲焳焴焵然焷焸焹焺焻焼焽焾焿 +
    7140 煀煁煂煃煄煅煆煇煈煉煊煋煌煍煎煏煐煑煒煓煔煕煖煗煘煙煚煛煜煝煞煟 +
    7160 煠煡煢煣煤煥煦照煨煩煪煫煬煭煮煯煰煱煲煳煴煵煶煷煸煹煺煻煼煽煾煿 +
    7180 熀熁熂熃熄熅熆熇熈熉熊熋熌熍熎熏熐熑熒熓熔熕熖熗熘熙熚熛熜熝熞熟 +
    71A0 熠熡熢熣熤熥熦熧熨熩熪熫熬熭熮熯熰熱熲熳熴熵熶熷熸熹熺熻熼熽熾熿 +
    71C0 燀燁燂燃燄燅燆燇燈燉燊燋燌燍燎燏燐燑燒燓燔燕燖燗燘燙燚燛燜燝燞營 +
    71E0 燠燡燢燣燤燥燦燧燨燩燪燫燬燭燮燯燰燱燲燳燴燵燶燷燸燹燺燻燼燽燾燿 +
    7200 爀爁爂爃爄爅爆爇爈爉爊爋爌爍爎爏爐爑爒爓爔爕爖爗爘爙爚爛爜爝爞爟 +
    7220 爠爡爢爣爤爥爦爧爨爩爪爫爬爭爮爯爰爱爲爳爴爵父爷爸爹爺爻爼爽爾爿 +
    7240 牀牁牂牃牄牅牆片版牉牊牋牌牍牎牏牐牑牒牓牔牕牖牗牘牙牚牛牜牝牞牟 +
    7260 牠牡牢牣牤牥牦牧牨物牪牫牬牭牮牯牰牱牲牳牴牵牶牷牸特牺牻牼牽牾牿 +
    7280 犀犁犂犃犄犅犆犇犈犉犊犋犌犍犎犏犐犑犒犓犔犕犖犗犘犙犚犛犜犝犞犟 +
    72A0 犠犡犢犣犤犥犦犧犨犩犪犫犬犭犮犯犰犱犲犳犴犵状犷犸犹犺犻犼犽犾犿 +
    72C0 狀狁狂狃狄狅狆狇狈狉狊狋狌狍狎狏狐狑狒狓狔狕狖狗狘狙狚狛狜狝狞狟 +
    72E0 狠狡狢狣狤狥狦狧狨狩狪狫独狭狮狯狰狱狲狳狴狵狶狷狸狹狺狻狼狽狾狿 +
    7300 猀猁猂猃猄猅猆猇猈猉猊猋猌猍猎猏猐猑猒猓猔猕猖猗猘猙猚猛猜猝猞猟 +
    7320 猠猡猢猣猤猥猦猧猨猩猪猫猬猭献猯猰猱猲猳猴猵猶猷猸猹猺猻猼猽猾猿 +
    7340 獀獁獂獃獄獅獆獇獈獉獊獋獌獍獎獏獐獑獒獓獔獕獖獗獘獙獚獛獜獝獞獟 +
    7360 獠獡獢獣獤獥獦獧獨獩獪獫獬獭獮獯獰獱獲獳獴獵獶獷獸獹獺獻獼獽獾獿 +
    7380 玀玁玂玃玄玅玆率玈玉玊王玌玍玎玏玐玑玒玓玔玕玖玗玘玙玚玛玜玝玞玟 +
    73A0 玠玡玢玣玤玥玦玧玨玩玪玫玬玭玮环现玱玲玳玴玵玶玷玸玹玺玻玼玽玾玿 +
    73C0 珀珁珂珃珄珅珆珇珈珉珊珋珌珍珎珏珐珑珒珓珔珕珖珗珘珙珚珛珜珝珞珟 +
    73E0 珠珡珢珣珤珥珦珧珨珩珪珫珬班珮珯珰珱珲珳珴珵珶珷珸珹珺珻珼珽現珿 +
    7400 琀琁琂球琄琅理琇琈琉琊琋琌琍琎琏琐琑琒琓琔琕琖琗琘琙琚琛琜琝琞琟 +
    7420 琠琡琢琣琤琥琦琧琨琩琪琫琬琭琮琯琰琱琲琳琴琵琶琷琸琹琺琻琼琽琾琿 +
    7440 瑀瑁瑂瑃瑄瑅瑆瑇瑈瑉瑊瑋瑌瑍瑎瑏瑐瑑瑒瑓瑔瑕瑖瑗瑘瑙瑚瑛瑜瑝瑞瑟 +
    7460 瑠瑡瑢瑣瑤瑥瑦瑧瑨瑩瑪瑫瑬瑭瑮瑯瑰瑱瑲瑳瑴瑵瑶瑷瑸瑹瑺瑻瑼瑽瑾瑿 +
    7480 璀璁璂璃璄璅璆璇璈璉璊璋璌璍璎璏璐璑璒璓璔璕璖璗璘璙璚璛璜璝璞璟 +
    74A0 璠璡璢璣璤璥璦璧璨璩璪璫璬璭璮璯環璱璲璳璴璵璶璷璸璹璺璻璼璽璾璿 +
    74C0 瓀瓁瓂瓃瓄瓅瓆瓇瓈瓉瓊瓋瓌瓍瓎瓏瓐瓑瓒瓓瓔瓕瓖瓗瓘瓙瓚瓛瓜瓝瓞瓟 +
    74E0 瓠瓡瓢瓣瓤瓥瓦瓧瓨瓩瓪瓫瓬瓭瓮瓯瓰瓱瓲瓳瓴瓵瓶瓷瓸瓹瓺瓻瓼瓽瓾瓿 +
    7500 甀甁甂甃甄甅甆甇甈甉甊甋甌甍甎甏甐甑甒甓甔甕甖甗甘甙甚甛甜甝甞生 +
    7520 甠甡產産甤甥甦甧用甩甪甫甬甭甮甯田由甲申甴电甶男甸甹町画甼甽甾甿 +
    7540 畀畁畂畃畄畅畆畇畈畉畊畋界畍畎畏畐畑畒畓畔畕畖畗畘留畚畛畜畝畞畟 +
    7560 畠畡畢畣畤略畦畧畨畩番畫畬畭畮畯異畱畲畳畴畵當畷畸畹畺畻畼畽畾畿 +
    7580 疀疁疂疃疄疅疆疇疈疉疊疋疌疍疎疏疐疑疒疓疔疕疖疗疘疙疚疛疜疝疞疟 +
    75A0 疠疡疢疣疤疥疦疧疨疩疪疫疬疭疮疯疰疱疲疳疴疵疶疷疸疹疺疻疼疽疾疿 +
    75C0 痀痁痂痃痄病痆症痈痉痊痋痌痍痎痏痐痑痒痓痔痕痖痗痘痙痚痛痜痝痞痟 +
    75E0 痠痡痢痣痤痥痦痧痨痩痪痫痬痭痮痯痰痱痲痳痴痵痶痷痸痹痺痻痼痽痾痿 +
    7600 瘀瘁瘂瘃瘄瘅瘆瘇瘈瘉瘊瘋瘌瘍瘎瘏瘐瘑瘒瘓瘔瘕瘖瘗瘘瘙瘚瘛瘜瘝瘞瘟 +
    7620 瘠瘡瘢瘣瘤瘥瘦瘧瘨瘩瘪瘫瘬瘭瘮瘯瘰瘱瘲瘳瘴瘵瘶瘷瘸瘹瘺瘻瘼瘽瘾瘿 +
    7640 癀癁療癃癄癅癆癇癈癉癊癋癌癍癎癏癐癑癒癓癔癕癖癗癘癙癚癛癜癝癞癟 +
    7660 癠癡癢癣癤癥癦癧癨癩癪癫癬癭癮癯癰癱癲癳癴癵癶癷癸癹発登發白百癿 +
    7680 皀皁皂皃的皅皆皇皈皉皊皋皌皍皎皏皐皑皒皓皔皕皖皗皘皙皚皛皜皝皞皟 +
    76A0 皠皡皢皣皤皥皦皧皨皩皪皫皬皭皮皯皰皱皲皳皴皵皶皷皸皹皺皻皼皽皾皿 +
    76C0 盀盁盂盃盄盅盆盇盈盉益盋盌盍盎盏盐监盒盓盔盕盖盗盘盙盚盛盜盝盞盟 +
    76E0 盠盡盢監盤盥盦盧盨盩盪盫盬盭目盯盰盱盲盳直盵盶盷相盹盺盻盼盽盾盿 +
    7700 眀省眂眃眄眅眆眇眈眉眊看県眍眎眏眐眑眒眓眔眕眖眗眘眙眚眛眜眝眞真 +
    7720 眠眡眢眣眤眥眦眧眨眩眪眫眬眭眮眯眰眱眲眳眴眵眶眷眸眹眺眻眼眽眾眿 +
    7740 着睁睂睃睄睅睆睇睈睉睊睋睌睍睎睏睐睑睒睓睔睕睖睗睘睙睚睛睜睝睞睟 +
    7760 睠睡睢督睤睥睦睧睨睩睪睫睬睭睮睯睰睱睲睳睴睵睶睷睸睹睺睻睼睽睾睿 +
    7780 瞀瞁瞂瞃瞄瞅瞆瞇瞈瞉瞊瞋瞌瞍瞎瞏瞐瞑瞒瞓瞔瞕瞖瞗瞘瞙瞚瞛瞜瞝瞞瞟 +
    77A0 瞠瞡瞢瞣瞤瞥瞦瞧瞨瞩瞪瞫瞬瞭瞮瞯瞰瞱瞲瞳瞴瞵瞶瞷瞸瞹瞺瞻瞼瞽瞾瞿 +
    77C0 矀矁矂矃矄矅矆矇矈矉矊矋矌矍矎矏矐矑矒矓矔矕矖矗矘矙矚矛矜矝矞矟 +
    77E0 矠矡矢矣矤知矦矧矨矩矪矫矬短矮矯矰矱矲石矴矵矶矷矸矹矺矻矼矽矾矿 +
    7800 砀码砂砃砄砅砆砇砈砉砊砋砌砍砎砏砐砑砒砓研砕砖砗砘砙砚砛砜砝砞砟 +
    7820 砠砡砢砣砤砥砦砧砨砩砪砫砬砭砮砯砰砱砲砳破砵砶砷砸砹砺砻砼砽砾砿 +
    7840 础硁硂硃硄硅硆硇硈硉硊硋硌硍硎硏硐硑硒硓硔硕硖硗硘硙硚硛硜硝硞硟 +
    7860 硠硡硢硣硤硥硦硧硨硩硪硫硬硭确硯硰硱硲硳硴硵硶硷硸硹硺硻硼硽硾硿 +
    7880 碀碁碂碃碄碅碆碇碈碉碊碋碌碍碎碏碐碑碒碓碔碕碖碗碘碙碚碛碜碝碞碟 +
    78A0 碠碡碢碣碤碥碦碧碨碩碪碫碬碭碮碯碰碱碲碳碴碵碶碷碸碹確碻碼碽碾碿 +
    78C0 磀磁磂磃磄磅磆磇磈磉磊磋磌磍磎磏磐磑磒磓磔磕磖磗磘磙磚磛磜磝磞磟 +
    78E0 磠磡磢磣磤磥磦磧磨磩磪磫磬磭磮磯磰磱磲磳磴磵磶磷磸磹磺磻磼磽磾磿 +
    7900 礀礁礂礃礄礅礆礇礈礉礊礋礌礍礎礏礐礑礒礓礔礕礖礗礘礙礚礛礜礝礞礟 +
    7920 礠礡礢礣礤礥礦礧礨礩礪礫礬礭礮礯礰礱礲礳礴礵礶礷礸礹示礻礼礽社礿 +
    7940 祀祁祂祃祄祅祆祇祈祉祊祋祌祍祎祏祐祑祒祓祔祕祖祗祘祙祚祛祜祝神祟 +
    7960 祠祡祢祣祤祥祦祧票祩祪祫祬祭祮祯祰祱祲祳祴祵祶祷祸祹祺祻祼祽祾祿 +
    7980 禀禁禂禃禄禅禆禇禈禉禊禋禌禍禎福禐禑禒禓禔禕禖禗禘禙禚禛禜禝禞禟 +
    79A0 禠禡禢禣禤禥禦禧禨禩禪禫禬禭禮禯禰禱禲禳禴禵禶禷禸禹禺离禼禽禾禿 +
    79C0 秀私秂秃秄秅秆秇秈秉秊秋秌种秎秏秐科秒秓秔秕秖秗秘秙秚秛秜秝秞租 +
    79E0 秠秡秢秣秤秥秦秧秨秩秪秫秬秭秮积称秱秲秳秴秵秶秷秸秹秺移秼秽秾秿 +
    7A00 稀稁稂稃稄稅稆稇稈稉稊程稌稍税稏稐稑稒稓稔稕稖稗稘稙稚稛稜稝稞稟 +
    7A20 稠稡稢稣稤稥稦稧稨稩稪稫稬稭種稯稰稱稲稳稴稵稶稷稸稹稺稻稼稽稾稿 +
    7A40 穀穁穂穃穄穅穆穇穈穉穊穋穌積穎穏穐穑穒穓穔穕穖穗穘穙穚穛穜穝穞穟 +
    7A60 穠穡穢穣穤穥穦穧穨穩穪穫穬穭穮穯穰穱穲穳穴穵究穷穸穹空穻穼穽穾穿 +
    7A80 窀突窂窃窄窅窆窇窈窉窊窋窌窍窎窏窐窑窒窓窔窕窖窗窘窙窚窛窜窝窞窟 +
    7AA0 窠窡窢窣窤窥窦窧窨窩窪窫窬窭窮窯窰窱窲窳窴窵窶窷窸窹窺窻窼窽窾窿 +
    7AC0 竀竁竂竃竄竅竆竇竈竉竊立竌竍竎竏竐竑竒竓竔竕竖竗竘站竚竛竜竝竞竟 +
    7AE0 章竡竢竣竤童竦竧竨竩竪竫竬竭竮端竰竱竲竳竴竵競竷竸竹竺竻竼竽竾竿 +
    7B00 笀笁笂笃笄笅笆笇笈笉笊笋笌笍笎笏笐笑笒笓笔笕笖笗笘笙笚笛笜笝笞笟 +
    7B20 笠笡笢笣笤笥符笧笨笩笪笫第笭笮笯笰笱笲笳笴笵笶笷笸笹笺笻笼笽笾笿 +
    7B40 筀筁筂筃筄筅筆筇筈等筊筋筌筍筎筏筐筑筒筓答筕策筗筘筙筚筛筜筝筞筟 +
    7B60 筠筡筢筣筤筥筦筧筨筩筪筫筬筭筮筯筰筱筲筳筴筵筶筷筸筹筺筻筼筽签筿 +
    7B80 简箁箂箃箄箅箆箇箈箉箊箋箌箍箎箏箐箑箒箓箔箕箖算箘箙箚箛箜箝箞箟 +
    7BA0 箠管箢箣箤箥箦箧箨箩箪箫箬箭箮箯箰箱箲箳箴箵箶箷箸箹箺箻箼箽箾箿 +
    7BC0 節篁篂篃範篅篆篇篈築篊篋篌篍篎篏篐篑篒篓篔篕篖篗篘篙篚篛篜篝篞篟 +
    7BE0 篠篡篢篣篤篥篦篧篨篩篪篫篬篭篮篯篰篱篲篳篴篵篶篷篸篹篺篻篼篽篾篿 +
    7C00 簀簁簂簃簄簅簆簇簈簉簊簋簌簍簎簏簐簑簒簓簔簕簖簗簘簙簚簛簜簝簞簟 +
    7C20 簠簡簢簣簤簥簦簧簨簩簪簫簬簭簮簯簰簱簲簳簴簵簶簷簸簹簺簻簼簽簾簿 +
    7C40 籀籁籂籃籄籅籆籇籈籉籊籋籌籍籎籏籐籑籒籓籔籕籖籗籘籙籚籛籜籝籞籟 +
    7C60 籠籡籢籣籤籥籦籧籨籩籪籫籬籭籮籯籰籱籲米籴籵籶籷籸籹籺类籼籽籾籿 +
    7C80 粀粁粂粃粄粅粆粇粈粉粊粋粌粍粎粏粐粑粒粓粔粕粖粗粘粙粚粛粜粝粞粟 +
    7CA0 粠粡粢粣粤粥粦粧粨粩粪粫粬粭粮粯粰粱粲粳粴粵粶粷粸粹粺粻粼粽精粿 +
    7CC0 糀糁糂糃糄糅糆糇糈糉糊糋糌糍糎糏糐糑糒糓糔糕糖糗糘糙糚糛糜糝糞糟 +
    7CE0 糠糡糢糣糤糥糦糧糨糩糪糫糬糭糮糯糰糱糲糳糴糵糶糷糸糹糺系糼糽糾糿 +
    7D00 紀紁紂紃約紅紆紇紈紉紊紋紌納紎紏紐紑紒紓純紕紖紗紘紙級紛紜紝紞紟 +
    7D20 素紡索紣紤紥紦紧紨紩紪紫紬紭紮累細紱紲紳紴紵紶紷紸紹紺紻紼紽紾紿 +
    7D40 絀絁終絃組絅絆絇絈絉絊絋経絍絎絏結絑絒絓絔絕絖絗絘絙絚絛絜絝絞絟 +
    7D60 絠絡絢絣絤絥給絧絨絩絪絫絬絭絮絯絰統絲絳絴絵絶絷絸絹絺絻絼絽絾絿 +
    7D80 綀綁綂綃綄綅綆綇綈綉綊綋綌綍綎綏綐綑綒經綔綕綖綗綘継続綛綜綝綞綟 +
    7DA0 綠綡綢綣綤綥綦綧綨綩綪綫綬維綮綯綰綱網綳綴綵綶綷綸綹綺綻綼綽綾綿 +
    7DC0 緀緁緂緃緄緅緆緇緈緉緊緋緌緍緎総緐緑緒緓緔緕緖緗緘緙線緛緜緝緞緟 +
    7DE0 締緡緢緣緤緥緦緧編緩緪緫緬緭緮緯緰緱緲緳練緵緶緷緸緹緺緻緼緽緾緿 +
    7E00 縀縁縂縃縄縅縆縇縈縉縊縋縌縍縎縏縐縑縒縓縔縕縖縗縘縙縚縛縜縝縞縟 +
    7E20 縠縡縢縣縤縥縦縧縨縩縪縫縬縭縮縯縰縱縲縳縴縵縶縷縸縹縺縻縼總績縿 +
    7E40 繀繁繂繃繄繅繆繇繈繉繊繋繌繍繎繏繐繑繒繓織繕繖繗繘繙繚繛繜繝繞繟 +
    7E60 繠繡繢繣繤繥繦繧繨繩繪繫繬繭繮繯繰繱繲繳繴繵繶繷繸繹繺繻繼繽繾繿 +
    7E80 纀纁纂纃纄纅纆纇纈纉纊纋續纍纎纏纐纑纒纓纔纕纖纗纘纙纚纛纜纝纞纟 +
    7EA0 纠纡红纣纤纥约级纨纩纪纫纬纭纮纯纰纱纲纳纴纵纶纷纸纹纺纻纼纽纾线 +
    7EC0 绀绁绂练组绅细织终绉绊绋绌绍绎经绐绑绒结绔绕绖绗绘给绚绛络绝绞统 +
    7EE0 绠绡绢绣绤绥绦继绨绩绪绫绬续绮绯绰绱绲绳维绵绶绷绸绹绺绻综绽绾绿 +
    7F00 缀缁缂缃缄缅缆缇缈缉缊缋缌缍缎缏缐缑缒缓缔缕编缗缘缙缚缛缜缝缞缟 +
    7F20 缠缡缢缣缤缥缦缧缨缩缪缫缬缭缮缯缰缱缲缳缴缵缶缷缸缹缺缻缼缽缾缿 +
    7F40 罀罁罂罃罄罅罆罇罈罉罊罋罌罍罎罏罐网罒罓罔罕罖罗罘罙罚罛罜罝罞罟 +
    7F60 罠罡罢罣罤罥罦罧罨罩罪罫罬罭置罯罰罱署罳罴罵罶罷罸罹罺罻罼罽罾罿 +
    7F80 羀羁羂羃羄羅羆羇羈羉羊羋羌羍美羏羐羑羒羓羔羕羖羗羘羙羚羛羜羝羞羟 +
    7FA0 羠羡羢羣群羥羦羧羨義羪羫羬羭羮羯羰羱羲羳羴羵羶羷羸羹羺羻羼羽羾羿 +
    7FC0 翀翁翂翃翄翅翆翇翈翉翊翋翌翍翎翏翐翑習翓翔翕翖翗翘翙翚翛翜翝翞翟 +
    7FE0 翠翡翢翣翤翥翦翧翨翩翪翫翬翭翮翯翰翱翲翳翴翵翶翷翸翹翺翻翼翽翾翿 +
    8000 耀老耂考耄者耆耇耈耉耊耋而耍耎耏耐耑耒耓耔耕耖耗耘耙耚耛耜耝耞耟 +
    8020 耠耡耢耣耤耥耦耧耨耩耪耫耬耭耮耯耰耱耲耳耴耵耶耷耸耹耺耻耼耽耾耿 +
    8040 聀聁聂聃聄聅聆聇聈聉聊聋职聍聎聏聐聑聒聓联聕聖聗聘聙聚聛聜聝聞聟 +
    8060 聠聡聢聣聤聥聦聧聨聩聪聫聬聭聮聯聰聱聲聳聴聵聶職聸聹聺聻聼聽聾聿 +
    8080 肀肁肂肃肄肅肆肇肈肉肊肋肌肍肎肏肐肑肒肓肔肕肖肗肘肙肚肛肜肝肞肟 +
    80A0 肠股肢肣肤肥肦肧肨肩肪肫肬肭肮肯肰肱育肳肴肵肶肷肸肹肺肻肼肽肾肿 +
    80C0 胀胁胂胃胄胅胆胇胈胉胊胋背胍胎胏胐胑胒胓胔胕胖胗胘胙胚胛胜胝胞胟 +
    80E0 胠胡胢胣胤胥胦胧胨胩胪胫胬胭胮胯胰胱胲胳胴胵胶胷胸胹胺胻胼能胾胿 +
    8100 脀脁脂脃脄脅脆脇脈脉脊脋脌脍脎脏脐脑脒脓脔脕脖脗脘脙脚脛脜脝脞脟 +
    8120 脠脡脢脣脤脥脦脧脨脩脪脫脬脭脮脯脰脱脲脳脴脵脶脷脸脹脺脻脼脽脾脿 +
    8140 腀腁腂腃腄腅腆腇腈腉腊腋腌腍腎腏腐腑腒腓腔腕腖腗腘腙腚腛腜腝腞腟 +
    8160 腠腡腢腣腤腥腦腧腨腩腪腫腬腭腮腯腰腱腲腳腴腵腶腷腸腹腺腻腼腽腾腿 +
    8180 膀膁膂膃膄膅膆膇膈膉膊膋膌膍膎膏膐膑膒膓膔膕膖膗膘膙膚膛膜膝膞膟 +
    81A0 膠膡膢膣膤膥膦膧膨膩膪膫膬膭膮膯膰膱膲膳膴膵膶膷膸膹膺膻膼膽膾膿 +
    81C0 臀臁臂臃臄臅臆臇臈臉臊臋臌臍臎臏臐臑臒臓臔臕臖臗臘臙臚臛臜臝臞臟 +
    81E0 臠臡臢臣臤臥臦臧臨臩自臫臬臭臮臯臰臱臲至致臵臶臷臸臹臺臻臼臽臾臿 +
    8200 舀舁舂舃舄舅舆與興舉舊舋舌舍舎舏舐舑舒舓舔舕舖舗舘舙舚舛舜舝舞舟 +
    8220 舠舡舢舣舤舥舦舧舨舩航舫般舭舮舯舰舱舲舳舴舵舶舷舸船舺舻舼舽舾舿 +
    8240 艀艁艂艃艄艅艆艇艈艉艊艋艌艍艎艏艐艑艒艓艔艕艖艗艘艙艚艛艜艝艞艟 +
    8260 艠艡艢艣艤艥艦艧艨艩艪艫艬艭艮良艰艱色艳艴艵艶艷艸艹艺艻艼艽艾艿 +
    8280 芀芁节芃芄芅芆芇芈芉芊芋芌芍芎芏芐芑芒芓芔芕芖芗芘芙芚芛芜芝芞芟 +
    82A0 芠芡芢芣芤芥芦芧芨芩芪芫芬芭芮芯芰花芲芳芴芵芶芷芸芹芺芻芼芽芾芿 +
    82C0 苀苁苂苃苄苅苆苇苈苉苊苋苌苍苎苏苐苑苒苓苔苕苖苗苘苙苚苛苜苝苞苟 +
    82E0 苠苡苢苣苤若苦苧苨苩苪苫苬苭苮苯苰英苲苳苴苵苶苷苸苹苺苻苼苽苾苿 +
    8300 茀茁茂范茄茅茆茇茈茉茊茋茌茍茎茏茐茑茒茓茔茕茖茗茘茙茚茛茜茝茞茟 +
    8320 茠茡茢茣茤茥茦茧茨茩茪茫茬茭茮茯茰茱茲茳茴茵茶茷茸茹茺茻茼茽茾茿 +
    8340 荀荁荂荃荄荅荆荇荈草荊荋荌荍荎荏荐荑荒荓荔荕荖荗荘荙荚荛荜荝荞荟 +
    8360 荠荡荢荣荤荥荦荧荨荩荪荫荬荭荮药荰荱荲荳荴荵荶荷荸荹荺荻荼荽荾荿 +
    8380 莀莁莂莃莄莅莆莇莈莉莊莋莌莍莎莏莐莑莒莓莔莕莖莗莘莙莚莛莜莝莞莟 +
    83A0 莠莡莢莣莤莥莦莧莨莩莪莫莬莭莮莯莰莱莲莳莴莵莶获莸莹莺莻莼莽莾莿 +
    83C0 菀菁菂菃菄菅菆菇菈菉菊菋菌菍菎菏菐菑菒菓菔菕菖菗菘菙菚菛菜菝菞菟 +
    83E0 菠菡菢菣菤菥菦菧菨菩菪菫菬菭菮華菰菱菲菳菴菵菶菷菸菹菺菻菼菽菾菿 +
    8400 萀萁萂萃萄萅萆萇萈萉萊萋萌萍萎萏萐萑萒萓萔萕萖萗萘萙萚萛萜萝萞萟 +
    8420 萠萡萢萣萤营萦萧萨萩萪萫萬萭萮萯萰萱萲萳萴萵萶萷萸萹萺萻萼落萾萿 +
    8440 葀葁葂葃葄葅葆葇葈葉葊葋葌葍葎葏葐葑葒葓葔葕葖著葘葙葚葛葜葝葞葟 +
    8460 葠葡葢董葤葥葦葧葨葩葪葫葬葭葮葯葰葱葲葳葴葵葶葷葸葹葺葻葼葽葾葿 +
    8480 蒀蒁蒂蒃蒄蒅蒆蒇蒈蒉蒊蒋蒌蒍蒎蒏蒐蒑蒒蒓蒔蒕蒖蒗蒘蒙蒚蒛蒜蒝蒞蒟 +
    84A0 蒠蒡蒢蒣蒤蒥蒦蒧蒨蒩蒪蒫蒬蒭蒮蒯蒰蒱蒲蒳蒴蒵蒶蒷蒸蒹蒺蒻蒼蒽蒾蒿 +
    84C0 蓀蓁蓂蓃蓄蓅蓆蓇蓈蓉蓊蓋蓌蓍蓎蓏蓐蓑蓒蓓蓔蓕蓖蓗蓘蓙蓚蓛蓜蓝蓞蓟 +
    84E0 蓠蓡蓢蓣蓤蓥蓦蓧蓨蓩蓪蓫蓬蓭蓮蓯蓰蓱蓲蓳蓴蓵蓶蓷蓸蓹蓺蓻蓼蓽蓾蓿 +
    8500 蔀蔁蔂蔃蔄蔅蔆蔇蔈蔉蔊蔋蔌蔍蔎蔏蔐蔑蔒蔓蔔蔕蔖蔗蔘蔙蔚蔛蔜蔝蔞蔟 +
    8520 蔠蔡蔢蔣蔤蔥蔦蔧蔨蔩蔪蔫蔬蔭蔮蔯蔰蔱蔲蔳蔴蔵蔶蔷蔸蔹蔺蔻蔼蔽蔾蔿 +
    8540 蕀蕁蕂蕃蕄蕅蕆蕇蕈蕉蕊蕋蕌蕍蕎蕏蕐蕑蕒蕓蕔蕕蕖蕗蕘蕙蕚蕛蕜蕝蕞蕟 +
    8560 蕠蕡蕢蕣蕤蕥蕦蕧蕨蕩蕪蕫蕬蕭蕮蕯蕰蕱蕲蕳蕴蕵蕶蕷蕸蕹蕺蕻蕼蕽蕾蕿 +
    8580 薀薁薂薃薄薅薆薇薈薉薊薋薌薍薎薏薐薑薒薓薔薕薖薗薘薙薚薛薜薝薞薟 +
    85A0 薠薡薢薣薤薥薦薧薨薩薪薫薬薭薮薯薰薱薲薳薴薵薶薷薸薹薺薻薼薽薾薿 +
    85C0 藀藁藂藃藄藅藆藇藈藉藊藋藌藍藎藏藐藑藒藓藔藕藖藗藘藙藚藛藜藝藞藟 +
    85E0 藠藡藢藣藤藥藦藧藨藩藪藫藬藭藮藯藰藱藲藳藴藵藶藷藸藹藺藻藼藽藾藿 +
    8600 蘀蘁蘂蘃蘄蘅蘆蘇蘈蘉蘊蘋蘌蘍蘎蘏蘐蘑蘒蘓蘔蘕蘖蘗蘘蘙蘚蘛蘜蘝蘞蘟 +
    8620 蘠蘡蘢蘣蘤蘥蘦蘧蘨蘩蘪蘫蘬蘭蘮蘯蘰蘱蘲蘳蘴蘵蘶蘷蘸蘹蘺蘻蘼蘽蘾蘿 +
    8640 虀虁虂虃虄虅虆虇虈虉虊虋虌虍虎虏虐虑虒虓虔處虖虗虘虙虚虛虜虝虞號 +
    8660 虠虡虢虣虤虥虦虧虨虩虪虫虬虭虮虯虰虱虲虳虴虵虶虷虸虹虺虻虼虽虾虿 +
    8680 蚀蚁蚂蚃蚄蚅蚆蚇蚈蚉蚊蚋蚌蚍蚎蚏蚐蚑蚒蚓蚔蚕蚖蚗蚘蚙蚚蚛蚜蚝蚞蚟 +
    86A0 蚠蚡蚢蚣蚤蚥蚦蚧蚨蚩蚪蚫蚬蚭蚮蚯蚰蚱蚲蚳蚴蚵蚶蚷蚸蚹蚺蚻蚼蚽蚾蚿 +
    86C0 蛀蛁蛂蛃蛄蛅蛆蛇蛈蛉蛊蛋蛌蛍蛎蛏蛐蛑蛒蛓蛔蛕蛖蛗蛘蛙蛚蛛蛜蛝蛞蛟 +
    86E0 蛠蛡蛢蛣蛤蛥蛦蛧蛨蛩蛪蛫蛬蛭蛮蛯蛰蛱蛲蛳蛴蛵蛶蛷蛸蛹蛺蛻蛼蛽蛾蛿 +
    8700 蜀蜁蜂蜃蜄蜅蜆蜇蜈蜉蜊蜋蜌蜍蜎蜏蜐蜑蜒蜓蜔蜕蜖蜗蜘蜙蜚蜛蜜蜝蜞蜟 +
    8720 蜠蜡蜢蜣蜤蜥蜦蜧蜨蜩蜪蜫蜬蜭蜮蜯蜰蜱蜲蜳蜴蜵蜶蜷蜸蜹蜺蜻蜼蜽蜾蜿 +
    8740 蝀蝁蝂蝃蝄蝅蝆蝇蝈蝉蝊蝋蝌蝍蝎蝏蝐蝑蝒蝓蝔蝕蝖蝗蝘蝙蝚蝛蝜蝝蝞蝟 +
    8760 蝠蝡蝢蝣蝤蝥蝦蝧蝨蝩蝪蝫蝬蝭蝮蝯蝰蝱蝲蝳蝴蝵蝶蝷蝸蝹蝺蝻蝼蝽蝾蝿 +
    8780 螀螁螂螃螄螅螆螇螈螉螊螋螌融螎螏螐螑螒螓螔螕螖螗螘螙螚螛螜螝螞螟 +
    87A0 螠螡螢螣螤螥螦螧螨螩螪螫螬螭螮螯螰螱螲螳螴螵螶螷螸螹螺螻螼螽螾螿 +
    87C0 蟀蟁蟂蟃蟄蟅蟆蟇蟈蟉蟊蟋蟌蟍蟎蟏蟐蟑蟒蟓蟔蟕蟖蟗蟘蟙蟚蟛蟜蟝蟞蟟 +
    87E0 蟠蟡蟢蟣蟤蟥蟦蟧蟨蟩蟪蟫蟬蟭蟮蟯蟰蟱蟲蟳蟴蟵蟶蟷蟸蟹蟺蟻蟼蟽蟾蟿 +
    8800 蠀蠁蠂蠃蠄蠅蠆蠇蠈蠉蠊蠋蠌蠍蠎蠏蠐蠑蠒蠓蠔蠕蠖蠗蠘蠙蠚蠛蠜蠝蠞蠟 +
    8820 蠠蠡蠢蠣蠤蠥蠦蠧蠨蠩蠪蠫蠬蠭蠮蠯蠰蠱蠲蠳蠴蠵蠶蠷蠸蠹蠺蠻蠼蠽蠾蠿 +
    8840 血衁衂衃衄衅衆衇衈衉衊衋行衍衎衏衐衑衒術衔衕衖街衘衙衚衛衜衝衞衟 +
    8860 衠衡衢衣衤补衦衧表衩衪衫衬衭衮衯衰衱衲衳衴衵衶衷衸衹衺衻衼衽衾衿 +
    8880 袀袁袂袃袄袅袆袇袈袉袊袋袌袍袎袏袐袑袒袓袔袕袖袗袘袙袚袛袜袝袞袟 +
    88A0 袠袡袢袣袤袥袦袧袨袩袪被袬袭袮袯袰袱袲袳袴袵袶袷袸袹袺袻袼袽袾袿 +
    88C0 裀裁裂裃裄装裆裇裈裉裊裋裌裍裎裏裐裑裒裓裔裕裖裗裘裙裚裛補裝裞裟 +
    88E0 裠裡裢裣裤裥裦裧裨裩裪裫裬裭裮裯裰裱裲裳裴裵裶裷裸裹裺裻裼製裾裿 +
    8900 褀褁褂褃褄褅褆複褈褉褊褋褌褍褎褏褐褑褒褓褔褕褖褗褘褙褚褛褜褝褞褟 +
    8920 褠褡褢褣褤褥褦褧褨褩褪褫褬褭褮褯褰褱褲褳褴褵褶褷褸褹褺褻褼褽褾褿 +
    8940 襀襁襂襃襄襅襆襇襈襉襊襋襌襍襎襏襐襑襒襓襔襕襖襗襘襙襚襛襜襝襞襟 +
    8960 襠襡襢襣襤襥襦襧襨襩襪襫襬襭襮襯襰襱襲襳襴襵襶襷襸襹襺襻襼襽襾西 +
    8980 覀要覂覃覄覅覆覇覈覉覊見覌覍覎規覐覑覒覓覔覕視覗覘覙覚覛覜覝覞覟 +
    89A0 覠覡覢覣覤覥覦覧覨覩親覫覬覭覮覯覰覱覲観覴覵覶覷覸覹覺覻覼覽覾覿 +
    89C0 觀见观觃规觅视觇览觉觊觋觌觍觎觏觐觑角觓觔觕觖觗觘觙觚觛觜觝觞觟 +
    89E0 觠觡觢解觤觥触觧觨觩觪觫觬觭觮觯觰觱觲觳觴觵觶觷觸觹觺觻觼觽觾觿 +
    8A00 言訁訂訃訄訅訆訇計訉訊訋訌訍討訏訐訑訒訓訔訕訖託記訙訚訛訜訝訞訟 +
    8A20 訠訡訢訣訤訥訦訧訨訩訪訫訬設訮訯訰許訲訳訴訵訶訷訸訹診註証訽訾訿 +
    8A40 詀詁詂詃詄詅詆詇詈詉詊詋詌詍詎詏詐詑詒詓詔評詖詗詘詙詚詛詜詝詞詟 +
    8A60 詠詡詢詣詤詥試詧詨詩詪詫詬詭詮詯詰話該詳詴詵詶詷詸詹詺詻詼詽詾詿 +
    8A80 誀誁誂誃誄誅誆誇誈誉誊誋誌認誎誏誐誑誒誓誔誕誖誗誘誙誚誛誜誝語誟 +
    8AA0 誠誡誢誣誤誥誦誧誨誩說誫説読誮誯誰誱課誳誴誵誶誷誸誹誺誻誼誽誾調 +
    8AC0 諀諁諂諃諄諅諆談諈諉諊請諌諍諎諏諐諑諒諓諔諕論諗諘諙諚諛諜諝諞諟 +
    8AE0 諠諡諢諣諤諥諦諧諨諩諪諫諬諭諮諯諰諱諲諳諴諵諶諷諸諹諺諻諼諽諾諿 +
    8B00 謀謁謂謃謄謅謆謇謈謉謊謋謌謍謎謏謐謑謒謓謔謕謖謗謘謙謚講謜謝謞謟 +
    8B20 謠謡謢謣謤謥謦謧謨謩謪謫謬謭謮謯謰謱謲謳謴謵謶謷謸謹謺謻謼謽謾謿 +
    8B40 譀譁譂譃譄譅譆譇譈證譊譋譌譍譎譏譐譑譒譓譔譕譖譗識譙譚譛譜譝譞譟 +
    8B60 譠譡譢譣譤譥警譧譨譩譪譫譬譭譮譯議譱譲譳譴譵譶護譸譹譺譻譼譽譾譿 +
    8B80 讀讁讂讃讄讅讆讇讈讉變讋讌讍讎讏讐讑讒讓讔讕讖讗讘讙讚讛讜讝讞讟 +
    8BA0 讠计订讣认讥讦讧讨让讪讫讬训议讯记讱讲讳讴讵讶讷许讹论讻讼讽设访 +
    8BC0 诀证诂诃评诅识诇诈诉诊诋诌词诎诏诐译诒诓诔试诖诗诘诙诚诛诜话诞诟 +
    8BE0 诠诡询诣诤该详诧诨诩诪诫诬语诮误诰诱诲诳说诵诶请诸诹诺读诼诽课诿 +
    8C00 谀谁谂调谄谅谆谇谈谉谊谋谌谍谎谏谐谑谒谓谔谕谖谗谘谙谚谛谜谝谞谟 +
    8C20 谠谡谢谣谤谥谦谧谨谩谪谫谬谭谮谯谰谱谲谳谴谵谶谷谸谹谺谻谼谽谾谿 +
    8C40 豀豁豂豃豄豅豆豇豈豉豊豋豌豍豎豏豐豑豒豓豔豕豖豗豘豙豚豛豜豝豞豟 +
    8C60 豠象豢豣豤豥豦豧豨豩豪豫豬豭豮豯豰豱豲豳豴豵豶豷豸豹豺豻豼豽豾豿 +
    8C80 貀貁貂貃貄貅貆貇貈貉貊貋貌貍貎貏貐貑貒貓貔貕貖貗貘貙貚貛貜貝貞貟 +
    8CA0 負財貢貣貤貥貦貧貨販貪貫責貭貮貯貰貱貲貳貴貵貶買貸貹貺費貼貽貾貿 +
    8CC0 賀賁賂賃賄賅賆資賈賉賊賋賌賍賎賏賐賑賒賓賔賕賖賗賘賙賚賛賜賝賞賟 +
    8CE0 賠賡賢賣賤賥賦賧賨賩質賫賬賭賮賯賰賱賲賳賴賵賶賷賸賹賺賻購賽賾賿 +
    8D00 贀贁贂贃贄贅贆贇贈贉贊贋贌贍贎贏贐贑贒贓贔贕贖贗贘贙贚贛贜贝贞负 +
    8D20 贠贡财责贤败账货质贩贪贫贬购贮贯贰贱贲贳贴贵贶贷贸费贺贻贼贽贾贿 +
    8D40 赀赁赂赃资赅赆赇赈赉赊赋赌赍赎赏赐赑赒赓赔赕赖赗赘赙赚赛赜赝赞赟 +
    8D60 赠赡赢赣赤赥赦赧赨赩赪赫赬赭赮赯走赱赲赳赴赵赶起赸赹赺赻赼赽赾赿 +
    8D80 趀趁趂趃趄超趆趇趈趉越趋趌趍趎趏趐趑趒趓趔趕趖趗趘趙趚趛趜趝趞趟 +
    8DA0 趠趡趢趣趤趥趦趧趨趩趪趫趬趭趮趯趰趱趲足趴趵趶趷趸趹趺趻趼趽趾趿 +
    8DC0 跀跁跂跃跄跅跆跇跈跉跊跋跌跍跎跏跐跑跒跓跔跕跖跗跘跙跚跛跜距跞跟 +
    8DE0 跠跡跢跣跤跥跦跧跨跩跪跫跬跭跮路跰跱跲跳跴践跶跷跸跹跺跻跼跽跾跿 +
    8E00 踀踁踂踃踄踅踆踇踈踉踊踋踌踍踎踏踐踑踒踓踔踕踖踗踘踙踚踛踜踝踞踟 +
    8E20 踠踡踢踣踤踥踦踧踨踩踪踫踬踭踮踯踰踱踲踳踴踵踶踷踸踹踺踻踼踽踾踿 +
    8E40 蹀蹁蹂蹃蹄蹅蹆蹇蹈蹉蹊蹋蹌蹍蹎蹏蹐蹑蹒蹓蹔蹕蹖蹗蹘蹙蹚蹛蹜蹝蹞蹟 +
    8E60 蹠蹡蹢蹣蹤蹥蹦蹧蹨蹩蹪蹫蹬蹭蹮蹯蹰蹱蹲蹳蹴蹵蹶蹷蹸蹹蹺蹻蹼蹽蹾蹿 +
    8E80 躀躁躂躃躄躅躆躇躈躉躊躋躌躍躎躏躐躑躒躓躔躕躖躗躘躙躚躛躜躝躞躟 +
    8EA0 躠躡躢躣躤躥躦躧躨躩躪身躬躭躮躯躰躱躲躳躴躵躶躷躸躹躺躻躼躽躾躿 +
    8EC0 軀軁軂軃軄軅軆軇軈軉車軋軌軍軎軏軐軑軒軓軔軕軖軗軘軙軚軛軜軝軞軟 +
    8EE0 軠軡転軣軤軥軦軧軨軩軪軫軬軭軮軯軰軱軲軳軴軵軶軷軸軹軺軻軼軽軾軿 +
    8F00 輀輁輂較輄輅輆輇輈載輊輋輌輍輎輏輐輑輒輓輔輕輖輗輘輙輚輛輜輝輞輟 +
    8F20 輠輡輢輣輤輥輦輧輨輩輪輫輬輭輮輯輰輱輲輳輴輵輶輷輸輹輺輻輼輽輾輿 +
    8F40 轀轁轂轃轄轅轆轇轈轉轊轋轌轍轎轏轐轑轒轓轔轕轖轗轘轙轚轛轜轝轞轟 +
    8F60 轠轡轢轣轤轥车轧轨轩轪轫转轭轮软轰轱轲轳轴轵轶轷轸轹轺轻轼载轾轿 +
    8F80 辀辁辂较辄辅辆辇辈辉辊辋辌辍辎辏辐辑辒输辔辕辖辗辘辙辚辛辜辝辞辟 +
    8FA0 辠辡辢辣辤辥辦辧辨辩辪辫辬辭辮辯辰辱農辳辴辵辶辷辸边辺辻込辽达辿 +
    8FC0 迀迁迂迃迄迅迆过迈迉迊迋迌迍迎迏运近迒迓返迕迖迗还这迚进远违连迟 +
    8FE0 迠迡迢迣迤迥迦迧迨迩迪迫迬迭迮迯述迱迲迳迴迵迶迷迸迹迺迻迼追迾迿 +
    9000 退送适逃逄逅逆逇逈选逊逋逌逍逎透逐逑递逓途逕逖逗逘這通逛逜逝逞速 +
    9020 造逡逢連逤逥逦逧逨逩逪逫逬逭逮逯逰週進逳逴逵逶逷逸逹逺逻逼逽逾逿 +
    9040 遀遁遂遃遄遅遆遇遈遉遊運遌遍過遏遐遑遒道達違遖遗遘遙遚遛遜遝遞遟 +
    9060 遠遡遢遣遤遥遦遧遨適遪遫遬遭遮遯遰遱遲遳遴遵遶遷選遹遺遻遼遽遾避 +
    9080 邀邁邂邃還邅邆邇邈邉邊邋邌邍邎邏邐邑邒邓邔邕邖邗邘邙邚邛邜邝邞邟 +
    90A0 邠邡邢那邤邥邦邧邨邩邪邫邬邭邮邯邰邱邲邳邴邵邶邷邸邹邺邻邼邽邾邿 +
    90C0 郀郁郂郃郄郅郆郇郈郉郊郋郌郍郎郏郐郑郒郓郔郕郖郗郘郙郚郛郜郝郞郟 +
    90E0 郠郡郢郣郤郥郦郧部郩郪郫郬郭郮郯郰郱郲郳郴郵郶郷郸郹郺郻郼都郾郿 +
    9100 鄀鄁鄂鄃鄄鄅鄆鄇鄈鄉鄊鄋鄌鄍鄎鄏鄐鄑鄒鄓鄔鄕鄖鄗鄘鄙鄚鄛鄜鄝鄞鄟 +
    9120 鄠鄡鄢鄣鄤鄥鄦鄧鄨鄩鄪鄫鄬鄭鄮鄯鄰鄱鄲鄳鄴鄵鄶鄷鄸鄹鄺鄻鄼鄽鄾鄿 +
    9140 酀酁酂酃酄酅酆酇酈酉酊酋酌配酎酏酐酑酒酓酔酕酖酗酘酙酚酛酜酝酞酟 +
    9160 酠酡酢酣酤酥酦酧酨酩酪酫酬酭酮酯酰酱酲酳酴酵酶酷酸酹酺酻酼酽酾酿 +
    9180 醀醁醂醃醄醅醆醇醈醉醊醋醌醍醎醏醐醑醒醓醔醕醖醗醘醙醚醛醜醝醞醟 +
    91A0 醠醡醢醣醤醥醦醧醨醩醪醫醬醭醮醯醰醱醲醳醴醵醶醷醸醹醺醻醼醽醾醿 +
    91C0 釀釁釂釃釄釅釆采釈釉释釋里重野量釐金釒釓釔釕釖釗釘釙釚釛釜針釞釟 +
    91E0 釠釡釢釣釤釥釦釧釨釩釪釫釬釭釮釯釰釱釲釳釴釵釶釷釸釹釺釻釼釽釾釿 +
    9200 鈀鈁鈂鈃鈄鈅鈆鈇鈈鈉鈊鈋鈌鈍鈎鈏鈐鈑鈒鈓鈔鈕鈖鈗鈘鈙鈚鈛鈜鈝鈞鈟 +
    9220 鈠鈡鈢鈣鈤鈥鈦鈧鈨鈩鈪鈫鈬鈭鈮鈯鈰鈱鈲鈳鈴鈵鈶鈷鈸鈹鈺鈻鈼鈽鈾鈿 +
    9240 鉀鉁鉂鉃鉄鉅鉆鉇鉈鉉鉊鉋鉌鉍鉎鉏鉐鉑鉒鉓鉔鉕鉖鉗鉘鉙鉚鉛鉜鉝鉞鉟 +
    9260 鉠鉡鉢鉣鉤鉥鉦鉧鉨鉩鉪鉫鉬鉭鉮鉯鉰鉱鉲鉳鉴鉵鉶鉷鉸鉹鉺鉻鉼鉽鉾鉿 +
    9280 銀銁銂銃銄銅銆銇銈銉銊銋銌銍銎銏銐銑銒銓銔銕銖銗銘銙銚銛銜銝銞銟 +
    92A0 銠銡銢銣銤銥銦銧銨銩銪銫銬銭銮銯銰銱銲銳銴銵銶銷銸銹銺銻銼銽銾銿 +
    92C0 鋀鋁鋂鋃鋄鋅鋆鋇鋈鋉鋊鋋鋌鋍鋎鋏鋐鋑鋒鋓鋔鋕鋖鋗鋘鋙鋚鋛鋜鋝鋞鋟 +
    92E0 鋠鋡鋢鋣鋤鋥鋦鋧鋨鋩鋪鋫鋬鋭鋮鋯鋰鋱鋲鋳鋴鋵鋶鋷鋸鋹鋺鋻鋼鋽鋾鋿 +
    9300 錀錁錂錃錄錅錆錇錈錉錊錋錌錍錎錏錐錑錒錓錔錕錖錗錘錙錚錛錜錝錞錟 +
    9320 錠錡錢錣錤錥錦錧錨錩錪錫錬錭錮錯錰錱録錳錴錵錶錷錸錹錺錻錼錽錾錿 +
    9340 鍀鍁鍂鍃鍄鍅鍆鍇鍈鍉鍊鍋鍌鍍鍎鍏鍐鍑鍒鍓鍔鍕鍖鍗鍘鍙鍚鍛鍜鍝鍞鍟 +
    9360 鍠鍡鍢鍣鍤鍥鍦鍧鍨鍩鍪鍫鍬鍭鍮鍯鍰鍱鍲鍳鍴鍵鍶鍷鍸鍹鍺鍻鍼鍽鍾鍿 +
    9380 鎀鎁鎂鎃鎄鎅鎆鎇鎈鎉鎊鎋鎌鎍鎎鎏鎐鎑鎒鎓鎔鎕鎖鎗鎘鎙鎚鎛鎜鎝鎞鎟 +
    93A0 鎠鎡鎢鎣鎤鎥鎦鎧鎨鎩鎪鎫鎬鎭鎮鎯鎰鎱鎲鎳鎴鎵鎶鎷鎸鎹鎺鎻鎼鎽鎾鎿 +
    93C0 鏀鏁鏂鏃鏄鏅鏆鏇鏈鏉鏊鏋鏌鏍鏎鏏鏐鏑鏒鏓鏔鏕鏖鏗鏘鏙鏚鏛鏜鏝鏞鏟 +
    93E0 鏠鏡鏢鏣鏤鏥鏦鏧鏨鏩鏪鏫鏬鏭鏮鏯鏰鏱鏲鏳鏴鏵鏶鏷鏸鏹鏺鏻鏼鏽鏾鏿 +
    9400 鐀鐁鐂鐃鐄鐅鐆鐇鐈鐉鐊鐋鐌鐍鐎鐏鐐鐑鐒鐓鐔鐕鐖鐗鐘鐙鐚鐛鐜鐝鐞鐟 +
    9420 鐠鐡鐢鐣鐤鐥鐦鐧鐨鐩鐪鐫鐬鐭鐮鐯鐰鐱鐲鐳鐴鐵鐶鐷鐸鐹鐺鐻鐼鐽鐾鐿 +
    9440 鑀鑁鑂鑃鑄鑅鑆鑇鑈鑉鑊鑋鑌鑍鑎鑏鑐鑑鑒鑓鑔鑕鑖鑗鑘鑙鑚鑛鑜鑝鑞鑟 +
    9460 鑠鑡鑢鑣鑤鑥鑦鑧鑨鑩鑪鑫鑬鑭鑮鑯鑰鑱鑲鑳鑴鑵鑶鑷鑸鑹鑺鑻鑼鑽鑾鑿 +
    9480 钀钁钂钃钄钅钆钇针钉钊钋钌钍钎钏钐钑钒钓钔钕钖钗钘钙钚钛钜钝钞钟 +
    94A0 钠钡钢钣钤钥钦钧钨钩钪钫钬钭钮钯钰钱钲钳钴钵钶钷钸钹钺钻钼钽钾钿 +
    94C0 铀铁铂铃铄铅铆铇铈铉铊铋铌铍铎铏铐铑铒铓铔铕铖铗铘铙铚铛铜铝铞铟 +
    94E0 铠铡铢铣铤铥铦铧铨铩铪铫铬铭铮铯铰铱铲铳铴铵银铷铸铹铺铻铼铽链铿 +
    9500 销锁锂锃锄锅锆锇锈锉锊锋锌锍锎锏锐锑锒锓锔锕锖锗锘错锚锛锜锝锞锟 +
    9520 锠锡锢锣锤锥锦锧锨锩锪锫锬锭键锯锰锱锲锳锴锵锶锷锸锹锺锻锼锽锾锿 +
    9540 镀镁镂镃镄镅镆镇镈镉镊镋镌镍镎镏镐镑镒镓镔镕镖镗镘镙镚镛镜镝镞镟 +
    9560 镠镡镢镣镤镥镦镧镨镩镪镫镬镭镮镯镰镱镲镳镴镵镶長镸镹镺镻镼镽镾长 +
    9580 門閁閂閃閄閅閆閇閈閉閊開閌閍閎閏閐閑閒間閔閕閖閗閘閙閚閛閜閝閞閟 +
    95A0 閠閡関閣閤閥閦閧閨閩閪閫閬閭閮閯閰閱閲閳閴閵閶閷閸閹閺閻閼閽閾閿 +
    95C0 闀闁闂闃闄闅闆闇闈闉闊闋闌闍闎闏闐闑闒闓闔闕闖闗闘闙闚闛關闝闞闟 +
    95E0 闠闡闢闣闤闥闦闧门闩闪闫闬闭问闯闰闱闲闳间闵闶闷闸闹闺闻闼闽闾闿 +
    9600 阀阁阂阃阄阅阆阇阈阉阊阋阌阍阎阏阐阑阒阓阔阕阖阗阘阙阚阛阜阝阞队 +
    9620 阠阡阢阣阤阥阦阧阨阩阪阫阬阭阮阯阰阱防阳阴阵阶阷阸阹阺阻阼阽阾阿 +
    9640 陀陁陂陃附际陆陇陈陉陊陋陌降陎陏限陑陒陓陔陕陖陗陘陙陚陛陜陝陞陟 +
    9660 陠陡院陣除陥陦陧陨险陪陫陬陭陮陯陰陱陲陳陴陵陶陷陸陹険陻陼陽陾陿 +
    9680 隀隁隂隃隄隅隆隇隈隉隊隋隌隍階随隐隑隒隓隔隕隖隗隘隙隚際障隝隞隟 +
    96A0 隠隡隢隣隤隥隦隧隨隩險隫隬隭隮隯隰隱隲隳隴隵隶隷隸隹隺隻隼隽难隿 +
    96C0 雀雁雂雃雄雅集雇雈雉雊雋雌雍雎雏雐雑雒雓雔雕雖雗雘雙雚雛雜雝雞雟 +
    96E0 雠雡離難雤雥雦雧雨雩雪雫雬雭雮雯雰雱雲雳雴雵零雷雸雹雺電雼雽雾雿 +
    9700 需霁霂霃霄霅霆震霈霉霊霋霌霍霎霏霐霑霒霓霔霕霖霗霘霙霚霛霜霝霞霟 +
    9720 霠霡霢霣霤霥霦霧霨霩霪霫霬霭霮霯霰霱露霳霴霵霶霷霸霹霺霻霼霽霾霿 +
    9740 靀靁靂靃靄靅靆靇靈靉靊靋靌靍靎靏靐靑青靓靔靕靖靗靘静靚靛靜靝非靟 +
    9760 靠靡面靣靤靥靦靧靨革靪靫靬靭靮靯靰靱靲靳靴靵靶靷靸靹靺靻靼靽靾靿 +
    9780 鞀鞁鞂鞃鞄鞅鞆鞇鞈鞉鞊鞋鞌鞍鞎鞏鞐鞑鞒鞓鞔鞕鞖鞗鞘鞙鞚鞛鞜鞝鞞鞟 +
    97A0 鞠鞡鞢鞣鞤鞥鞦鞧鞨鞩鞪鞫鞬鞭鞮鞯鞰鞱鞲鞳鞴鞵鞶鞷鞸鞹鞺鞻鞼鞽鞾鞿 +
    97C0 韀韁韂韃韄韅韆韇韈韉韊韋韌韍韎韏韐韑韒韓韔韕韖韗韘韙韚韛韜韝韞韟 +
    97E0 韠韡韢韣韤韥韦韧韨韩韪韫韬韭韮韯韰韱韲音韴韵韶韷韸韹韺韻韼韽韾響 +
    9800 頀頁頂頃頄項順頇須頉頊頋頌頍頎頏預頑頒頓頔頕頖頗領頙頚頛頜頝頞頟 +
    9820 頠頡頢頣頤頥頦頧頨頩頪頫頬頭頮頯頰頱頲頳頴頵頶頷頸頹頺頻頼頽頾頿 +
    9840 顀顁顂顃顄顅顆顇顈顉顊顋題額顎顏顐顑顒顓顔顕顖顗願顙顚顛顜顝類顟 +
    9860 顠顡顢顣顤顥顦顧顨顩顪顫顬顭顮顯顰顱顲顳顴页顶顷顸项顺须顼顽顾顿 +
    9880 颀颁颂颃预颅领颇颈颉颊颋颌颍颎颏颐频颒颓颔颕颖颗题颙颚颛颜额颞颟 +
    98A0 颠颡颢颣颤颥颦颧風颩颪颫颬颭颮颯颰颱颲颳颴颵颶颷颸颹颺颻颼颽颾颿 +
    98C0 飀飁飂飃飄飅飆飇飈飉飊飋飌飍风飏飐飑飒飓飔飕飖飗飘飙飚飛飜飝飞食 +
    98E0 飠飡飢飣飤飥飦飧飨飩飪飫飬飭飮飯飰飱飲飳飴飵飶飷飸飹飺飻飼飽飾飿 +
    9900 餀餁餂餃餄餅餆餇餈餉養餋餌餍餎餏餐餑餒餓餔餕餖餗餘餙餚餛餜餝餞餟 +
    9920 餠餡餢餣餤餥餦餧館餩餪餫餬餭餮餯餰餱餲餳餴餵餶餷餸餹餺餻餼餽餾餿 +
    9940 饀饁饂饃饄饅饆饇饈饉饊饋饌饍饎饏饐饑饒饓饔饕饖饗饘饙饚饛饜饝饞饟 +
    9960 饠饡饢饣饤饥饦饧饨饩饪饫饬饭饮饯饰饱饲饳饴饵饶饷饸饹饺饻饼饽饾饿 +
    9980 馀馁馂馃馄馅馆馇馈馉馊馋馌馍馎馏馐馑馒馓馔馕首馗馘香馚馛馜馝馞馟 +
    99A0 馠馡馢馣馤馥馦馧馨馩馪馫馬馭馮馯馰馱馲馳馴馵馶馷馸馹馺馻馼馽馾馿 +
    99C0 駀駁駂駃駄駅駆駇駈駉駊駋駌駍駎駏駐駑駒駓駔駕駖駗駘駙駚駛駜駝駞駟 +
    99E0 駠駡駢駣駤駥駦駧駨駩駪駫駬駭駮駯駰駱駲駳駴駵駶駷駸駹駺駻駼駽駾駿 +
    9A00 騀騁騂騃騄騅騆騇騈騉騊騋騌騍騎騏騐騑騒験騔騕騖騗騘騙騚騛騜騝騞騟 +
    9A20 騠騡騢騣騤騥騦騧騨騩騪騫騬騭騮騯騰騱騲騳騴騵騶騷騸騹騺騻騼騽騾騿 +
    9A40 驀驁驂驃驄驅驆驇驈驉驊驋驌驍驎驏驐驑驒驓驔驕驖驗驘驙驚驛驜驝驞驟 +
    9A60 驠驡驢驣驤驥驦驧驨驩驪驫马驭驮驯驰驱驲驳驴驵驶驷驸驹驺驻驼驽驾驿 +
    9A80 骀骁骂骃骄骅骆骇骈骉骊骋验骍骎骏骐骑骒骓骔骕骖骗骘骙骚骛骜骝骞骟 +
    9AA0 骠骡骢骣骤骥骦骧骨骩骪骫骬骭骮骯骰骱骲骳骴骵骶骷骸骹骺骻骼骽骾骿 +
    9AC0 髀髁髂髃髄髅髆髇髈髉髊髋髌髍髎髏髐髑髒髓體髕髖髗高髙髚髛髜髝髞髟 +
    9AE0 髠髡髢髣髤髥髦髧髨髩髪髫髬髭髮髯髰髱髲髳髴髵髶髷髸髹髺髻髼髽髾髿 +
    9B00 鬀鬁鬂鬃鬄鬅鬆鬇鬈鬉鬊鬋鬌鬍鬎鬏鬐鬑鬒鬓鬔鬕鬖鬗鬘鬙鬚鬛鬜鬝鬞鬟 +
    9B20 鬠鬡鬢鬣鬤鬥鬦鬧鬨鬩鬪鬫鬬鬭鬮鬯鬰鬱鬲鬳鬴鬵鬶鬷鬸鬹鬺鬻鬼鬽鬾鬿 +
    9B40 魀魁魂魃魄魅魆魇魈魉魊魋魌魍魎魏魐魑魒魓魔魕魖魗魘魙魚魛魜魝魞魟 +
    9B60 魠魡魢魣魤魥魦魧魨魩魪魫魬魭魮魯魰魱魲魳魴魵魶魷魸魹魺魻魼魽魾魿 +
    9B80 鮀鮁鮂鮃鮄鮅鮆鮇鮈鮉鮊鮋鮌鮍鮎鮏鮐鮑鮒鮓鮔鮕鮖鮗鮘鮙鮚鮛鮜鮝鮞鮟 +
    9BA0 鮠鮡鮢鮣鮤鮥鮦鮧鮨鮩鮪鮫鮬鮭鮮鮯鮰鮱鮲鮳鮴鮵鮶鮷鮸鮹鮺鮻鮼鮽鮾鮿 +
    9BC0 鯀鯁鯂鯃鯄鯅鯆鯇鯈鯉鯊鯋鯌鯍鯎鯏鯐鯑鯒鯓鯔鯕鯖鯗鯘鯙鯚鯛鯜鯝鯞鯟 +
    9BE0 鯠鯡鯢鯣鯤鯥鯦鯧鯨鯩鯪鯫鯬鯭鯮鯯鯰鯱鯲鯳鯴鯵鯶鯷鯸鯹鯺鯻鯼鯽鯾鯿 +
    9C00 鰀鰁鰂鰃鰄鰅鰆鰇鰈鰉鰊鰋鰌鰍鰎鰏鰐鰑鰒鰓鰔鰕鰖鰗鰘鰙鰚鰛鰜鰝鰞鰟 +
    9C20 鰠鰡鰢鰣鰤鰥鰦鰧鰨鰩鰪鰫鰬鰭鰮鰯鰰鰱鰲鰳鰴鰵鰶鰷鰸鰹鰺鰻鰼鰽鰾鰿 +
    9C40 鱀鱁鱂鱃鱄鱅鱆鱇鱈鱉鱊鱋鱌鱍鱎鱏鱐鱑鱒鱓鱔鱕鱖鱗鱘鱙鱚鱛鱜鱝鱞鱟 +
    9C60 鱠鱡鱢鱣鱤鱥鱦鱧鱨鱩鱪鱫鱬鱭鱮鱯鱰鱱鱲鱳鱴鱵鱶鱷鱸鱹鱺鱻鱼鱽鱾鱿 +
    9C80 鲀鲁鲂鲃鲄鲅鲆鲇鲈鲉鲊鲋鲌鲍鲎鲏鲐鲑鲒鲓鲔鲕鲖鲗鲘鲙鲚鲛鲜鲝鲞鲟 +
    9CA0 鲠鲡鲢鲣鲤鲥鲦鲧鲨鲩鲪鲫鲬鲭鲮鲯鲰鲱鲲鲳鲴鲵鲶鲷鲸鲹鲺鲻鲼鲽鲾鲿 +
    9CC0 鳀鳁鳂鳃鳄鳅鳆鳇鳈鳉鳊鳋鳌鳍鳎鳏鳐鳑鳒鳓鳔鳕鳖鳗鳘鳙鳚鳛鳜鳝鳞鳟 +
    9CE0 鳠鳡鳢鳣鳤鳥鳦鳧鳨鳩鳪鳫鳬鳭鳮鳯鳰鳱鳲鳳鳴鳵鳶鳷鳸鳹鳺鳻鳼鳽鳾鳿 +
    9D00 鴀鴁鴂鴃鴄鴅鴆鴇鴈鴉鴊鴋鴌鴍鴎鴏鴐鴑鴒鴓鴔鴕鴖鴗鴘鴙鴚鴛鴜鴝鴞鴟 +
    9D20 鴠鴡鴢鴣鴤鴥鴦鴧鴨鴩鴪鴫鴬鴭鴮鴯鴰鴱鴲鴳鴴鴵鴶鴷鴸鴹鴺鴻鴼鴽鴾鴿 +
    9D40 鵀鵁鵂鵃鵄鵅鵆鵇鵈鵉鵊鵋鵌鵍鵎鵏鵐鵑鵒鵓鵔鵕鵖鵗鵘鵙鵚鵛鵜鵝鵞鵟 +
    9D60 鵠鵡鵢鵣鵤鵥鵦鵧鵨鵩鵪鵫鵬鵭鵮鵯鵰鵱鵲鵳鵴鵵鵶鵷鵸鵹鵺鵻鵼鵽鵾鵿 +
    9D80 鶀鶁鶂鶃鶄鶅鶆鶇鶈鶉鶊鶋鶌鶍鶎鶏鶐鶑鶒鶓鶔鶕鶖鶗鶘鶙鶚鶛鶜鶝鶞鶟 +
    9DA0 鶠鶡鶢鶣鶤鶥鶦鶧鶨鶩鶪鶫鶬鶭鶮鶯鶰鶱鶲鶳鶴鶵鶶鶷鶸鶹鶺鶻鶼鶽鶾鶿 +
    9DC0 鷀鷁鷂鷃鷄鷅鷆鷇鷈鷉鷊鷋鷌鷍鷎鷏鷐鷑鷒鷓鷔鷕鷖鷗鷘鷙鷚鷛鷜鷝鷞鷟 +
    9DE0 鷠鷡鷢鷣鷤鷥鷦鷧鷨鷩鷪鷫鷬鷭鷮鷯鷰鷱鷲鷳鷴鷵鷶鷷鷸鷹鷺鷻鷼鷽鷾鷿 +
    9E00 鸀鸁鸂鸃鸄鸅鸆鸇鸈鸉鸊鸋鸌鸍鸎鸏鸐鸑鸒鸓鸔鸕鸖鸗鸘鸙鸚鸛鸜鸝鸞鸟 +
    9E20 鸠鸡鸢鸣鸤鸥鸦鸧鸨鸩鸪鸫鸬鸭鸮鸯鸰鸱鸲鸳鸴鸵鸶鸷鸸鸹鸺鸻鸼鸽鸾鸿 +
    9E40 鹀鹁鹂鹃鹄鹅鹆鹇鹈鹉鹊鹋鹌鹍鹎鹏鹐鹑鹒鹓鹔鹕鹖鹗鹘鹙鹚鹛鹜鹝鹞鹟 +
    9E60 鹠鹡鹢鹣鹤鹥鹦鹧鹨鹩鹪鹫鹬鹭鹮鹯鹰鹱鹲鹳鹴鹵鹶鹷鹸鹹鹺鹻鹼鹽鹾鹿 +
    9E80 麀麁麂麃麄麅麆麇麈麉麊麋麌麍麎麏麐麑麒麓麔麕麖麗麘麙麚麛麜麝麞麟 +
    9EA0 麠麡麢麣麤麥麦麧麨麩麪麫麬麭麮麯麰麱麲麳麴麵麶麷麸麹麺麻麼麽麾麿 +
    9EC0 黀黁黂黃黄黅黆黇黈黉黊黋黌黍黎黏黐黑黒黓黔黕黖黗默黙黚黛黜黝點黟 +
    9EE0 黠黡黢黣黤黥黦黧黨黩黪黫黬黭黮黯黰黱黲黳黴黵黶黷黸黹黺黻黼黽黾黿 +
    9F00 鼀鼁鼂鼃鼄鼅鼆鼇鼈鼉鼊鼋鼌鼍鼎鼏鼐鼑鼒鼓鼔鼕鼖鼗鼘鼙鼚鼛鼜鼝鼞鼟 +
    9F20 鼠鼡鼢鼣鼤鼥鼦鼧鼨鼩鼪鼫鼬鼭鼮鼯鼰鼱鼲鼳鼴鼵鼶鼷鼸鼹鼺鼻鼼鼽鼾鼿 +
    9F40 齀齁齂齃齄齅齆齇齈齉齊齋齌齍齎齏齐齑齒齓齔齕齖齗齘齙齚齛齜齝齞齟 +
    9F60 齠齡齢齣齤齥齦齧齨齩齪齫齬齭齮齯齰齱齲齳齴齵齶齷齸齹齺齻齼齽齾齿 +
    9F80 龀龁龂龃龄龅龆龇龈龉龊龋龌龍龎龏龐龑龒龓龔龕龖龗龘龙龚龛龜龝龞龟 +
    9FA0 龠龡龢龣龤龥龦龧龨龩龪龫龬龭龮龯龰龱龲龳龴龵龶龷龸龹龺龻龼龽龾龿 +
    9FC0 鿀鿁鿂鿃鿄鿅鿆鿇鿈鿉鿊鿋鿌鿍鿎鿏鿐鿑鿒鿓鿔鿕鿖鿗鿘鿙鿚鿛鿜鿝鿞鿟 +
    9FE0 鿠鿡鿢鿣鿤鿥鿦鿧鿨鿩鿪鿫鿬鿭鿮鿯鿰鿱鿲鿳鿴鿵鿶鿷鿸鿹鿺鿻鿼鿽鿾鿿 +
    A000 ꀀꀁꀂꀃꀄꀅꀆꀇꀈꀉꀊꀋꀌꀍꀎꀏꀐꀑꀒꀓꀔꀕꀖꀗꀘꀙꀚꀛꀜꀝꀞꀟ +
    A020 ꀠꀡꀢꀣꀤꀥꀦꀧꀨꀩꀪꀫꀬꀭꀮꀯꀰꀱꀲꀳꀴꀵꀶꀷꀸꀹꀺꀻꀼꀽꀾꀿ +
    A040 ꁀꁁꁂꁃꁄꁅꁆꁇꁈꁉꁊꁋꁌꁍꁎꁏꁐꁑꁒꁓꁔꁕꁖꁗꁘꁙꁚꁛꁜꁝꁞꁟ +
    A060 ꁠꁡꁢꁣꁤꁥꁦꁧꁨꁩꁪꁫꁬꁭꁮꁯꁰꁱꁲꁳꁴꁵꁶꁷꁸꁹꁺꁻꁼꁽꁾꁿ +
    A080 ꂀꂁꂂꂃꂄꂅꂆꂇꂈꂉꂊꂋꂌꂍꂎꂏꂐꂑꂒꂓꂔꂕꂖꂗꂘꂙꂚꂛꂜꂝꂞꂟ +
    A0A0 ꂠꂡꂢꂣꂤꂥꂦꂧꂨꂩꂪꂫꂬꂭꂮꂯꂰꂱꂲꂳꂴꂵꂶꂷꂸꂹꂺꂻꂼꂽꂾꂿ +
    A0C0 ꃀꃁꃂꃃꃄꃅꃆꃇꃈꃉꃊꃋꃌꃍꃎꃏꃐꃑꃒꃓꃔꃕꃖꃗꃘꃙꃚꃛꃜꃝꃞꃟ +
    A0E0 ꃠꃡꃢꃣꃤꃥꃦꃧꃨꃩꃪꃫꃬꃭꃮꃯꃰꃱꃲꃳꃴꃵꃶꃷꃸꃹꃺꃻꃼꃽꃾꃿ +
    A100 ꄀꄁꄂꄃꄄꄅꄆꄇꄈꄉꄊꄋꄌꄍꄎꄏꄐꄑꄒꄓꄔꄕꄖꄗꄘꄙꄚꄛꄜꄝꄞꄟ +
    A120 ꄠꄡꄢꄣꄤꄥꄦꄧꄨꄩꄪꄫꄬꄭꄮꄯꄰꄱꄲꄳꄴꄵꄶꄷꄸꄹꄺꄻꄼꄽꄾꄿ +
    A140 ꅀꅁꅂꅃꅄꅅꅆꅇꅈꅉꅊꅋꅌꅍꅎꅏꅐꅑꅒꅓꅔꅕꅖꅗꅘꅙꅚꅛꅜꅝꅞꅟ +
    A160 ꅠꅡꅢꅣꅤꅥꅦꅧꅨꅩꅪꅫꅬꅭꅮꅯꅰꅱꅲꅳꅴꅵꅶꅷꅸꅹꅺꅻꅼꅽꅾꅿ +
    A180 ꆀꆁꆂꆃꆄꆅꆆꆇꆈꆉꆊꆋꆌꆍꆎꆏꆐꆑꆒꆓꆔꆕꆖꆗꆘꆙꆚꆛꆜꆝꆞꆟ +
    A1A0 ꆠꆡꆢꆣꆤꆥꆦꆧꆨꆩꆪꆫꆬꆭꆮꆯꆰꆱꆲꆳꆴꆵꆶꆷꆸꆹꆺꆻꆼꆽꆾꆿ +
    A1C0 ꇀꇁꇂꇃꇄꇅꇆꇇꇈꇉꇊꇋꇌꇍꇎꇏꇐꇑꇒꇓꇔꇕꇖꇗꇘꇙꇚꇛꇜꇝꇞꇟ +
    A1E0 ꇠꇡꇢꇣꇤꇥꇦꇧꇨꇩꇪꇫꇬꇭꇮꇯꇰꇱꇲꇳꇴꇵꇶꇷꇸꇹꇺꇻꇼꇽꇾꇿ +
    A200 ꈀꈁꈂꈃꈄꈅꈆꈇꈈꈉꈊꈋꈌꈍꈎꈏꈐꈑꈒꈓꈔꈕꈖꈗꈘꈙꈚꈛꈜꈝꈞꈟ +
    A220 ꈠꈡꈢꈣꈤꈥꈦꈧꈨꈩꈪꈫꈬꈭꈮꈯꈰꈱꈲꈳꈴꈵꈶꈷꈸꈹꈺꈻꈼꈽꈾꈿ +
    A240 ꉀꉁꉂꉃꉄꉅꉆꉇꉈꉉꉊꉋꉌꉍꉎꉏꉐꉑꉒꉓꉔꉕꉖꉗꉘꉙꉚꉛꉜꉝꉞꉟ +
    A260 ꉠꉡꉢꉣꉤꉥꉦꉧꉨꉩꉪꉫꉬꉭꉮꉯꉰꉱꉲꉳꉴꉵꉶꉷꉸꉹꉺꉻꉼꉽꉾꉿ +
    A280 ꊀꊁꊂꊃꊄꊅꊆꊇꊈꊉꊊꊋꊌꊍꊎꊏꊐꊑꊒꊓꊔꊕꊖꊗꊘꊙꊚꊛꊜꊝꊞꊟ +
    A2A0 ꊠꊡꊢꊣꊤꊥꊦꊧꊨꊩꊪꊫꊬꊭꊮꊯꊰꊱꊲꊳꊴꊵꊶꊷꊸꊹꊺꊻꊼꊽꊾꊿ +
    A2C0 ꋀꋁꋂꋃꋄꋅꋆꋇꋈꋉꋊꋋꋌꋍꋎꋏꋐꋑꋒꋓꋔꋕꋖꋗꋘꋙꋚꋛꋜꋝꋞꋟ +
    A2E0 ꋠꋡꋢꋣꋤꋥꋦꋧꋨꋩꋪꋫꋬꋭꋮꋯꋰꋱꋲꋳꋴꋵꋶꋷꋸꋹꋺꋻꋼꋽꋾꋿ +
    A300 ꌀꌁꌂꌃꌄꌅꌆꌇꌈꌉꌊꌋꌌꌍꌎꌏꌐꌑꌒꌓꌔꌕꌖꌗꌘꌙꌚꌛꌜꌝꌞꌟ +
    A320 ꌠꌡꌢꌣꌤꌥꌦꌧꌨꌩꌪꌫꌬꌭꌮꌯꌰꌱꌲꌳꌴꌵꌶꌷꌸꌹꌺꌻꌼꌽꌾꌿ +
    A340 ꍀꍁꍂꍃꍄꍅꍆꍇꍈꍉꍊꍋꍌꍍꍎꍏꍐꍑꍒꍓꍔꍕꍖꍗꍘꍙꍚꍛꍜꍝꍞꍟ +
    A360 ꍠꍡꍢꍣꍤꍥꍦꍧꍨꍩꍪꍫꍬꍭꍮꍯꍰꍱꍲꍳꍴꍵꍶꍷꍸꍹꍺꍻꍼꍽꍾꍿ +
    A380 ꎀꎁꎂꎃꎄꎅꎆꎇꎈꎉꎊꎋꎌꎍꎎꎏꎐꎑꎒꎓꎔꎕꎖꎗꎘꎙꎚꎛꎜꎝꎞꎟ +
    A3A0 ꎠꎡꎢꎣꎤꎥꎦꎧꎨꎩꎪꎫꎬꎭꎮꎯꎰꎱꎲꎳꎴꎵꎶꎷꎸꎹꎺꎻꎼꎽꎾꎿ +
    A3C0 ꏀꏁꏂꏃꏄꏅꏆꏇꏈꏉꏊꏋꏌꏍꏎꏏꏐꏑꏒꏓꏔꏕꏖꏗꏘꏙꏚꏛꏜꏝꏞꏟ +
    A3E0 ꏠꏡꏢꏣꏤꏥꏦꏧꏨꏩꏪꏫꏬꏭꏮꏯꏰꏱꏲꏳꏴꏵꏶꏷꏸꏹꏺꏻꏼꏽꏾꏿ +
    A400 ꐀꐁꐂꐃꐄꐅꐆꐇꐈꐉꐊꐋꐌꐍꐎꐏꐐꐑꐒꐓꐔꐕꐖꐗꐘꐙꐚꐛꐜꐝꐞꐟ +
    A420 ꐠꐡꐢꐣꐤꐥꐦꐧꐨꐩꐪꐫꐬꐭꐮꐯꐰꐱꐲꐳꐴꐵꐶꐷꐸꐹꐺꐻꐼꐽꐾꐿ +
    A440 ꑀꑁꑂꑃꑄꑅꑆꑇꑈꑉꑊꑋꑌꑍꑎꑏꑐꑑꑒꑓꑔꑕꑖꑗꑘꑙꑚꑛꑜꑝꑞꑟ +
    A460 ꑠꑡꑢꑣꑤꑥꑦꑧꑨꑩꑪꑫꑬꑭꑮꑯꑰꑱꑲꑳꑴꑵꑶꑷꑸꑹꑺꑻꑼꑽꑾꑿ +
    A480 ꒀꒁꒂꒃꒄꒅꒆꒇꒈꒉꒊꒋꒌ꒍꒎꒏꒐꒑꒒꒓꒔꒕꒖꒗꒘꒙꒚꒛꒜꒝꒞꒟ +
    A4A0 ꒠꒡꒢꒣꒤꒥꒦꒧꒨꒩꒪꒫꒬꒭꒮꒯꒰꒱꒲꒳꒴꒵꒶꒷꒸꒹꒺꒻꒼꒽꒾꒿ +
    A4C0 ꓀꓁꓂꓃꓄꓅꓆꓇꓈꓉꓊꓋꓌꓍꓎꓏ꓐꓑꓒꓓꓔꓕꓖꓗꓘꓙꓚꓛꓜꓝꓞꓟ +
    A4E0 ꓠꓡꓢꓣꓤꓥꓦꓧꓨꓩꓪꓫꓬꓭꓮꓯꓰꓱꓲꓳꓴꓵꓶꓷꓸꓹꓺꓻꓼꓽ꓾꓿ +
    A500 ꔀꔁꔂꔃꔄꔅꔆꔇꔈꔉꔊꔋꔌꔍꔎꔏꔐꔑꔒꔓꔔꔕꔖꔗꔘꔙꔚꔛꔜꔝꔞꔟ +
    A520 ꔠꔡꔢꔣꔤꔥꔦꔧꔨꔩꔪꔫꔬꔭꔮꔯꔰꔱꔲꔳꔴꔵꔶꔷꔸꔹꔺꔻꔼꔽꔾꔿ +
    A540 ꕀꕁꕂꕃꕄꕅꕆꕇꕈꕉꕊꕋꕌꕍꕎꕏꕐꕑꕒꕓꕔꕕꕖꕗꕘꕙꕚꕛꕜꕝꕞꕟ +
    A560 ꕠꕡꕢꕣꕤꕥꕦꕧꕨꕩꕪꕫꕬꕭꕮꕯꕰꕱꕲꕳꕴꕵꕶꕷꕸꕹꕺꕻꕼꕽꕾꕿ +
    A580 ꖀꖁꖂꖃꖄꖅꖆꖇꖈꖉꖊꖋꖌꖍꖎꖏꖐꖑꖒꖓꖔꖕꖖꖗꖘꖙꖚꖛꖜꖝꖞꖟ +
    A5A0 ꖠꖡꖢꖣꖤꖥꖦꖧꖨꖩꖪꖫꖬꖭꖮꖯꖰꖱꖲꖳꖴꖵꖶꖷꖸꖹꖺꖻꖼꖽꖾꖿ +
    A5C0 ꗀꗁꗂꗃꗄꗅꗆꗇꗈꗉꗊꗋꗌꗍꗎꗏꗐꗑꗒꗓꗔꗕꗖꗗꗘꗙꗚꗛꗜꗝꗞꗟ +
    A5E0 ꗠꗡꗢꗣꗤꗥꗦꗧꗨꗩꗪꗫꗬꗭꗮꗯꗰꗱꗲꗳꗴꗵꗶꗷꗸꗹꗺꗻꗼꗽꗾꗿ +
    A600 ꘀꘁꘂꘃꘄꘅꘆꘇꘈꘉꘊꘋꘌ꘍꘎꘏ꘐꘑꘒꘓꘔꘕꘖꘗꘘꘙꘚꘛꘜꘝꘞꘟ +
    A620 ꘠꘡꘢꘣꘤꘥꘦꘧꘨꘩ꘪꘫ꘬꘭꘮꘯꘰꘱꘲꘳꘴꘵꘶꘷꘸꘹꘺꘻꘼꘽꘾꘿ +
    A640 ꙀꙁꙂꙃꙄꙅꙆꙇꙈꙉꙊꙋꙌꙍꙎꙏꙐꙑꙒꙓꙔꙕꙖꙗꙘꙙꙚꙛꙜꙝꙞꙟ +
    A660 ꙠꙡꙢꙣꙤꙥꙦꙧꙨꙩꙪꙫꙬꙭꙮ꙯꙰꙱꙲꙳ꙴꙵꙶꙷꙸꙹꙺꙻ꙼꙽꙾ꙿ +
    A680 ꚀꚁꚂꚃꚄꚅꚆꚇꚈꚉꚊꚋꚌꚍꚎꚏꚐꚑꚒꚓꚔꚕꚖꚗꚘꚙꚚꚛꚜꚝꚞꚟ +
    A6A0 ꚠꚡꚢꚣꚤꚥꚦꚧꚨꚩꚪꚫꚬꚭꚮꚯꚰꚱꚲꚳꚴꚵꚶꚷꚸꚹꚺꚻꚼꚽꚾꚿ +
    A6C0 ꛀꛁꛂꛃꛄꛅꛆꛇꛈꛉꛊꛋꛌꛍꛎꛏꛐꛑꛒꛓꛔꛕꛖꛗꛘꛙꛚꛛꛜꛝꛞꛟ +
    A6E0 ꛠꛡꛢꛣꛤꛥꛦꛧꛨꛩꛪꛫꛬꛭꛮꛯ꛰꛱꛲꛳꛴꛵꛶꛷꛸꛹꛺꛻꛼꛽꛾꛿ +
    A700 ꜀꜁꜂꜃꜄꜅꜆꜇꜈꜉꜊꜋꜌꜍꜎꜏꜐꜑꜒꜓꜔꜕꜖ꜗꜘꜙꜚꜛꜜꜝꜞꜟ +
    A720 ꜠꜡ꜢꜣꜤꜥꜦꜧꜨꜩꜪꜫꜬꜭꜮꜯꜰꜱꜲꜳꜴꜵꜶꜷꜸꜹꜺꜻꜼꜽꜾꜿ +
    A740 ꝀꝁꝂꝃꝄꝅꝆꝇꝈꝉꝊꝋꝌꝍꝎꝏꝐꝑꝒꝓꝔꝕꝖꝗꝘꝙꝚꝛꝜꝝꝞꝟ +
    A760 ꝠꝡꝢꝣꝤꝥꝦꝧꝨꝩꝪꝫꝬꝭꝮꝯꝰꝱꝲꝳꝴꝵꝶꝷꝸꝹꝺꝻꝼꝽꝾꝿ +
    A780 ꞀꞁꞂꞃꞄꞅꞆꞇꞈ꞉꞊ꞋꞌꞍꞎꞏꞐꞑꞒꞓꞔꞕꞖꞗꞘꞙꞚꞛꞜꞝꞞꞟ +
    A7A0 ꞠꞡꞢꞣꞤꞥꞦꞧꞨꞩꞪꞫꞬꞭꞮꞯꞰꞱꞲꞳꞴꞵꞶꞷꞸꞹꞺꞻꞼꞽꞾꞿ +
    A7C0 ꟀꟁꟂꟃꟄꟅꟆꟇꟈꟉꟊꟋꟌꟍ꟎꟏Ꟑꟑ꟒ꟓ꟔ꟕꟖꟗꟘꟙꟚꟛꟜ꟝꟞꟟ +
    A7E0 ꟠꟡꟢꟣꟤꟥꟦꟧꟨꟩꟪꟫꟬꟭꟮꟯꟰꟱ꟲꟳꟴꟵꟶꟷꟸꟹꟺꟻꟼꟽꟾꟿ +
    A800 ꠀꠁꠂꠃꠄꠅ꠆ꠇꠈꠉꠊꠋꠌꠍꠎꠏꠐꠑꠒꠓꠔꠕꠖꠗꠘꠙꠚꠛꠜꠝꠞꠟ +
    A820 ꠠꠡꠢꠣꠤꠥꠦꠧ꠨꠩꠪꠫꠬꠭꠮꠯꠰꠱꠲꠳꠴꠵꠶꠷꠸꠹꠺꠻꠼꠽꠾꠿ +
    A840 ꡀꡁꡂꡃꡄꡅꡆꡇꡈꡉꡊꡋꡌꡍꡎꡏꡐꡑꡒꡓꡔꡕꡖꡗꡘꡙꡚꡛꡜꡝꡞꡟ +
    A860 ꡠꡡꡢꡣꡤꡥꡦꡧꡨꡩꡪꡫꡬꡭꡮꡯꡰꡱꡲꡳ꡴꡵꡶꡷꡸꡹꡺꡻꡼꡽꡾꡿ +
    A880 ꢀꢁꢂꢃꢄꢅꢆꢇꢈꢉꢊꢋꢌꢍꢎꢏꢐꢑꢒꢓꢔꢕꢖꢗꢘꢙꢚꢛꢜꢝꢞꢟ +
    A8A0 ꢠꢡꢢꢣꢤꢥꢦꢧꢨꢩꢪꢫꢬꢭꢮꢯꢰꢱꢲꢳꢴꢵꢶꢷꢸꢹꢺꢻꢼꢽꢾꢿ +
    A8C0 ꣀꣁꣂꣃ꣄ꣅ꣆꣇꣈꣉꣊꣋꣌꣍꣎꣏꣐꣑꣒꣓꣔꣕꣖꣗꣘꣙꣚꣛꣜꣝꣞꣟ +
    A8E0 ꣠꣡꣢꣣꣤꣥꣦꣧꣨꣩꣪꣫꣬꣭꣮꣯꣰꣱ꣲꣳꣴꣵꣶꣷ꣸꣹꣺ꣻ꣼ꣽꣾꣿ +
    A900 ꤀꤁꤂꤃꤄꤅꤆꤇꤈꤉ꤊꤋꤌꤍꤎꤏꤐꤑꤒꤓꤔꤕꤖꤗꤘꤙꤚꤛꤜꤝꤞꤟ +
    A920 ꤠꤡꤢꤣꤤꤥꤦꤧꤨꤩꤪ꤫꤬꤭꤮꤯ꤰꤱꤲꤳꤴꤵꤶꤷꤸꤹꤺꤻꤼꤽꤾꤿ +
    A940 ꥀꥁꥂꥃꥄꥅꥆꥇꥈꥉꥊꥋꥌꥍꥎꥏꥐꥑꥒ꥓꥔꥕꥖꥗꥘꥙꥚꥛꥜꥝꥞꥟ +
    A960 ꥠꥡꥢꥣꥤꥥꥦꥧꥨꥩꥪꥫꥬꥭꥮꥯꥰꥱꥲꥳꥴꥵꥶꥷꥸꥹꥺꥻꥼ꥽꥾꥿ +
    A980 ꦀꦁꦂꦃꦄꦅꦆꦇꦈꦉꦊꦋꦌꦍꦎꦏꦐꦑꦒꦓꦔꦕꦖꦗꦘꦙꦚꦛꦜꦝꦞꦟ +
    A9A0 ꦠꦡꦢꦣꦤꦥꦦꦧꦨꦩꦪꦫꦬꦭꦮꦯꦰꦱꦲ꦳ꦴꦵꦶꦷꦸꦹꦺꦻꦼꦽꦾꦿ +
    A9C0 ꧀꧁꧂꧃꧄꧅꧆꧇꧈꧉꧊꧋꧌꧍꧎ꧏ꧐꧑꧒꧓꧔꧕꧖꧗꧘꧙꧚꧛꧜꧝꧞꧟ +
    A9E0 ꧠꧡꧢꧣꧤꧥꧦꧧꧨꧩꧪꧫꧬꧭꧮꧯ꧰꧱꧲꧳꧴꧵꧶꧷꧸꧹ꧺꧻꧼꧽꧾ꧿ +
    AA00 ꨀꨁꨂꨃꨄꨅꨆꨇꨈꨉꨊꨋꨌꨍꨎꨏꨐꨑꨒꨓꨔꨕꨖꨗꨘꨙꨚꨛꨜꨝꨞꨟ +
    AA20 ꨠꨡꨢꨣꨤꨥꨦꨧꨨꨩꨪꨫꨬꨭꨮꨯꨰꨱꨲꨳꨴꨵꨶ꨷꨸꨹꨺꨻꨼꨽꨾꨿ +
    AA40 ꩀꩁꩂꩃꩄꩅꩆꩇꩈꩉꩊꩋꩌꩍ꩎꩏꩐꩑꩒꩓꩔꩕꩖꩗꩘꩙꩚꩛꩜꩝꩞꩟ +
    AA60 ꩠꩡꩢꩣꩤꩥꩦꩧꩨꩩꩪꩫꩬꩭꩮꩯꩰꩱꩲꩳꩴꩵꩶ꩷꩸꩹ꩺꩻꩼꩽꩾꩿ +
    AA80 ꪀꪁꪂꪃꪄꪅꪆꪇꪈꪉꪊꪋꪌꪍꪎꪏꪐꪑꪒꪓꪔꪕꪖꪗꪘꪙꪚꪛꪜꪝꪞꪟ +
    AAA0 ꪠꪡꪢꪣꪤꪥꪦꪧꪨꪩꪪꪫꪬꪭꪮꪯꪰꪱꪴꪲꪳꪵꪶꪷꪸꪹꪺꪻꪼꪽꪾ꪿ +
    AAC0 ꫀ꫁ꫂ꫃꫄꫅꫆꫇꫈꫉꫊꫋꫌꫍꫎꫏꫐꫑꫒꫓꫔꫕꫖꫗꫘꫙꫚ꫛꫜꫝ꫞꫟ +
    AAE0 ꫠꫡꫢꫣꫤꫥꫦꫧꫨꫩꫪꫫꫬꫭꫮꫯ꫰꫱ꫲꫳꫴꫵ꫶꫷꫸꫹꫺꫻꫼꫽꫾꫿ +
    AB00 ꬀ꬁꬂꬃꬄꬅꬆ꬇꬈ꬉꬊꬋꬌꬍꬎ꬏꬐ꬑꬒꬓꬔꬕꬖ꬗꬘꬙꬚꬛꬜꬝꬞꬟ +
    AB20 ꬠꬡꬢꬣꬤꬥꬦ꬧ꬨꬩꬪꬫꬬꬭꬮ꬯ꬰꬱꬲꬳꬴꬵꬶꬷꬸꬹꬺꬻꬼꬽꬾꬿ +
    AB40 ꭀꭁꭂꭃꭄꭅꭆꭇꭈꭉꭊꭋꭌꭍꭎꭏꭐꭑꭒꭓꭔꭕꭖꭗꭘꭙꭚ꭛ꭜꭝꭞꭟ +
    AB60 ꭠꭡꭢꭣꭤꭥꭦꭧꭨꭩ꭪꭫꭬꭭꭮꭯ꭰꭱꭲꭳꭴꭵꭶꭷꭸꭹꭺꭻꭼꭽꭾꭿ +
    AB80 ꮀꮁꮂꮃꮄꮅꮆꮇꮈꮉꮊꮋꮌꮍꮎꮏꮐꮑꮒꮓꮔꮕꮖꮗꮘꮙꮚꮛꮜꮝꮞꮟ +
    ABA0 ꮠꮡꮢꮣꮤꮥꮦꮧꮨꮩꮪꮫꮬꮭꮮꮯꮰꮱꮲꮳꮴꮵꮶꮷꮸꮹꮺꮻꮼꮽꮾꮿ +
    ABC0 ꯀꯁꯂꯃꯄꯅꯆꯇꯈꯉꯊꯋꯌꯍꯎꯏꯐꯑꯒꯓꯔꯕꯖꯗꯘꯙꯚꯛꯜꯝꯞꯟ +
    ABE0 ꯠꯡꯢꯣꯤꯥꯦꯧꯨꯩꯪ꯫꯬꯭꯮꯯꯰꯱꯲꯳꯴꯵꯶꯷꯸꯹꯺꯻꯼꯽꯾꯿ +
    AC00 가각갂갃간갅갆갇갈갉갊갋갌갍갎갏감갑값갓갔강갖갗갘같갚갛개객갞갟 +
    AC20 갠갡갢갣갤갥갦갧갨갩갪갫갬갭갮갯갰갱갲갳갴갵갶갷갸갹갺갻갼갽갾갿 +
    AC40 걀걁걂걃걄걅걆걇걈걉걊걋걌걍걎걏걐걑걒걓걔걕걖걗걘걙걚걛걜걝걞걟 +
    AC60 걠걡걢걣걤걥걦걧걨걩걪걫걬걭걮걯거걱걲걳건걵걶걷걸걹걺걻걼걽걾걿 +
    AC80 검겁겂것겄겅겆겇겈겉겊겋게겍겎겏겐겑겒겓겔겕겖겗겘겙겚겛겜겝겞겟 +
    ACA0 겠겡겢겣겤겥겦겧겨격겪겫견겭겮겯결겱겲겳겴겵겶겷겸겹겺겻겼경겾겿 +
    ACC0 곀곁곂곃계곅곆곇곈곉곊곋곌곍곎곏곐곑곒곓곔곕곖곗곘곙곚곛곜곝곞곟 +
    ACE0 고곡곢곣곤곥곦곧골곩곪곫곬곭곮곯곰곱곲곳곴공곶곷곸곹곺곻과곽곾곿 +
    AD00 관괁괂괃괄괅괆괇괈괉괊괋괌괍괎괏괐광괒괓괔괕괖괗괘괙괚괛괜괝괞괟 +
    AD20 괠괡괢괣괤괥괦괧괨괩괪괫괬괭괮괯괰괱괲괳괴괵괶괷괸괹괺괻괼괽괾괿 +
    AD40 굀굁굂굃굄굅굆굇굈굉굊굋굌굍굎굏교굑굒굓굔굕굖굗굘굙굚굛굜굝굞굟 +
    AD60 굠굡굢굣굤굥굦굧굨굩굪굫구국굮굯군굱굲굳굴굵굶굷굸굹굺굻굼굽굾굿 +
    AD80 궀궁궂궃궄궅궆궇궈궉궊궋권궍궎궏궐궑궒궓궔궕궖궗궘궙궚궛궜궝궞궟 +
    ADA0 궠궡궢궣궤궥궦궧궨궩궪궫궬궭궮궯궰궱궲궳궴궵궶궷궸궹궺궻궼궽궾궿 +
    ADC0 귀귁귂귃귄귅귆귇귈귉귊귋귌귍귎귏귐귑귒귓귔귕귖귗귘귙귚귛규귝귞귟 +
    ADE0 균귡귢귣귤귥귦귧귨귩귪귫귬귭귮귯귰귱귲귳귴귵귶귷그극귺귻근귽귾귿 +
    AE00 글긁긂긃긄긅긆긇금급긊긋긌긍긎긏긐긑긒긓긔긕긖긗긘긙긚긛긜긝긞긟 +
    AE20 긠긡긢긣긤긥긦긧긨긩긪긫긬긭긮긯기긱긲긳긴긵긶긷길긹긺긻긼긽긾긿 +
    AE40 김깁깂깃깄깅깆깇깈깉깊깋까깍깎깏깐깑깒깓깔깕깖깗깘깙깚깛깜깝깞깟 +
    AE60 깠깡깢깣깤깥깦깧깨깩깪깫깬깭깮깯깰깱깲깳깴깵깶깷깸깹깺깻깼깽깾깿 +
    AE80 꺀꺁꺂꺃꺄꺅꺆꺇꺈꺉꺊꺋꺌꺍꺎꺏꺐꺑꺒꺓꺔꺕꺖꺗꺘꺙꺚꺛꺜꺝꺞꺟 +
    AEA0 꺠꺡꺢꺣꺤꺥꺦꺧꺨꺩꺪꺫꺬꺭꺮꺯꺰꺱꺲꺳꺴꺵꺶꺷꺸꺹꺺꺻꺼꺽꺾꺿 +
    AEC0 껀껁껂껃껄껅껆껇껈껉껊껋껌껍껎껏껐껑껒껓껔껕껖껗께껙껚껛껜껝껞껟 +
    AEE0 껠껡껢껣껤껥껦껧껨껩껪껫껬껭껮껯껰껱껲껳껴껵껶껷껸껹껺껻껼껽껾껿 +
    AF00 꼀꼁꼂꼃꼄꼅꼆꼇꼈꼉꼊꼋꼌꼍꼎꼏꼐꼑꼒꼓꼔꼕꼖꼗꼘꼙꼚꼛꼜꼝꼞꼟 +
    AF20 꼠꼡꼢꼣꼤꼥꼦꼧꼨꼩꼪꼫꼬꼭꼮꼯꼰꼱꼲꼳꼴꼵꼶꼷꼸꼹꼺꼻꼼꼽꼾꼿 +
    AF40 꽀꽁꽂꽃꽄꽅꽆꽇꽈꽉꽊꽋꽌꽍꽎꽏꽐꽑꽒꽓꽔꽕꽖꽗꽘꽙꽚꽛꽜꽝꽞꽟 +
    AF60 꽠꽡꽢꽣꽤꽥꽦꽧꽨꽩꽪꽫꽬꽭꽮꽯꽰꽱꽲꽳꽴꽵꽶꽷꽸꽹꽺꽻꽼꽽꽾꽿 +
    AF80 꾀꾁꾂꾃꾄꾅꾆꾇꾈꾉꾊꾋꾌꾍꾎꾏꾐꾑꾒꾓꾔꾕꾖꾗꾘꾙꾚꾛꾜꾝꾞꾟 +
    AFA0 꾠꾡꾢꾣꾤꾥꾦꾧꾨꾩꾪꾫꾬꾭꾮꾯꾰꾱꾲꾳꾴꾵꾶꾷꾸꾹꾺꾻꾼꾽꾾꾿 +
    AFC0 꿀꿁꿂꿃꿄꿅꿆꿇꿈꿉꿊꿋꿌꿍꿎꿏꿐꿑꿒꿓꿔꿕꿖꿗꿘꿙꿚꿛꿜꿝꿞꿟 +
    AFE0 꿠꿡꿢꿣꿤꿥꿦꿧꿨꿩꿪꿫꿬꿭꿮꿯꿰꿱꿲꿳꿴꿵꿶꿷꿸꿹꿺꿻꿼꿽꿾꿿 +
    B000 뀀뀁뀂뀃뀄뀅뀆뀇뀈뀉뀊뀋뀌뀍뀎뀏뀐뀑뀒뀓뀔뀕뀖뀗뀘뀙뀚뀛뀜뀝뀞뀟 +
    B020 뀠뀡뀢뀣뀤뀥뀦뀧뀨뀩뀪뀫뀬뀭뀮뀯뀰뀱뀲뀳뀴뀵뀶뀷뀸뀹뀺뀻뀼뀽뀾뀿 +
    B040 끀끁끂끃끄끅끆끇끈끉끊끋끌끍끎끏끐끑끒끓끔끕끖끗끘끙끚끛끜끝끞끟 +
    B060 끠끡끢끣끤끥끦끧끨끩끪끫끬끭끮끯끰끱끲끳끴끵끶끷끸끹끺끻끼끽끾끿 +
    B080 낀낁낂낃낄낅낆낇낈낉낊낋낌낍낎낏낐낑낒낓낔낕낖낗나낙낚낛난낝낞낟 +
    B0A0 날낡낢낣낤낥낦낧남납낪낫났낭낮낯낰낱낲낳내낵낶낷낸낹낺낻낼낽낾낿 +
    B0C0 냀냁냂냃냄냅냆냇냈냉냊냋냌냍냎냏냐냑냒냓냔냕냖냗냘냙냚냛냜냝냞냟 +
    B0E0 냠냡냢냣냤냥냦냧냨냩냪냫냬냭냮냯냰냱냲냳냴냵냶냷냸냹냺냻냼냽냾냿 +
    B100 넀넁넂넃넄넅넆넇너넉넊넋넌넍넎넏널넑넒넓넔넕넖넗넘넙넚넛넜넝넞넟 +
    B120 넠넡넢넣네넥넦넧넨넩넪넫넬넭넮넯넰넱넲넳넴넵넶넷넸넹넺넻넼넽넾넿 +
    B140 녀녁녂녃년녅녆녇녈녉녊녋녌녍녎녏념녑녒녓녔녕녖녗녘녙녚녛녜녝녞녟 +
    B160 녠녡녢녣녤녥녦녧녨녩녪녫녬녭녮녯녰녱녲녳녴녵녶녷노녹녺녻논녽녾녿 +
    B180 놀놁놂놃놄놅놆놇놈놉놊놋놌농놎놏놐놑높놓놔놕놖놗놘놙놚놛놜놝놞놟 +
    B1A0 놠놡놢놣놤놥놦놧놨놩놪놫놬놭놮놯놰놱놲놳놴놵놶놷놸놹놺놻놼놽놾놿 +
    B1C0 뇀뇁뇂뇃뇄뇅뇆뇇뇈뇉뇊뇋뇌뇍뇎뇏뇐뇑뇒뇓뇔뇕뇖뇗뇘뇙뇚뇛뇜뇝뇞뇟 +
    B1E0 뇠뇡뇢뇣뇤뇥뇦뇧뇨뇩뇪뇫뇬뇭뇮뇯뇰뇱뇲뇳뇴뇵뇶뇷뇸뇹뇺뇻뇼뇽뇾뇿 +
    B200 눀눁눂눃누눅눆눇눈눉눊눋눌눍눎눏눐눑눒눓눔눕눖눗눘눙눚눛눜눝눞눟 +
    B220 눠눡눢눣눤눥눦눧눨눩눪눫눬눭눮눯눰눱눲눳눴눵눶눷눸눹눺눻눼눽눾눿 +
    B240 뉀뉁뉂뉃뉄뉅뉆뉇뉈뉉뉊뉋뉌뉍뉎뉏뉐뉑뉒뉓뉔뉕뉖뉗뉘뉙뉚뉛뉜뉝뉞뉟 +
    B260 뉠뉡뉢뉣뉤뉥뉦뉧뉨뉩뉪뉫뉬뉭뉮뉯뉰뉱뉲뉳뉴뉵뉶뉷뉸뉹뉺뉻뉼뉽뉾뉿 +
    B280 늀늁늂늃늄늅늆늇늈늉늊늋늌늍늎늏느늑늒늓는늕늖늗늘늙늚늛늜늝늞늟 +
    B2A0 늠늡늢늣늤능늦늧늨늩늪늫늬늭늮늯늰늱늲늳늴늵늶늷늸늹늺늻늼늽늾늿 +
    B2C0 닀닁닂닃닄닅닆닇니닉닊닋닌닍닎닏닐닑닒닓닔닕닖닗님닙닚닛닜닝닞닟 +
    B2E0 닠닡닢닣다닥닦닧단닩닪닫달닭닮닯닰닱닲닳담답닶닷닸당닺닻닼닽닾닿 +
    B300 대댁댂댃댄댅댆댇댈댉댊댋댌댍댎댏댐댑댒댓댔댕댖댗댘댙댚댛댜댝댞댟 +
    B320 댠댡댢댣댤댥댦댧댨댩댪댫댬댭댮댯댰댱댲댳댴댵댶댷댸댹댺댻댼댽댾댿 +
    B340 덀덁덂덃덄덅덆덇덈덉덊덋덌덍덎덏덐덑덒덓더덕덖덗던덙덚덛덜덝덞덟 +
    B360 덠덡덢덣덤덥덦덧덨덩덪덫덬덭덮덯데덱덲덳덴덵덶덷델덹덺덻덼덽덾덿 +
    B380 뎀뎁뎂뎃뎄뎅뎆뎇뎈뎉뎊뎋뎌뎍뎎뎏뎐뎑뎒뎓뎔뎕뎖뎗뎘뎙뎚뎛뎜뎝뎞뎟 +
    B3A0 뎠뎡뎢뎣뎤뎥뎦뎧뎨뎩뎪뎫뎬뎭뎮뎯뎰뎱뎲뎳뎴뎵뎶뎷뎸뎹뎺뎻뎼뎽뎾뎿 +
    B3C0 돀돁돂돃도독돆돇돈돉돊돋돌돍돎돏돐돑돒돓돔돕돖돗돘동돚돛돜돝돞돟 +
    B3E0 돠돡돢돣돤돥돦돧돨돩돪돫돬돭돮돯돰돱돲돳돴돵돶돷돸돹돺돻돼돽돾돿 +
    B400 됀됁됂됃됄됅됆됇됈됉됊됋됌됍됎됏됐됑됒됓됔됕됖됗되됙됚됛된됝됞됟 +
    B420 될됡됢됣됤됥됦됧됨됩됪됫됬됭됮됯됰됱됲됳됴됵됶됷됸됹됺됻됼됽됾됿 +
    B440 둀둁둂둃둄둅둆둇둈둉둊둋둌둍둎둏두둑둒둓둔둕둖둗둘둙둚둛둜둝둞둟 +
    B460 둠둡둢둣둤둥둦둧둨둩둪둫둬둭둮둯둰둱둲둳둴둵둶둷둸둹둺둻둼둽둾둿 +
    B480 뒀뒁뒂뒃뒄뒅뒆뒇뒈뒉뒊뒋뒌뒍뒎뒏뒐뒑뒒뒓뒔뒕뒖뒗뒘뒙뒚뒛뒜뒝뒞뒟 +
    B4A0 뒠뒡뒢뒣뒤뒥뒦뒧뒨뒩뒪뒫뒬뒭뒮뒯뒰뒱뒲뒳뒴뒵뒶뒷뒸뒹뒺뒻뒼뒽뒾뒿 +
    B4C0 듀듁듂듃듄듅듆듇듈듉듊듋듌듍듎듏듐듑듒듓듔듕듖듗듘듙듚듛드득듞듟 +
    B4E0 든듡듢듣들듥듦듧듨듩듪듫듬듭듮듯듰등듲듳듴듵듶듷듸듹듺듻듼듽듾듿 +
    B500 딀딁딂딃딄딅딆딇딈딉딊딋딌딍딎딏딐딑딒딓디딕딖딗딘딙딚딛딜딝딞딟 +
    B520 딠딡딢딣딤딥딦딧딨딩딪딫딬딭딮딯따딱딲딳딴딵딶딷딸딹딺딻딼딽딾딿 +
    B540 땀땁땂땃땄땅땆땇땈땉땊땋때땍땎땏땐땑땒땓땔땕땖땗땘땙땚땛땜땝땞땟 +
    B560 땠땡땢땣땤땥땦땧땨땩땪땫땬땭땮땯땰땱땲땳땴땵땶땷땸땹땺땻땼땽땾땿 +
    B580 떀떁떂떃떄떅떆떇떈떉떊떋떌떍떎떏떐떑떒떓떔떕떖떗떘떙떚떛떜떝떞떟 +
    B5A0 떠떡떢떣떤떥떦떧떨떩떪떫떬떭떮떯떰떱떲떳떴떵떶떷떸떹떺떻떼떽떾떿 +
    B5C0 뗀뗁뗂뗃뗄뗅뗆뗇뗈뗉뗊뗋뗌뗍뗎뗏뗐뗑뗒뗓뗔뗕뗖뗗뗘뗙뗚뗛뗜뗝뗞뗟 +
    B5E0 뗠뗡뗢뗣뗤뗥뗦뗧뗨뗩뗪뗫뗬뗭뗮뗯뗰뗱뗲뗳뗴뗵뗶뗷뗸뗹뗺뗻뗼뗽뗾뗿 +
    B600 똀똁똂똃똄똅똆똇똈똉똊똋똌똍똎똏또똑똒똓똔똕똖똗똘똙똚똛똜똝똞똟 +
    B620 똠똡똢똣똤똥똦똧똨똩똪똫똬똭똮똯똰똱똲똳똴똵똶똷똸똹똺똻똼똽똾똿 +
    B640 뙀뙁뙂뙃뙄뙅뙆뙇뙈뙉뙊뙋뙌뙍뙎뙏뙐뙑뙒뙓뙔뙕뙖뙗뙘뙙뙚뙛뙜뙝뙞뙟 +
    B660 뙠뙡뙢뙣뙤뙥뙦뙧뙨뙩뙪뙫뙬뙭뙮뙯뙰뙱뙲뙳뙴뙵뙶뙷뙸뙹뙺뙻뙼뙽뙾뙿 +
    B680 뚀뚁뚂뚃뚄뚅뚆뚇뚈뚉뚊뚋뚌뚍뚎뚏뚐뚑뚒뚓뚔뚕뚖뚗뚘뚙뚚뚛뚜뚝뚞뚟 +
    B6A0 뚠뚡뚢뚣뚤뚥뚦뚧뚨뚩뚪뚫뚬뚭뚮뚯뚰뚱뚲뚳뚴뚵뚶뚷뚸뚹뚺뚻뚼뚽뚾뚿 +
    B6C0 뛀뛁뛂뛃뛄뛅뛆뛇뛈뛉뛊뛋뛌뛍뛎뛏뛐뛑뛒뛓뛔뛕뛖뛗뛘뛙뛚뛛뛜뛝뛞뛟 +
    B6E0 뛠뛡뛢뛣뛤뛥뛦뛧뛨뛩뛪뛫뛬뛭뛮뛯뛰뛱뛲뛳뛴뛵뛶뛷뛸뛹뛺뛻뛼뛽뛾뛿 +
    B700 뜀뜁뜂뜃뜄뜅뜆뜇뜈뜉뜊뜋뜌뜍뜎뜏뜐뜑뜒뜓뜔뜕뜖뜗뜘뜙뜚뜛뜜뜝뜞뜟 +
    B720 뜠뜡뜢뜣뜤뜥뜦뜧뜨뜩뜪뜫뜬뜭뜮뜯뜰뜱뜲뜳뜴뜵뜶뜷뜸뜹뜺뜻뜼뜽뜾뜿 +
    B740 띀띁띂띃띄띅띆띇띈띉띊띋띌띍띎띏띐띑띒띓띔띕띖띗띘띙띚띛띜띝띞띟 +
    B760 띠띡띢띣띤띥띦띧띨띩띪띫띬띭띮띯띰띱띲띳띴띵띶띷띸띹띺띻라락띾띿 +
    B780 란랁랂랃랄랅랆랇랈랉랊랋람랍랎랏랐랑랒랓랔랕랖랗래랙랚랛랜랝랞랟 +
    B7A0 랠랡랢랣랤랥랦랧램랩랪랫랬랭랮랯랰랱랲랳랴략랶랷랸랹랺랻랼랽랾랿 +
    B7C0 럀럁럂럃럄럅럆럇럈량럊럋럌럍럎럏럐럑럒럓럔럕럖럗럘럙럚럛럜럝럞럟 +
    B7E0 럠럡럢럣럤럥럦럧럨럩럪럫러럭럮럯런럱럲럳럴럵럶럷럸럹럺럻럼럽럾럿 +
    B800 렀렁렂렃렄렅렆렇레렉렊렋렌렍렎렏렐렑렒렓렔렕렖렗렘렙렚렛렜렝렞렟 +
    B820 렠렡렢렣려력렦렧련렩렪렫렬렭렮렯렰렱렲렳렴렵렶렷렸령렺렻렼렽렾렿 +
    B840 례롁롂롃롄롅롆롇롈롉롊롋롌롍롎롏롐롑롒롓롔롕롖롗롘롙롚롛로록롞롟 +
    B860 론롡롢롣롤롥롦롧롨롩롪롫롬롭롮롯롰롱롲롳롴롵롶롷롸롹롺롻롼롽롾롿 +
    B880 뢀뢁뢂뢃뢄뢅뢆뢇뢈뢉뢊뢋뢌뢍뢎뢏뢐뢑뢒뢓뢔뢕뢖뢗뢘뢙뢚뢛뢜뢝뢞뢟 +
    B8A0 뢠뢡뢢뢣뢤뢥뢦뢧뢨뢩뢪뢫뢬뢭뢮뢯뢰뢱뢲뢳뢴뢵뢶뢷뢸뢹뢺뢻뢼뢽뢾뢿 +
    B8C0 룀룁룂룃룄룅룆룇룈룉룊룋료룍룎룏룐룑룒룓룔룕룖룗룘룙룚룛룜룝룞룟 +
    B8E0 룠룡룢룣룤룥룦룧루룩룪룫룬룭룮룯룰룱룲룳룴룵룶룷룸룹룺룻룼룽룾룿 +
    B900 뤀뤁뤂뤃뤄뤅뤆뤇뤈뤉뤊뤋뤌뤍뤎뤏뤐뤑뤒뤓뤔뤕뤖뤗뤘뤙뤚뤛뤜뤝뤞뤟 +
    B920 뤠뤡뤢뤣뤤뤥뤦뤧뤨뤩뤪뤫뤬뤭뤮뤯뤰뤱뤲뤳뤴뤵뤶뤷뤸뤹뤺뤻뤼뤽뤾뤿 +
    B940 륀륁륂륃륄륅륆륇륈륉륊륋륌륍륎륏륐륑륒륓륔륕륖륗류륙륚륛륜륝륞륟 +
    B960 률륡륢륣륤륥륦륧륨륩륪륫륬륭륮륯륰륱륲륳르륵륶륷른륹륺륻를륽륾륿 +
    B980 릀릁릂릃름릅릆릇릈릉릊릋릌릍릎릏릐릑릒릓릔릕릖릗릘릙릚릛릜릝릞릟 +
    B9A0 릠릡릢릣릤릥릦릧릨릩릪릫리릭릮릯린릱릲릳릴릵릶릷릸릹릺릻림립릾릿 +
    B9C0 맀링맂맃맄맅맆맇마막맊맋만맍많맏말맑맒맓맔맕맖맗맘맙맚맛맜망맞맟 +
    B9E0 맠맡맢맣매맥맦맧맨맩맪맫맬맭맮맯맰맱맲맳맴맵맶맷맸맹맺맻맼맽맾맿 +
    BA00 먀먁먂먃먄먅먆먇먈먉먊먋먌먍먎먏먐먑먒먓먔먕먖먗먘먙먚먛먜먝먞먟 +
    BA20 먠먡먢먣먤먥먦먧먨먩먪먫먬먭먮먯먰먱먲먳먴먵먶먷머먹먺먻먼먽먾먿 +
    BA40 멀멁멂멃멄멅멆멇멈멉멊멋멌멍멎멏멐멑멒멓메멕멖멗멘멙멚멛멜멝멞멟 +
    BA60 멠멡멢멣멤멥멦멧멨멩멪멫멬멭멮멯며멱멲멳면멵멶멷멸멹멺멻멼멽멾멿 +
    BA80 몀몁몂몃몄명몆몇몈몉몊몋몌몍몎몏몐몑몒몓몔몕몖몗몘몙몚몛몜몝몞몟 +
    BAA0 몠몡몢몣몤몥몦몧모목몪몫몬몭몮몯몰몱몲몳몴몵몶몷몸몹몺못몼몽몾몿 +
    BAC0 뫀뫁뫂뫃뫄뫅뫆뫇뫈뫉뫊뫋뫌뫍뫎뫏뫐뫑뫒뫓뫔뫕뫖뫗뫘뫙뫚뫛뫜뫝뫞뫟 +
    BAE0 뫠뫡뫢뫣뫤뫥뫦뫧뫨뫩뫪뫫뫬뫭뫮뫯뫰뫱뫲뫳뫴뫵뫶뫷뫸뫹뫺뫻뫼뫽뫾뫿 +
    BB00 묀묁묂묃묄묅묆묇묈묉묊묋묌묍묎묏묐묑묒묓묔묕묖묗묘묙묚묛묜묝묞묟 +
    BB20 묠묡묢묣묤묥묦묧묨묩묪묫묬묭묮묯묰묱묲묳무묵묶묷문묹묺묻물묽묾묿 +
    BB40 뭀뭁뭂뭃뭄뭅뭆뭇뭈뭉뭊뭋뭌뭍뭎뭏뭐뭑뭒뭓뭔뭕뭖뭗뭘뭙뭚뭛뭜뭝뭞뭟 +
    BB60 뭠뭡뭢뭣뭤뭥뭦뭧뭨뭩뭪뭫뭬뭭뭮뭯뭰뭱뭲뭳뭴뭵뭶뭷뭸뭹뭺뭻뭼뭽뭾뭿 +
    BB80 뮀뮁뮂뮃뮄뮅뮆뮇뮈뮉뮊뮋뮌뮍뮎뮏뮐뮑뮒뮓뮔뮕뮖뮗뮘뮙뮚뮛뮜뮝뮞뮟 +
    BBA0 뮠뮡뮢뮣뮤뮥뮦뮧뮨뮩뮪뮫뮬뮭뮮뮯뮰뮱뮲뮳뮴뮵뮶뮷뮸뮹뮺뮻뮼뮽뮾뮿 +
    BBC0 므믁믂믃믄믅믆믇믈믉믊믋믌믍믎믏믐믑믒믓믔믕믖믗믘믙믚믛믜믝믞믟 +
    BBE0 믠믡믢믣믤믥믦믧믨믩믪믫믬믭믮믯믰믱믲믳믴믵믶믷미믹믺믻민믽믾믿 +
    BC00 밀밁밂밃밄밅밆밇밈밉밊밋밌밍밎및밐밑밒밓바박밖밗반밙밚받발밝밞밟 +
    BC20 밠밡밢밣밤밥밦밧밨방밪밫밬밭밮밯배백밲밳밴밵밶밷밸밹밺밻밼밽밾밿 +
    BC40 뱀뱁뱂뱃뱄뱅뱆뱇뱈뱉뱊뱋뱌뱍뱎뱏뱐뱑뱒뱓뱔뱕뱖뱗뱘뱙뱚뱛뱜뱝뱞뱟 +
    BC60 뱠뱡뱢뱣뱤뱥뱦뱧뱨뱩뱪뱫뱬뱭뱮뱯뱰뱱뱲뱳뱴뱵뱶뱷뱸뱹뱺뱻뱼뱽뱾뱿 +
    BC80 벀벁벂벃버벅벆벇번벉벊벋벌벍벎벏벐벑벒벓범법벖벗벘벙벚벛벜벝벞벟 +
    BCA0 베벡벢벣벤벥벦벧벨벩벪벫벬벭벮벯벰벱벲벳벴벵벶벷벸벹벺벻벼벽벾벿 +
    BCC0 변볁볂볃별볅볆볇볈볉볊볋볌볍볎볏볐병볒볓볔볕볖볗볘볙볚볛볜볝볞볟 +
    BCE0 볠볡볢볣볤볥볦볧볨볩볪볫볬볭볮볯볰볱볲볳보복볶볷본볹볺볻볼볽볾볿 +
    BD00 봀봁봂봃봄봅봆봇봈봉봊봋봌봍봎봏봐봑봒봓봔봕봖봗봘봙봚봛봜봝봞봟 +
    BD20 봠봡봢봣봤봥봦봧봨봩봪봫봬봭봮봯봰봱봲봳봴봵봶봷봸봹봺봻봼봽봾봿 +
    BD40 뵀뵁뵂뵃뵄뵅뵆뵇뵈뵉뵊뵋뵌뵍뵎뵏뵐뵑뵒뵓뵔뵕뵖뵗뵘뵙뵚뵛뵜뵝뵞뵟 +
    BD60 뵠뵡뵢뵣뵤뵥뵦뵧뵨뵩뵪뵫뵬뵭뵮뵯뵰뵱뵲뵳뵴뵵뵶뵷뵸뵹뵺뵻뵼뵽뵾뵿 +
    BD80 부북붂붃분붅붆붇불붉붊붋붌붍붎붏붐붑붒붓붔붕붖붗붘붙붚붛붜붝붞붟 +
    BDA0 붠붡붢붣붤붥붦붧붨붩붪붫붬붭붮붯붰붱붲붳붴붵붶붷붸붹붺붻붼붽붾붿 +
    BDC0 뷀뷁뷂뷃뷄뷅뷆뷇뷈뷉뷊뷋뷌뷍뷎뷏뷐뷑뷒뷓뷔뷕뷖뷗뷘뷙뷚뷛뷜뷝뷞뷟 +
    BDE0 뷠뷡뷢뷣뷤뷥뷦뷧뷨뷩뷪뷫뷬뷭뷮뷯뷰뷱뷲뷳뷴뷵뷶뷷뷸뷹뷺뷻뷼뷽뷾뷿 +
    BE00 븀븁븂븃븄븅븆븇븈븉븊븋브븍븎븏븐븑븒븓블븕븖븗븘븙븚븛븜븝븞븟 +
    BE20 븠븡븢븣븤븥븦븧븨븩븪븫븬븭븮븯븰븱븲븳븴븵븶븷븸븹븺븻븼븽븾븿 +
    BE40 빀빁빂빃비빅빆빇빈빉빊빋빌빍빎빏빐빑빒빓빔빕빖빗빘빙빚빛빜빝빞빟 +
    BE60 빠빡빢빣빤빥빦빧빨빩빪빫빬빭빮빯빰빱빲빳빴빵빶빷빸빹빺빻빼빽빾빿 +
    BE80 뺀뺁뺂뺃뺄뺅뺆뺇뺈뺉뺊뺋뺌뺍뺎뺏뺐뺑뺒뺓뺔뺕뺖뺗뺘뺙뺚뺛뺜뺝뺞뺟 +
    BEA0 뺠뺡뺢뺣뺤뺥뺦뺧뺨뺩뺪뺫뺬뺭뺮뺯뺰뺱뺲뺳뺴뺵뺶뺷뺸뺹뺺뺻뺼뺽뺾뺿 +
    BEC0 뻀뻁뻂뻃뻄뻅뻆뻇뻈뻉뻊뻋뻌뻍뻎뻏뻐뻑뻒뻓뻔뻕뻖뻗뻘뻙뻚뻛뻜뻝뻞뻟 +
    BEE0 뻠뻡뻢뻣뻤뻥뻦뻧뻨뻩뻪뻫뻬뻭뻮뻯뻰뻱뻲뻳뻴뻵뻶뻷뻸뻹뻺뻻뻼뻽뻾뻿 +
    BF00 뼀뼁뼂뼃뼄뼅뼆뼇뼈뼉뼊뼋뼌뼍뼎뼏뼐뼑뼒뼓뼔뼕뼖뼗뼘뼙뼚뼛뼜뼝뼞뼟 +
    BF20 뼠뼡뼢뼣뼤뼥뼦뼧뼨뼩뼪뼫뼬뼭뼮뼯뼰뼱뼲뼳뼴뼵뼶뼷뼸뼹뼺뼻뼼뼽뼾뼿 +
    BF40 뽀뽁뽂뽃뽄뽅뽆뽇뽈뽉뽊뽋뽌뽍뽎뽏뽐뽑뽒뽓뽔뽕뽖뽗뽘뽙뽚뽛뽜뽝뽞뽟 +
    BF60 뽠뽡뽢뽣뽤뽥뽦뽧뽨뽩뽪뽫뽬뽭뽮뽯뽰뽱뽲뽳뽴뽵뽶뽷뽸뽹뽺뽻뽼뽽뽾뽿 +
    BF80 뾀뾁뾂뾃뾄뾅뾆뾇뾈뾉뾊뾋뾌뾍뾎뾏뾐뾑뾒뾓뾔뾕뾖뾗뾘뾙뾚뾛뾜뾝뾞뾟 +
    BFA0 뾠뾡뾢뾣뾤뾥뾦뾧뾨뾩뾪뾫뾬뾭뾮뾯뾰뾱뾲뾳뾴뾵뾶뾷뾸뾹뾺뾻뾼뾽뾾뾿 +
    BFC0 뿀뿁뿂뿃뿄뿅뿆뿇뿈뿉뿊뿋뿌뿍뿎뿏뿐뿑뿒뿓뿔뿕뿖뿗뿘뿙뿚뿛뿜뿝뿞뿟 +
    BFE0 뿠뿡뿢뿣뿤뿥뿦뿧뿨뿩뿪뿫뿬뿭뿮뿯뿰뿱뿲뿳뿴뿵뿶뿷뿸뿹뿺뿻뿼뿽뿾뿿 +
    C000 쀀쀁쀂쀃쀄쀅쀆쀇쀈쀉쀊쀋쀌쀍쀎쀏쀐쀑쀒쀓쀔쀕쀖쀗쀘쀙쀚쀛쀜쀝쀞쀟 +
    C020 쀠쀡쀢쀣쀤쀥쀦쀧쀨쀩쀪쀫쀬쀭쀮쀯쀰쀱쀲쀳쀴쀵쀶쀷쀸쀹쀺쀻쀼쀽쀾쀿 +
    C040 쁀쁁쁂쁃쁄쁅쁆쁇쁈쁉쁊쁋쁌쁍쁎쁏쁐쁑쁒쁓쁔쁕쁖쁗쁘쁙쁚쁛쁜쁝쁞쁟 +
    C060 쁠쁡쁢쁣쁤쁥쁦쁧쁨쁩쁪쁫쁬쁭쁮쁯쁰쁱쁲쁳쁴쁵쁶쁷쁸쁹쁺쁻쁼쁽쁾쁿 +
    C080 삀삁삂삃삄삅삆삇삈삉삊삋삌삍삎삏삐삑삒삓삔삕삖삗삘삙삚삛삜삝삞삟 +
    C0A0 삠삡삢삣삤삥삦삧삨삩삪삫사삭삮삯산삱삲삳살삵삶삷삸삹삺삻삼삽삾삿 +
    C0C0 샀상샂샃샄샅샆샇새색샊샋샌샍샎샏샐샑샒샓샔샕샖샗샘샙샚샛샜생샞샟 +
    C0E0 샠샡샢샣샤샥샦샧샨샩샪샫샬샭샮샯샰샱샲샳샴샵샶샷샸샹샺샻샼샽샾샿 +
    C100 섀섁섂섃섄섅섆섇섈섉섊섋섌섍섎섏섐섑섒섓섔섕섖섗섘섙섚섛서석섞섟 +
    C120 선섡섢섣설섥섦섧섨섩섪섫섬섭섮섯섰성섲섳섴섵섶섷세섹섺섻센섽섾섿 +
    C140 셀셁셂셃셄셅셆셇셈셉셊셋셌셍셎셏셐셑셒셓셔셕셖셗션셙셚셛셜셝셞셟 +
    C160 셠셡셢셣셤셥셦셧셨셩셪셫셬셭셮셯셰셱셲셳셴셵셶셷셸셹셺셻셼셽셾셿 +
    C180 솀솁솂솃솄솅솆솇솈솉솊솋소속솎솏손솑솒솓솔솕솖솗솘솙솚솛솜솝솞솟 +
    C1A0 솠송솢솣솤솥솦솧솨솩솪솫솬솭솮솯솰솱솲솳솴솵솶솷솸솹솺솻솼솽솾솿 +
    C1C0 쇀쇁쇂쇃쇄쇅쇆쇇쇈쇉쇊쇋쇌쇍쇎쇏쇐쇑쇒쇓쇔쇕쇖쇗쇘쇙쇚쇛쇜쇝쇞쇟 +
    C1E0 쇠쇡쇢쇣쇤쇥쇦쇧쇨쇩쇪쇫쇬쇭쇮쇯쇰쇱쇲쇳쇴쇵쇶쇷쇸쇹쇺쇻쇼쇽쇾쇿 +
    C200 숀숁숂숃숄숅숆숇숈숉숊숋숌숍숎숏숐숑숒숓숔숕숖숗수숙숚숛순숝숞숟 +
    C220 술숡숢숣숤숥숦숧숨숩숪숫숬숭숮숯숰숱숲숳숴숵숶숷숸숹숺숻숼숽숾숿 +
    C240 쉀쉁쉂쉃쉄쉅쉆쉇쉈쉉쉊쉋쉌쉍쉎쉏쉐쉑쉒쉓쉔쉕쉖쉗쉘쉙쉚쉛쉜쉝쉞쉟 +
    C260 쉠쉡쉢쉣쉤쉥쉦쉧쉨쉩쉪쉫쉬쉭쉮쉯쉰쉱쉲쉳쉴쉵쉶쉷쉸쉹쉺쉻쉼쉽쉾쉿 +
    C280 슀슁슂슃슄슅슆슇슈슉슊슋슌슍슎슏슐슑슒슓슔슕슖슗슘슙슚슛슜슝슞슟 +
    C2A0 슠슡슢슣스슥슦슧슨슩슪슫슬슭슮슯슰슱슲슳슴습슶슷슸승슺슻슼슽슾슿 +
    C2C0 싀싁싂싃싄싅싆싇싈싉싊싋싌싍싎싏싐싑싒싓싔싕싖싗싘싙싚싛시식싞싟 +
    C2E0 신싡싢싣실싥싦싧싨싩싪싫심십싮싯싰싱싲싳싴싵싶싷싸싹싺싻싼싽싾싿 +
    C300 쌀쌁쌂쌃쌄쌅쌆쌇쌈쌉쌊쌋쌌쌍쌎쌏쌐쌑쌒쌓쌔쌕쌖쌗쌘쌙쌚쌛쌜쌝쌞쌟 +
    C320 쌠쌡쌢쌣쌤쌥쌦쌧쌨쌩쌪쌫쌬쌭쌮쌯쌰쌱쌲쌳쌴쌵쌶쌷쌸쌹쌺쌻쌼쌽쌾쌿 +
    C340 썀썁썂썃썄썅썆썇썈썉썊썋썌썍썎썏썐썑썒썓썔썕썖썗썘썙썚썛썜썝썞썟 +
    C360 썠썡썢썣썤썥썦썧써썩썪썫썬썭썮썯썰썱썲썳썴썵썶썷썸썹썺썻썼썽썾썿 +
    C380 쎀쎁쎂쎃쎄쎅쎆쎇쎈쎉쎊쎋쎌쎍쎎쎏쎐쎑쎒쎓쎔쎕쎖쎗쎘쎙쎚쎛쎜쎝쎞쎟 +
    C3A0 쎠쎡쎢쎣쎤쎥쎦쎧쎨쎩쎪쎫쎬쎭쎮쎯쎰쎱쎲쎳쎴쎵쎶쎷쎸쎹쎺쎻쎼쎽쎾쎿 +
    C3C0 쏀쏁쏂쏃쏄쏅쏆쏇쏈쏉쏊쏋쏌쏍쏎쏏쏐쏑쏒쏓쏔쏕쏖쏗쏘쏙쏚쏛쏜쏝쏞쏟 +
    C3E0 쏠쏡쏢쏣쏤쏥쏦쏧쏨쏩쏪쏫쏬쏭쏮쏯쏰쏱쏲쏳쏴쏵쏶쏷쏸쏹쏺쏻쏼쏽쏾쏿 +
    C400 쐀쐁쐂쐃쐄쐅쐆쐇쐈쐉쐊쐋쐌쐍쐎쐏쐐쐑쐒쐓쐔쐕쐖쐗쐘쐙쐚쐛쐜쐝쐞쐟 +
    C420 쐠쐡쐢쐣쐤쐥쐦쐧쐨쐩쐪쐫쐬쐭쐮쐯쐰쐱쐲쐳쐴쐵쐶쐷쐸쐹쐺쐻쐼쐽쐾쐿 +
    C440 쑀쑁쑂쑃쑄쑅쑆쑇쑈쑉쑊쑋쑌쑍쑎쑏쑐쑑쑒쑓쑔쑕쑖쑗쑘쑙쑚쑛쑜쑝쑞쑟 +
    C460 쑠쑡쑢쑣쑤쑥쑦쑧쑨쑩쑪쑫쑬쑭쑮쑯쑰쑱쑲쑳쑴쑵쑶쑷쑸쑹쑺쑻쑼쑽쑾쑿 +
    C480 쒀쒁쒂쒃쒄쒅쒆쒇쒈쒉쒊쒋쒌쒍쒎쒏쒐쒑쒒쒓쒔쒕쒖쒗쒘쒙쒚쒛쒜쒝쒞쒟 +
    C4A0 쒠쒡쒢쒣쒤쒥쒦쒧쒨쒩쒪쒫쒬쒭쒮쒯쒰쒱쒲쒳쒴쒵쒶쒷쒸쒹쒺쒻쒼쒽쒾쒿 +
    C4C0 쓀쓁쓂쓃쓄쓅쓆쓇쓈쓉쓊쓋쓌쓍쓎쓏쓐쓑쓒쓓쓔쓕쓖쓗쓘쓙쓚쓛쓜쓝쓞쓟 +
    C4E0 쓠쓡쓢쓣쓤쓥쓦쓧쓨쓩쓪쓫쓬쓭쓮쓯쓰쓱쓲쓳쓴쓵쓶쓷쓸쓹쓺쓻쓼쓽쓾쓿 +
    C500 씀씁씂씃씄씅씆씇씈씉씊씋씌씍씎씏씐씑씒씓씔씕씖씗씘씙씚씛씜씝씞씟 +
    C520 씠씡씢씣씤씥씦씧씨씩씪씫씬씭씮씯씰씱씲씳씴씵씶씷씸씹씺씻씼씽씾씿 +
    C540 앀앁앂앃아악앆앇안앉않앋알앍앎앏앐앑앒앓암압앖앗았앙앚앛앜앝앞앟 +
    C560 애액앢앣앤앥앦앧앨앩앪앫앬앭앮앯앰앱앲앳앴앵앶앷앸앹앺앻야약앾앿 +
    C580 얀얁얂얃얄얅얆얇얈얉얊얋얌얍얎얏얐양얒얓얔얕얖얗얘얙얚얛얜얝얞얟 +
    C5A0 얠얡얢얣얤얥얦얧얨얩얪얫얬얭얮얯얰얱얲얳어억얶얷언얹얺얻얼얽얾얿 +
    C5C0 엀엁엂엃엄업없엇었엉엊엋엌엍엎엏에엑엒엓엔엕엖엗엘엙엚엛엜엝엞엟 +
    C5E0 엠엡엢엣엤엥엦엧엨엩엪엫여역엮엯연엱엲엳열엵엶엷엸엹엺엻염엽엾엿 +
    C600 였영옂옃옄옅옆옇예옉옊옋옌옍옎옏옐옑옒옓옔옕옖옗옘옙옚옛옜옝옞옟 +
    C620 옠옡옢옣오옥옦옧온옩옪옫올옭옮옯옰옱옲옳옴옵옶옷옸옹옺옻옼옽옾옿 +
    C640 와왁왂왃완왅왆왇왈왉왊왋왌왍왎왏왐왑왒왓왔왕왖왗왘왙왚왛왜왝왞왟 +
    C660 왠왡왢왣왤왥왦왧왨왩왪왫왬왭왮왯왰왱왲왳왴왵왶왷외왹왺왻왼왽왾왿 +
    C680 욀욁욂욃욄욅욆욇욈욉욊욋욌욍욎욏욐욑욒욓요욕욖욗욘욙욚욛욜욝욞욟 +
    C6A0 욠욡욢욣욤욥욦욧욨용욪욫욬욭욮욯우욱욲욳운욵욶욷울욹욺욻욼욽욾욿 +
    C6C0 움웁웂웃웄웅웆웇웈웉웊웋워웍웎웏원웑웒웓월웕웖웗웘웙웚웛웜웝웞웟 +
    C6E0 웠웡웢웣웤웥웦웧웨웩웪웫웬웭웮웯웰웱웲웳웴웵웶웷웸웹웺웻웼웽웾웿 +
    C700 윀윁윂윃위윅윆윇윈윉윊윋윌윍윎윏윐윑윒윓윔윕윖윗윘윙윚윛윜윝윞윟 +
    C720 유육윢윣윤윥윦윧율윩윪윫윬윭윮윯윰윱윲윳윴융윶윷윸윹윺윻으윽윾윿 +
    C740 은읁읂읃을읅읆읇읈읉읊읋음읍읎읏읐응읒읓읔읕읖읗의읙읚읛읜읝읞읟 +
    C760 읠읡읢읣읤읥읦읧읨읩읪읫읬읭읮읯읰읱읲읳이익읶읷인읹읺읻일읽읾읿 +
    C780 잀잁잂잃임입잆잇있잉잊잋잌잍잎잏자작잒잓잔잕잖잗잘잙잚잛잜잝잞잟 +
    C7A0 잠잡잢잣잤장잦잧잨잩잪잫재잭잮잯잰잱잲잳잴잵잶잷잸잹잺잻잼잽잾잿 +
    C7C0 쟀쟁쟂쟃쟄쟅쟆쟇쟈쟉쟊쟋쟌쟍쟎쟏쟐쟑쟒쟓쟔쟕쟖쟗쟘쟙쟚쟛쟜쟝쟞쟟 +
    C7E0 쟠쟡쟢쟣쟤쟥쟦쟧쟨쟩쟪쟫쟬쟭쟮쟯쟰쟱쟲쟳쟴쟵쟶쟷쟸쟹쟺쟻쟼쟽쟾쟿 +
    C800 저적젂젃전젅젆젇절젉젊젋젌젍젎젏점접젒젓젔정젖젗젘젙젚젛제젝젞젟 +
    C820 젠젡젢젣젤젥젦젧젨젩젪젫젬젭젮젯젰젱젲젳젴젵젶젷져젹젺젻젼젽젾젿 +
    C840 졀졁졂졃졄졅졆졇졈졉졊졋졌졍졎졏졐졑졒졓졔졕졖졗졘졙졚졛졜졝졞졟 +
    C860 졠졡졢졣졤졥졦졧졨졩졪졫졬졭졮졯조족졲졳존졵졶졷졸졹졺졻졼졽졾졿 +
    C880 좀좁좂좃좄종좆좇좈좉좊좋좌좍좎좏좐좑좒좓좔좕좖좗좘좙좚좛좜좝좞좟 +
    C8A0 좠좡좢좣좤좥좦좧좨좩좪좫좬좭좮좯좰좱좲좳좴좵좶좷좸좹좺좻좼좽좾좿 +
    C8C0 죀죁죂죃죄죅죆죇죈죉죊죋죌죍죎죏죐죑죒죓죔죕죖죗죘죙죚죛죜죝죞죟 +
    C8E0 죠죡죢죣죤죥죦죧죨죩죪죫죬죭죮죯죰죱죲죳죴죵죶죷죸죹죺죻주죽죾죿 +
    C900 준줁줂줃줄줅줆줇줈줉줊줋줌줍줎줏줐중줒줓줔줕줖줗줘줙줚줛줜줝줞줟 +
    C920 줠줡줢줣줤줥줦줧줨줩줪줫줬줭줮줯줰줱줲줳줴줵줶줷줸줹줺줻줼줽줾줿 +
    C940 쥀쥁쥂쥃쥄쥅쥆쥇쥈쥉쥊쥋쥌쥍쥎쥏쥐쥑쥒쥓쥔쥕쥖쥗쥘쥙쥚쥛쥜쥝쥞쥟 +
    C960 쥠쥡쥢쥣쥤쥥쥦쥧쥨쥩쥪쥫쥬쥭쥮쥯쥰쥱쥲쥳쥴쥵쥶쥷쥸쥹쥺쥻쥼쥽쥾쥿 +
    C980 즀즁즂즃즄즅즆즇즈즉즊즋즌즍즎즏즐즑즒즓즔즕즖즗즘즙즚즛즜증즞즟 +
    C9A0 즠즡즢즣즤즥즦즧즨즩즪즫즬즭즮즯즰즱즲즳즴즵즶즷즸즹즺즻즼즽즾즿 +
    C9C0 지직짂짃진짅짆짇질짉짊짋짌짍짎짏짐집짒짓짔징짖짗짘짙짚짛짜짝짞짟 +
    C9E0 짠짡짢짣짤짥짦짧짨짩짪짫짬짭짮짯짰짱짲짳짴짵짶짷째짹짺짻짼짽짾짿 +
    CA00 쨀쨁쨂쨃쨄쨅쨆쨇쨈쨉쨊쨋쨌쨍쨎쨏쨐쨑쨒쨓쨔쨕쨖쨗쨘쨙쨚쨛쨜쨝쨞쨟 +
    CA20 쨠쨡쨢쨣쨤쨥쨦쨧쨨쨩쨪쨫쨬쨭쨮쨯쨰쨱쨲쨳쨴쨵쨶쨷쨸쨹쨺쨻쨼쨽쨾쨿 +
    CA40 쩀쩁쩂쩃쩄쩅쩆쩇쩈쩉쩊쩋쩌쩍쩎쩏쩐쩑쩒쩓쩔쩕쩖쩗쩘쩙쩚쩛쩜쩝쩞쩟 +
    CA60 쩠쩡쩢쩣쩤쩥쩦쩧쩨쩩쩪쩫쩬쩭쩮쩯쩰쩱쩲쩳쩴쩵쩶쩷쩸쩹쩺쩻쩼쩽쩾쩿 +
    CA80 쪀쪁쪂쪃쪄쪅쪆쪇쪈쪉쪊쪋쪌쪍쪎쪏쪐쪑쪒쪓쪔쪕쪖쪗쪘쪙쪚쪛쪜쪝쪞쪟 +
    CAA0 쪠쪡쪢쪣쪤쪥쪦쪧쪨쪩쪪쪫쪬쪭쪮쪯쪰쪱쪲쪳쪴쪵쪶쪷쪸쪹쪺쪻쪼쪽쪾쪿 +
    CAC0 쫀쫁쫂쫃쫄쫅쫆쫇쫈쫉쫊쫋쫌쫍쫎쫏쫐쫑쫒쫓쫔쫕쫖쫗쫘쫙쫚쫛쫜쫝쫞쫟 +
    CAE0 쫠쫡쫢쫣쫤쫥쫦쫧쫨쫩쫪쫫쫬쫭쫮쫯쫰쫱쫲쫳쫴쫵쫶쫷쫸쫹쫺쫻쫼쫽쫾쫿 +
    CB00 쬀쬁쬂쬃쬄쬅쬆쬇쬈쬉쬊쬋쬌쬍쬎쬏쬐쬑쬒쬓쬔쬕쬖쬗쬘쬙쬚쬛쬜쬝쬞쬟 +
    CB20 쬠쬡쬢쬣쬤쬥쬦쬧쬨쬩쬪쬫쬬쬭쬮쬯쬰쬱쬲쬳쬴쬵쬶쬷쬸쬹쬺쬻쬼쬽쬾쬿 +
    CB40 쭀쭁쭂쭃쭄쭅쭆쭇쭈쭉쭊쭋쭌쭍쭎쭏쭐쭑쭒쭓쭔쭕쭖쭗쭘쭙쭚쭛쭜쭝쭞쭟 +
    CB60 쭠쭡쭢쭣쭤쭥쭦쭧쭨쭩쭪쭫쭬쭭쭮쭯쭰쭱쭲쭳쭴쭵쭶쭷쭸쭹쭺쭻쭼쭽쭾쭿 +
    CB80 쮀쮁쮂쮃쮄쮅쮆쮇쮈쮉쮊쮋쮌쮍쮎쮏쮐쮑쮒쮓쮔쮕쮖쮗쮘쮙쮚쮛쮜쮝쮞쮟 +
    CBA0 쮠쮡쮢쮣쮤쮥쮦쮧쮨쮩쮪쮫쮬쮭쮮쮯쮰쮱쮲쮳쮴쮵쮶쮷쮸쮹쮺쮻쮼쮽쮾쮿 +
    CBC0 쯀쯁쯂쯃쯄쯅쯆쯇쯈쯉쯊쯋쯌쯍쯎쯏쯐쯑쯒쯓쯔쯕쯖쯗쯘쯙쯚쯛쯜쯝쯞쯟 +
    CBE0 쯠쯡쯢쯣쯤쯥쯦쯧쯨쯩쯪쯫쯬쯭쯮쯯쯰쯱쯲쯳쯴쯵쯶쯷쯸쯹쯺쯻쯼쯽쯾쯿 +
    CC00 찀찁찂찃찄찅찆찇찈찉찊찋찌찍찎찏찐찑찒찓찔찕찖찗찘찙찚찛찜찝찞찟 +
    CC20 찠찡찢찣찤찥찦찧차착찪찫찬찭찮찯찰찱찲찳찴찵찶찷참찹찺찻찼창찾찿 +
    CC40 챀챁챂챃채책챆챇챈챉챊챋챌챍챎챏챐챑챒챓챔챕챖챗챘챙챚챛챜챝챞챟 +
    CC60 챠챡챢챣챤챥챦챧챨챩챪챫챬챭챮챯챰챱챲챳챴챵챶챷챸챹챺챻챼챽챾챿 +
    CC80 첀첁첂첃첄첅첆첇첈첉첊첋첌첍첎첏첐첑첒첓첔첕첖첗처척첚첛천첝첞첟 +
    CCA0 철첡첢첣첤첥첦첧첨첩첪첫첬청첮첯첰첱첲첳체첵첶첷첸첹첺첻첼첽첾첿 +
    CCC0 쳀쳁쳂쳃쳄쳅쳆쳇쳈쳉쳊쳋쳌쳍쳎쳏쳐쳑쳒쳓쳔쳕쳖쳗쳘쳙쳚쳛쳜쳝쳞쳟 +
    CCE0 쳠쳡쳢쳣쳤쳥쳦쳧쳨쳩쳪쳫쳬쳭쳮쳯쳰쳱쳲쳳쳴쳵쳶쳷쳸쳹쳺쳻쳼쳽쳾쳿 +
    CD00 촀촁촂촃촄촅촆촇초촉촊촋촌촍촎촏촐촑촒촓촔촕촖촗촘촙촚촛촜총촞촟 +
    CD20 촠촡촢촣촤촥촦촧촨촩촪촫촬촭촮촯촰촱촲촳촴촵촶촷촸촹촺촻촼촽촾촿 +
    CD40 쵀쵁쵂쵃쵄쵅쵆쵇쵈쵉쵊쵋쵌쵍쵎쵏쵐쵑쵒쵓쵔쵕쵖쵗쵘쵙쵚쵛최쵝쵞쵟 +
    CD60 쵠쵡쵢쵣쵤쵥쵦쵧쵨쵩쵪쵫쵬쵭쵮쵯쵰쵱쵲쵳쵴쵵쵶쵷쵸쵹쵺쵻쵼쵽쵾쵿 +
    CD80 춀춁춂춃춄춅춆춇춈춉춊춋춌춍춎춏춐춑춒춓추축춖춗춘춙춚춛출춝춞춟 +
    CDA0 춠춡춢춣춤춥춦춧춨충춪춫춬춭춮춯춰춱춲춳춴춵춶춷춸춹춺춻춼춽춾춿 +
    CDC0 췀췁췂췃췄췅췆췇췈췉췊췋췌췍췎췏췐췑췒췓췔췕췖췗췘췙췚췛췜췝췞췟 +
    CDE0 췠췡췢췣췤췥췦췧취췩췪췫췬췭췮췯췰췱췲췳췴췵췶췷췸췹췺췻췼췽췾췿 +
    CE00 츀츁츂츃츄츅츆츇츈츉츊츋츌츍츎츏츐츑츒츓츔츕츖츗츘츙츚츛츜츝츞츟 +
    CE20 츠측츢츣츤츥츦츧츨츩츪츫츬츭츮츯츰츱츲츳츴층츶츷츸츹츺츻츼츽츾츿 +
    CE40 칀칁칂칃칄칅칆칇칈칉칊칋칌칍칎칏칐칑칒칓칔칕칖칗치칙칚칛친칝칞칟 +
    CE60 칠칡칢칣칤칥칦칧침칩칪칫칬칭칮칯칰칱칲칳카칵칶칷칸칹칺칻칼칽칾칿 +
    CE80 캀캁캂캃캄캅캆캇캈캉캊캋캌캍캎캏캐캑캒캓캔캕캖캗캘캙캚캛캜캝캞캟 +
    CEA0 캠캡캢캣캤캥캦캧캨캩캪캫캬캭캮캯캰캱캲캳캴캵캶캷캸캹캺캻캼캽캾캿 +
    CEC0 컀컁컂컃컄컅컆컇컈컉컊컋컌컍컎컏컐컑컒컓컔컕컖컗컘컙컚컛컜컝컞컟 +
    CEE0 컠컡컢컣커컥컦컧컨컩컪컫컬컭컮컯컰컱컲컳컴컵컶컷컸컹컺컻컼컽컾컿 +
    CF00 케켁켂켃켄켅켆켇켈켉켊켋켌켍켎켏켐켑켒켓켔켕켖켗켘켙켚켛켜켝켞켟 +
    CF20 켠켡켢켣켤켥켦켧켨켩켪켫켬켭켮켯켰켱켲켳켴켵켶켷켸켹켺켻켼켽켾켿 +
    CF40 콀콁콂콃콄콅콆콇콈콉콊콋콌콍콎콏콐콑콒콓코콕콖콗콘콙콚콛콜콝콞콟 +
    CF60 콠콡콢콣콤콥콦콧콨콩콪콫콬콭콮콯콰콱콲콳콴콵콶콷콸콹콺콻콼콽콾콿 +
    CF80 쾀쾁쾂쾃쾄쾅쾆쾇쾈쾉쾊쾋쾌쾍쾎쾏쾐쾑쾒쾓쾔쾕쾖쾗쾘쾙쾚쾛쾜쾝쾞쾟 +
    CFA0 쾠쾡쾢쾣쾤쾥쾦쾧쾨쾩쾪쾫쾬쾭쾮쾯쾰쾱쾲쾳쾴쾵쾶쾷쾸쾹쾺쾻쾼쾽쾾쾿 +
    CFC0 쿀쿁쿂쿃쿄쿅쿆쿇쿈쿉쿊쿋쿌쿍쿎쿏쿐쿑쿒쿓쿔쿕쿖쿗쿘쿙쿚쿛쿜쿝쿞쿟 +
    CFE0 쿠쿡쿢쿣쿤쿥쿦쿧쿨쿩쿪쿫쿬쿭쿮쿯쿰쿱쿲쿳쿴쿵쿶쿷쿸쿹쿺쿻쿼쿽쿾쿿 +
    D000 퀀퀁퀂퀃퀄퀅퀆퀇퀈퀉퀊퀋퀌퀍퀎퀏퀐퀑퀒퀓퀔퀕퀖퀗퀘퀙퀚퀛퀜퀝퀞퀟 +
    D020 퀠퀡퀢퀣퀤퀥퀦퀧퀨퀩퀪퀫퀬퀭퀮퀯퀰퀱퀲퀳퀴퀵퀶퀷퀸퀹퀺퀻퀼퀽퀾퀿 +
    D040 큀큁큂큃큄큅큆큇큈큉큊큋큌큍큎큏큐큑큒큓큔큕큖큗큘큙큚큛큜큝큞큟 +
    D060 큠큡큢큣큤큥큦큧큨큩큪큫크큭큮큯큰큱큲큳클큵큶큷큸큹큺큻큼큽큾큿 +
    D080 킀킁킂킃킄킅킆킇킈킉킊킋킌킍킎킏킐킑킒킓킔킕킖킗킘킙킚킛킜킝킞킟 +
    D0A0 킠킡킢킣키킥킦킧킨킩킪킫킬킭킮킯킰킱킲킳킴킵킶킷킸킹킺킻킼킽킾킿 +
    D0C0 타탁탂탃탄탅탆탇탈탉탊탋탌탍탎탏탐탑탒탓탔탕탖탗탘탙탚탛태택탞탟 +
    D0E0 탠탡탢탣탤탥탦탧탨탩탪탫탬탭탮탯탰탱탲탳탴탵탶탷탸탹탺탻탼탽탾탿 +
    D100 턀턁턂턃턄턅턆턇턈턉턊턋턌턍턎턏턐턑턒턓턔턕턖턗턘턙턚턛턜턝턞턟 +
    D120 턠턡턢턣턤턥턦턧턨턩턪턫턬턭턮턯터턱턲턳턴턵턶턷털턹턺턻턼턽턾턿 +
    D140 텀텁텂텃텄텅텆텇텈텉텊텋테텍텎텏텐텑텒텓텔텕텖텗텘텙텚텛템텝텞텟 +
    D160 텠텡텢텣텤텥텦텧텨텩텪텫텬텭텮텯텰텱텲텳텴텵텶텷텸텹텺텻텼텽텾텿 +
    D180 톀톁톂톃톄톅톆톇톈톉톊톋톌톍톎톏톐톑톒톓톔톕톖톗톘톙톚톛톜톝톞톟 +
    D1A0 토톡톢톣톤톥톦톧톨톩톪톫톬톭톮톯톰톱톲톳톴통톶톷톸톹톺톻톼톽톾톿 +
    D1C0 퇀퇁퇂퇃퇄퇅퇆퇇퇈퇉퇊퇋퇌퇍퇎퇏퇐퇑퇒퇓퇔퇕퇖퇗퇘퇙퇚퇛퇜퇝퇞퇟 +
    D1E0 퇠퇡퇢퇣퇤퇥퇦퇧퇨퇩퇪퇫퇬퇭퇮퇯퇰퇱퇲퇳퇴퇵퇶퇷퇸퇹퇺퇻퇼퇽퇾퇿 +
    D200 툀툁툂툃툄툅툆툇툈툉툊툋툌툍툎툏툐툑툒툓툔툕툖툗툘툙툚툛툜툝툞툟 +
    D220 툠툡툢툣툤툥툦툧툨툩툪툫투툭툮툯툰툱툲툳툴툵툶툷툸툹툺툻툼툽툾툿 +
    D240 퉀퉁퉂퉃퉄퉅퉆퉇퉈퉉퉊퉋퉌퉍퉎퉏퉐퉑퉒퉓퉔퉕퉖퉗퉘퉙퉚퉛퉜퉝퉞퉟 +
    D260 퉠퉡퉢퉣퉤퉥퉦퉧퉨퉩퉪퉫퉬퉭퉮퉯퉰퉱퉲퉳퉴퉵퉶퉷퉸퉹퉺퉻퉼퉽퉾퉿 +
    D280 튀튁튂튃튄튅튆튇튈튉튊튋튌튍튎튏튐튑튒튓튔튕튖튗튘튙튚튛튜튝튞튟 +
    D2A0 튠튡튢튣튤튥튦튧튨튩튪튫튬튭튮튯튰튱튲튳튴튵튶튷트특튺튻튼튽튾튿 +
    D2C0 틀틁틂틃틄틅틆틇틈틉틊틋틌틍틎틏틐틑틒틓틔틕틖틗틘틙틚틛틜틝틞틟 +
    D2E0 틠틡틢틣틤틥틦틧틨틩틪틫틬틭틮틯티틱틲틳틴틵틶틷틸틹틺틻틼틽틾틿 +
    D300 팀팁팂팃팄팅팆팇팈팉팊팋파팍팎팏판팑팒팓팔팕팖팗팘팙팚팛팜팝팞팟 +
    D320 팠팡팢팣팤팥팦팧패팩팪팫팬팭팮팯팰팱팲팳팴팵팶팷팸팹팺팻팼팽팾팿 +
    D340 퍀퍁퍂퍃퍄퍅퍆퍇퍈퍉퍊퍋퍌퍍퍎퍏퍐퍑퍒퍓퍔퍕퍖퍗퍘퍙퍚퍛퍜퍝퍞퍟 +
    D360 퍠퍡퍢퍣퍤퍥퍦퍧퍨퍩퍪퍫퍬퍭퍮퍯퍰퍱퍲퍳퍴퍵퍶퍷퍸퍹퍺퍻퍼퍽퍾퍿 +
    D380 펀펁펂펃펄펅펆펇펈펉펊펋펌펍펎펏펐펑펒펓펔펕펖펗페펙펚펛펜펝펞펟 +
    D3A0 펠펡펢펣펤펥펦펧펨펩펪펫펬펭펮펯펰펱펲펳펴펵펶펷편펹펺펻펼펽펾펿 +
    D3C0 폀폁폂폃폄폅폆폇폈평폊폋폌폍폎폏폐폑폒폓폔폕폖폗폘폙폚폛폜폝폞폟 +
    D3E0 폠폡폢폣폤폥폦폧폨폩폪폫포폭폮폯폰폱폲폳폴폵폶폷폸폹폺폻폼폽폾폿 +
    D400 퐀퐁퐂퐃퐄퐅퐆퐇퐈퐉퐊퐋퐌퐍퐎퐏퐐퐑퐒퐓퐔퐕퐖퐗퐘퐙퐚퐛퐜퐝퐞퐟 +
    D420 퐠퐡퐢퐣퐤퐥퐦퐧퐨퐩퐪퐫퐬퐭퐮퐯퐰퐱퐲퐳퐴퐵퐶퐷퐸퐹퐺퐻퐼퐽퐾퐿 +
    D440 푀푁푂푃푄푅푆푇푈푉푊푋푌푍푎푏푐푑푒푓푔푕푖푗푘푙푚푛표푝푞푟 +
    D460 푠푡푢푣푤푥푦푧푨푩푪푫푬푭푮푯푰푱푲푳푴푵푶푷푸푹푺푻푼푽푾푿 +
    D480 풀풁풂풃풄풅풆풇품풉풊풋풌풍풎풏풐풑풒풓풔풕풖풗풘풙풚풛풜풝풞풟 +
    D4A0 풠풡풢풣풤풥풦풧풨풩풪풫풬풭풮풯풰풱풲풳풴풵풶풷풸풹풺풻풼풽풾풿 +
    D4C0 퓀퓁퓂퓃퓄퓅퓆퓇퓈퓉퓊퓋퓌퓍퓎퓏퓐퓑퓒퓓퓔퓕퓖퓗퓘퓙퓚퓛퓜퓝퓞퓟 +
    D4E0 퓠퓡퓢퓣퓤퓥퓦퓧퓨퓩퓪퓫퓬퓭퓮퓯퓰퓱퓲퓳퓴퓵퓶퓷퓸퓹퓺퓻퓼퓽퓾퓿 +
    D500 픀픁픂픃프픅픆픇픈픉픊픋플픍픎픏픐픑픒픓픔픕픖픗픘픙픚픛픜픝픞픟 +
    D520 픠픡픢픣픤픥픦픧픨픩픪픫픬픭픮픯픰픱픲픳픴픵픶픷픸픹픺픻피픽픾픿 +
    D540 핀핁핂핃필핅핆핇핈핉핊핋핌핍핎핏핐핑핒핓핔핕핖핗하학핚핛한핝핞핟 +
    D560 할핡핢핣핤핥핦핧함합핪핫핬항핮핯핰핱핲핳해핵핶핷핸핹핺핻핼핽핾핿 +
    D580 햀햁햂햃햄햅햆햇했행햊햋햌햍햎햏햐햑햒햓햔햕햖햗햘햙햚햛햜햝햞햟 +
    D5A0 햠햡햢햣햤향햦햧햨햩햪햫햬햭햮햯햰햱햲햳햴햵햶햷햸햹햺햻햼햽햾햿 +
    D5C0 헀헁헂헃헄헅헆헇허헉헊헋헌헍헎헏헐헑헒헓헔헕헖헗험헙헚헛헜헝헞헟 +
    D5E0 헠헡헢헣헤헥헦헧헨헩헪헫헬헭헮헯헰헱헲헳헴헵헶헷헸헹헺헻헼헽헾헿 +
    D600 혀혁혂혃현혅혆혇혈혉혊혋혌혍혎혏혐협혒혓혔형혖혗혘혙혚혛혜혝혞혟 +
    D620 혠혡혢혣혤혥혦혧혨혩혪혫혬혭혮혯혰혱혲혳혴혵혶혷호혹혺혻혼혽혾혿 +
    D640 홀홁홂홃홄홅홆홇홈홉홊홋홌홍홎홏홐홑홒홓화확홖홗환홙홚홛활홝홞홟 +
    D660 홠홡홢홣홤홥홦홧홨황홪홫홬홭홮홯홰홱홲홳홴홵홶홷홸홹홺홻홼홽홾홿 +
    D680 횀횁횂횃횄횅횆횇횈횉횊횋회획횎횏횐횑횒횓횔횕횖횗횘횙횚횛횜횝횞횟 +
    D6A0 횠횡횢횣횤횥횦횧효횩횪횫횬횭횮횯횰횱횲횳횴횵횶횷횸횹횺횻횼횽횾횿 +
    D6C0 훀훁훂훃후훅훆훇훈훉훊훋훌훍훎훏훐훑훒훓훔훕훖훗훘훙훚훛훜훝훞훟 +
    D6E0 훠훡훢훣훤훥훦훧훨훩훪훫훬훭훮훯훰훱훲훳훴훵훶훷훸훹훺훻훼훽훾훿 +
    D700 휀휁휂휃휄휅휆휇휈휉휊휋휌휍휎휏휐휑휒휓휔휕휖휗휘휙휚휛휜휝휞휟 +
    D720 휠휡휢휣휤휥휦휧휨휩휪휫휬휭휮휯휰휱휲휳휴휵휶휷휸휹휺휻휼휽휾휿 +
    D740 흀흁흂흃흄흅흆흇흈흉흊흋흌흍흎흏흐흑흒흓흔흕흖흗흘흙흚흛흜흝흞흟 +
    D760 흠흡흢흣흤흥흦흧흨흩흪흫희흭흮흯흰흱흲흳흴흵흶흷흸흹흺흻흼흽흾흿 +
    D780 힀힁힂힃힄힅힆힇히힉힊힋힌힍힎힏힐힑힒힓힔힕힖힗힘힙힚힛힜힝힞힟 +
    D7A0 힠힡힢힣힤힥힦힧힨힩힪힫힬힭힮힯ힰힱힲힳힴힵힶힷힸힹힺힻힼힽힾힿ +
    D7C0 ퟀퟁퟂퟃퟄퟅퟆ퟇퟈퟉퟊ퟋퟌퟍퟎퟏퟐퟑퟒퟓퟔퟕퟖퟗퟘퟙퟚퟛퟜퟝퟞퟟ +
    D7E0 ퟠퟡퟢퟣퟤퟥퟦퟧퟨퟩퟪퟫퟬퟭퟮퟯퟰퟱퟲퟳퟴퟵퟶퟷퟸퟹퟺퟻ퟼퟽퟾퟿ +
    D800 �������������������������������� +
    D820 �������������������������������� +
    D840 �������������������������������� +
    D860 �������������������������������� +
    D880 �������������������������������� +
    D8A0 �������������������������������� +
    D8C0 �������������������������������� +
    D8E0 �������������������������������� +
    D900 �������������������������������� +
    D920 �������������������������������� +
    D940 �������������������������������� +br />D960 �������������������������������� +
    D980 �������������������������������� +
    D9A0 �������������������������������� +
    D9C0 �������������������������������� +
    D9E0 �������������������������������� +
    DA00 �������������������������������� +
    DA20 �������������������������������� +
    DA40 �������������������������������� +
    DA60 �������������������������������� +
    DA80 �������������������������������� +
    DAA0 �������������������������������� +
    DAC0 �������������������������������� +
    DAE0 �������������������������������� +
    DB00 �������������������������������� +
    DB20 �������������������������������� +
    DB40 �������������������������������� +
    DB60 �������������������������������� +
    DB80 �������������������������������� +
    DBA0 �������������������������������� +
    DBC0 �������������������������������� +
    DBE0 �������������������������������� +
    DC00 �������������������������������� +
    DC20 �������������������������������� +
    DC40 �������������������������������� +
    DC60 �������������������������������� +
    DC80 �������������������������������� +
    DCA0 �������������������������������� +
    DCC0 �������������������������������� +
    DCE0 �������������������������������� +
    DD00 �������������������������������� +
    DD20 �������������������������������� +
    DD40 �������������������������������� +
    DD60 �������������������������������� +
    DD80 �������������������������������� +
    DDA0 �������������������������������� +
    DDC0 �������������������������������� +
    DDE0 �������������������������������� +
    DE00 �������������������������������� +
    DE20 �������������������������������� +
    DE40 �������������������������������� +
    DE60 �������������������������������� +
    DE80 �������������������������������� +
    DEA0 �������������������������������� +
    DEC0 �������������������������������� +
    DEE0 �������������������������������� +
    DF00 �������������������������������� +
    DF20 �������������������������������� +
    DF40 �������������������������������� +
    DF60 �������������������������������� +
    DF80 �������������������������������� +
    DFA0 �������������������������������� +
    DFC0 �������������������������������� +
    DFE0 �������������������������������� +
    E000  +
    E020  +
    E040  +
    E060  +
    E080  +
    E0A0  +
    E0C0  +
    E0E0  +
    E100  +
    E120  +
    E140  +
    E160  +
    E180  +
    E1A0  +
    E1C0  +
    E1E0  +
    E200  +
    E220  +
    E240  +
    E260  +
    E280  +
    E2A0  +
    E2C0  +
    E2E0  +
    E300  +
    E320  +
    E340  +
    E360  +
    E380  +
    E3A0  +
    E3C0  +
    E3E0  +
    E400  +
    E420  +
    E440  +
    E460  +
    E480  +
    E4A0  +
    E4C0  +
    E4E0  +
    E500  +
    E520  +
    E540  +
    E560  +
    E580  +
    E5A0  +
    E5C0  +
    E5E0  +
    E600  +
    E620  +
    E640  +
    E660  +
    E680  +
    E6A0  +
    E6C0  +
    E6E0  +
    E700  +
    E720  +
    E740  +
    E760  +
    E780  +
    E7A0  +
    E7C0  +
    E7E0  +
    E800  +
    E820  +
    E840  +
    E860  +
    E880  +
    E8A0  +
    E8C0  +
    E8E0  +
    E900  +
    E920  +
    E940  +
    E960  +
    E980  +
    E9A0  +
    E9C0  +
    E9E0  +
    EA00  +
    EA20  +
    EA40  +
    EA60  +
    EA80  +
    EAA0  +
    EAC0  +
    EAE0  +
    EB00  +
    EB20  +
    EB40  +
    EB60  +
    EB80  +
    EBA0  +
    EBC0  +
    EBE0  +
    EC00  +
    EC20  +
    EC40  +
    EC60  +
    EC80  +
    ECA0  +
    ECC0  +
    ECE0  +
    ED00  +
    ED20  +
    ED40  +
    ED60  +
    ED80  +
    EDA0  +
    EDC0  +
    EDE0  +
    EE00  +
    EE20  +
    EE40  +
    EE60  +
    EE80  +
    EEA0  +
    EEC0  +
    EEE0  +
    EF00  +
    EF20  +
    EF40  +
    EF60  +
    EF80  +
    EFA0  +
    EFC0  +
    EFE0  +
    F000  +
    F020  +
    F040  +
    F060  +
    F080  +
    F0A0  +
    F0C0  +
    F0E0  +
    F100  +
    F120  +
    F140  +
    F160  +
    F180  +
    F1A0  +
    F1C0  +
    F1E0  +
    F200  +
    F220  +
    F240  +
    F260  +
    F280  +
    F2A0  +
    F2C0  +
    F2E0  +
    F300  +
    F320  +
    F340  +
    F360  +
    F380  +
    F3A0  +
    F3C0  +
    F3E0  +
    F400  +
    F420  +
    F440  +
    F460  +
    F480  +
    F4A0  +
    F4C0  +
    F4E0  +
    F500  +
    F520  +
    F540  +
    F560  +
    F580  +
    F5A0  +
    F5C0  +
    F5E0  +
    F600  +
    F620  +
    F640  +
    F660  +
    F680  +
    F6A0  +
    F6C0  +
    F6E0  +
    F700  +
    F720  +
    F740  +
    F760  +
    F780  +
    F7A0  +
    F7C0  +
    F7E0  +
    F800  +
    F820  +
    F840  +
    F860  +
    F880  +
    F8A0  +
    F8C0  +
    F8E0  +
    F900 豈更車賈滑串句龜龜契金喇奈懶癩羅蘿螺裸邏樂洛烙珞落酪駱亂卵欄爛蘭 +
    F920 鸞嵐濫藍襤拉臘蠟廊朗浪狼郎來冷勞擄櫓爐盧老蘆虜路露魯鷺碌祿綠菉錄 +
    F940 鹿論壟弄籠聾牢磊賂雷壘屢樓淚漏累縷陋勒肋凜凌稜綾菱陵讀拏樂諾丹寧 +
    F960 怒率異北磻便復不泌數索參塞省葉說殺辰沈拾若掠略亮兩凉梁糧良諒量勵 +
    F980 呂女廬旅濾礪閭驪麗黎力曆歷轢年憐戀撚漣煉璉秊練聯輦蓮連鍊列劣咽烈 +
    F9A0 裂說廉念捻殮簾獵令囹寧嶺怜玲瑩羚聆鈴零靈領例禮醴隸惡了僚寮尿料樂 +
    F9C0 燎療蓼遼龍暈阮劉杻柳流溜琉留硫紐類六戮陸倫崙淪輪律慄栗率隆利吏履 +
    F9E0 易李梨泥理痢罹裏裡里離匿溺吝燐璘藺隣鱗麟林淋臨立笠粒狀炙識什茶刺 +
    FA00 切度拓糖宅洞暴輻行降見廓兀嗀﨎﨏塚﨑晴﨓﨔凞猪益礼神祥福靖精羽﨟 +
    FA20 蘒﨡諸﨣﨤逸都﨧﨨﨩飯飼館鶴郞隷侮僧免勉勤卑喝嘆器塀墨層屮悔慨憎 +
    FA40 懲敏既暑梅海渚漢煮爫琢碑社祉祈祐祖祝禍禎穀突節練縉繁署者臭艹艹著 +
    FA60 褐視謁謹賓贈辶逸難響頻恵𤋮舘﩮﩯並况全侀充冀勇勺喝啕喙嗢塚墳奄奔 +
    FA80 婢嬨廒廙彩徭惘慎愈憎慠懲戴揄搜摒敖晴朗望杖歹殺流滛滋漢瀞煮瞧爵犯 +
    FAA0 猪瑱甆画瘝瘟益盛直睊着磌窱節类絛練缾者荒華蝹襁覆視調諸請謁諾諭謹 +
    FAC0 變贈輸遲醙鉶陼難靖韛響頋頻鬒龜𢡊𢡄𣏕㮝䀘䀹𥉉𥳐𧻓齃龎﫚﫛﫜﫝﫞﫟 +
    FAE0 﫠﫡﫢﫣﫤﫥﫦﫧﫨﫩﫪﫫﫬﫭﫮﫯﫰﫱﫲﫳﫴﫵﫶﫷﫸﫹﫺﫻﫼﫽﫾﫿 +
    FB00 fffiflffifflſtst﬇﬈﬉﬊﬋﬌﬍﬎﬏﬐﬑﬒ﬓﬔﬕﬖﬗ﬘﬙﬚﬛﬜יִﬞײַ +
    FB20 ﬠﬡﬢﬣﬤﬥﬦﬧﬨ﬩שׁשׂשּׁשּׂאַאָאּבּגּדּהּוּזּ﬷טּיּךּכּלּ﬽מּ﬿ +
    FB40 נּסּ﭂ףּפּ﭅צּקּרּשּתּוֹבֿכֿפֿﭏﭐﭑﭒﭓﭔﭕﭖﭗﭘﭙﭚﭛﭜﭝﭞﭟ +
    FB60 ﭠﭡﭢﭣﭤﭥﭦﭧﭨﭩﭪﭫﭬﭭﭮﭯﭰﭱﭲﭳﭴﭵﭶﭷﭸﭹﭺﭻﭼﭽﭾﭿ +
    FB80 ﮀﮁﮂﮃﮄﮅﮆﮇﮈﮉﮊﮋﮌﮍﮎﮏﮐﮑﮒﮓﮔﮕﮖﮗﮘﮙﮚﮛﮜﮝﮞﮟ +
    FBA0 ﮠﮡﮢﮣﮤﮥﮦﮧﮨﮩﮪﮫﮬﮭﮮﮯﮰﮱ﮲﮳﮴﮵﮶﮷﮸﮹﮺﮻﮼﮽﮾﮿ +
    FBC0 ﯀﯁﯂﯃﯄﯅﯆﯇﯈﯉﯊﯋﯌﯍﯎﯏﯐﯑﯒ﯓﯔﯕﯖﯗﯘﯙﯚﯛﯜﯝﯞﯟ +
    FBE0 ﯠﯡﯢﯣﯤﯥﯦﯧﯨﯩﯪﯫﯬﯭﯮﯯﯰﯱﯲﯳﯴﯵﯶﯷﯸﯹﯺﯻﯼﯽﯾﯿ +
    FC00 ﰀﰁﰂﰃﰄﰅﰆﰇﰈﰉﰊﰋﰌﰍﰎﰏﰐﰑﰒﰓﰔﰕﰖﰗﰘﰙﰚﰛﰜﰝﰞﰟ +
    FC20 ﰠﰡﰢﰣﰤﰥﰦﰧﰨﰩﰪﰫﰬﰭﰮﰯﰰﰱﰲﰳﰴﰵﰶﰷﰸﰹﰺﰻﰼﰽﰾﰿ +
    FC40 ﱀﱁﱂﱃﱄﱅﱆﱇﱈﱉﱊﱋﱌﱍﱎﱏﱐﱑﱒﱓﱔﱕﱖﱗﱘﱙﱚﱛﱜﱝﱞﱟ +
    FC60 ﱠﱡﱢﱣﱤﱥﱦﱧﱨﱩﱪﱫﱬﱭﱮﱯﱰﱱﱲﱳﱴﱵﱶﱷﱸﱹﱺﱻﱼﱽﱾﱿ +
    FC80 ﲀﲁﲂﲃﲄﲅﲆﲇﲈﲉﲊﲋﲌﲍﲎﲏﲐﲑﲒﲓﲔﲕﲖﲗﲘﲙﲚﲛﲜﲝﲞﲟ +
    FCA0 ﲠﲡﲢﲣﲤﲥﲦﲧﲨﲩﲪﲫﲬﲭﲮﲯﲰﲱﲲﲳﲴﲵﲶﲷﲸﲹﲺﲻﲼﲽﲾﲿ +
    FCC0 ﳀﳁﳂﳃﳄﳅﳆﳇﳈﳉﳊﳋﳌﳍﳎﳏﳐﳑﳒﳓﳔﳕﳖﳗﳘﳙﳚﳛﳜﳝﳞﳟ +
    FCE0 ﳠﳡﳢﳣﳤﳥﳦﳧﳨﳩﳪﳫﳬﳭﳮﳯﳰﳱﳲﳳﳴﳵﳶﳷﳸﳹﳺﳻﳼﳽﳾﳿ +
    FD00 ﴀﴁﴂﴃﴄﴅﴆﴇﴈﴉﴊﴋﴌﴍﴎﴏﴐﴑﴒﴓﴔﴕﴖﴗﴘﴙﴚﴛﴜﴝﴞﴟ +
    FD20 ﴠﴡﴢﴣﴤﴥﴦﴧﴨﴩﴪﴫﴬﴭﴮﴯﴰﴱﴲﴳﴴﴵﴶﴷﴸﴹﴺﴻﴼﴽ﴾﴿ +
    FD40 ﵀﵁﵂﵃﵄﵅﵆﵇﵈﵉﵊﵋﵌﵍﵎﵏ﵐﵑﵒﵓﵔﵕﵖﵗﵘﵙﵚﵛﵜﵝﵞﵟ +
    FD60 ﵠﵡﵢﵣﵤﵥﵦﵧﵨﵩﵪﵫﵬﵭﵮﵯﵰﵱﵲﵳﵴﵵﵶﵷﵸﵹﵺﵻﵼﵽﵾﵿ +
    FD80 ﶀﶁﶂﶃﶄﶅﶆﶇﶈﶉﶊﶋﶌﶍﶎﶏ﶐﶑ﶒﶓﶔﶕﶖﶗﶘﶙﶚﶛﶜﶝﶞﶟ +
    FDA0 ﶠﶡﶢﶣﶤﶥﶦﶧﶨﶩﶪﶫﶬﶭﶮﶯﶰﶱﶲﶳﶴﶵﶶﶷﶸﶹﶺﶻﶼﶽﶾﶿ +
    FDC0 ﷀﷁﷂﷃﷄﷅﷆﷇ﷈﷉﷊﷋﷌﷍﷎﷏﷐﷑﷒﷓﷔﷕﷖﷗﷘﷙﷚﷛﷜﷝﷞﷟ +
    FDE0 ﷠﷡﷢﷣﷤﷥﷦﷧﷨﷩﷪﷫﷬﷭﷮﷯ﷰﷱﷲﷳﷴﷵﷶﷷﷸﷹﷺﷻ﷼﷽﷾﷿ +
    FE00 ︀︁︂︃︄︅︆︇︈︉︊︋︌︍︎️︐︑︒︓︔︕︖︗︘︙︚︛︜︝︞︟ +
    FE20 ︧︨︩︪︫︬︭︠︡︢︣︤︥︦︮︯︰︱︲︳︴︵︶︷︸︹︺︻︼︽︾︿ +
    FE40 ﹀﹁﹂﹃﹄﹅﹆﹇﹈﹉﹊﹋﹌﹍﹎﹏﹐﹑﹒﹓﹔﹕﹖﹗﹘﹙﹚﹛﹜﹝﹞﹟ +
    FE60 ﹠﹡﹢﹣﹤﹥﹦﹧﹨﹩﹪﹫﹬﹭﹮﹯ﹰﹱﹲﹳﹴ﹵ﹶﹷﹸﹹﹺﹻﹼﹽﹾﹿ +
    FE80 ﺀﺁﺂﺃﺄﺅﺆﺇﺈﺉﺊﺋﺌﺍﺎﺏﺐﺑﺒﺓﺔﺕﺖﺗﺘﺙﺚﺛﺜﺝﺞﺟ +
    FEA0 ﺠﺡﺢﺣﺤﺥﺦﺧﺨﺩﺪﺫﺬﺭﺮﺯﺰﺱﺲﺳﺴﺵﺶﺷﺸﺹﺺﺻﺼﺽﺾﺿ +
    FEC0 ﻀﻁﻂﻃﻄﻅﻆﻇﻈﻉﻊﻋﻌﻍﻎﻏﻐﻑﻒﻓﻔﻕﻖﻗﻘﻙﻚﻛﻜﻝﻞﻟ +
    FEE0 ﻠﻡﻢﻣﻤﻥﻦﻧﻨﻩﻪﻫﻬﻭﻮﻯﻰﻱﻲﻳﻴﻵﻶﻷﻸﻹﻺﻻﻼ﻽﻾ +
    FF00 ＀!"#$%&'()*+,-./0123456789:;<=>? +
    FF20 @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ +
    FF40 `abcdefghijklmnopqrstuvwxyz{|}~⦅ +
    FF60 ⦆。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソ +
    FF80 タチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚ +
    FFA0 ᅠᄀᄁᆪᄂᆬᆭᄃᄄᄅᆰᆱᆲᆳᆴᆵᄚᄆᄇᄈᄡᄉᄊᄋᄌᄍᄎᄏᄐᄑᄒ﾿ +
    FFC0 ￀￁ᅡᅢᅣᅤᅥᅦ￈￉ᅧᅨᅩᅪᅫᅬ￐￑ᅭᅮᅯᅰᅱᅲ￘￙ᅳᅴᅵ￝￞￟ +
    FFE0 ¢£¬ ̄¦¥₩￧│←↑→↓■○￯￰￱￲￳￴￵￶￷￸� + \ No newline at end of file diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/encoding_utf-8_w3.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/encoding_utf-8_w3.html new file mode 100755 index 00000000..568e6bc3 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/encoding_utf-8_w3.html @@ -0,0 +1,220 @@ + + + + UTF-8 test file + + + +

    Original by Markus Kuhn, adapted for HTML by Martin Dürst.

    +
     
    +UTF-8 encoded sample plain-text file
    +‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
    + 
    +Markus Kuhn [ˈmaʳkʊs kuːn] <mkuhn@acm.org> — 1999-08-20
    + 
    + 
    +The ASCII compatible UTF-8 encoding of ISO 10646 and Unicode
    +plain-text files is defined in RFC 2279 and in ISO 10646-1 Annex R.
    + 
    + 
    +Using Unicode/UTF-8, you can write in emails and source code things such as
    + 
    +Mathematics and Sciences:
    + 
    +  ∮ E⋅da = Q,  n → ∞, ∑ f(i) = ∏ g(i), ∀x∈ℝ: ⌈x⌉ = −⌊−x⌋, α ∧ ¬β = ¬(¬α ∨ β),
    + 
    +  ℕ ⊆ ℕ₀ ⊂ ℤ ⊂ ℚ ⊂ ℝ ⊂ ℂ, ⊥ < a ≠ b ≡ c ≤ d ≪ ⊤ ⇒ (A ⇔ B),
    + 
    +  2H₂ + O₂ ⇌ 2H₂O, R = 4.7 kΩ, ⌀ 200 mm
    + 
    +Linguistics and dictionaries:
    + 
    +  ði ıntəˈnæʃənəl fəˈnɛtık əsoʊsiˈeıʃn
    +  Y [ˈʏpsilɔn], Yen [jɛn], Yoga [ˈjoːgɑ]
    + 
    +APL:
    + 
    +  ((V⍳V)=⍳⍴V)/V←,V    ⌷←⍳→⍴∆∇⊃‾⍎⍕⌈
    + 
    +Nicer typography in plain text files:
    + 
    +  ╔══════════════════════════════════════════╗
    +  ║                                          ║
    +  ║   • ‘single’ and “double” quotes         ║
    +  ║                                          ║
    +  ║   • Curly apostrophes: “We’ve been here” ║
    +  ║                                          ║
    +  ║   • Latin-1 apostrophe and accents: '´`  ║
    +  ║                                          ║
    +  ║   • ‚deutsche‘ „Anführungszeichen“       ║
    +  ║                                          ║
    +  ║   • †, ‡, ‰, •, 3–4, —, −5/+5, ™, …      ║
    +  ║                                          ║
    +  ║   • ASCII safety test: 1lI|, 0OD, 8B     ║
    +  ║                      ╭─────────╮         ║
    +  ║   • the euro symbol: │ 14.95 € │         ║
    +  ║                      ╰─────────╯         ║
    +  ╚══════════════════════════════════════════╝
    + 
    +Greek (in Polytonic):
    + 
    +  The Greek anthem:
    + 
    +  Σὲ γνωρίζω ἀπὸ τὴν κόψη
    +  τοῦ σπαθιοῦ τὴν τρομερή,
    +  σὲ γνωρίζω ἀπὸ τὴν ὄψη
    +  ποὺ μὲ βία μετράει τὴ γῆ.
    + 
    +  ᾿Απ᾿ τὰ κόκκαλα βγαλμένη
    +  τῶν ῾Ελλήνων τὰ ἱερά
    +  καὶ σὰν πρῶτα ἀνδρειωμένη
    +  χαῖρε, ὦ χαῖρε, ᾿Ελευθεριά!
    + 
    +  From a speech of Demosthenes in the 4th century BC:
    + 
    +  Οὐχὶ ταὐτὰ παρίσταταί μοι γιγνώσκειν, ὦ ἄνδρες ᾿Αθηναῖοι,
    +  ὅταν τ᾿ εἰς τὰ πράγματα ἀποβλέψω καὶ ὅταν πρὸς τοὺς
    +  λόγους οὓς ἀκούω· τοὺς μὲν γὰρ λόγους περὶ τοῦ
    +  τιμωρήσασθαι Φίλιππον ὁρῶ γιγνομένους, τὰ δὲ πράγματ᾿ 
    +  εἰς τοῦτο προήκοντα,  ὥσθ᾿ ὅπως μὴ πεισόμεθ᾿ αὐτοὶ
    +  πρότερον κακῶς σκέψασθαι δέον. οὐδέν οὖν ἄλλο μοι δοκοῦσιν
    +  οἱ τὰ τοιαῦτα λέγοντες ἢ τὴν ὑπόθεσιν, περὶ ἧς βουλεύεσθαι,
    +  οὐχὶ τὴν οὖσαν παριστάντες ὑμῖν ἁμαρτάνειν. ἐγὼ δέ, ὅτι μέν
    +  ποτ᾿ ἐξῆν τῇ πόλει καὶ τὰ αὑτῆς ἔχειν ἀσφαλῶς καὶ Φίλιππον
    +  τιμωρήσασθαι, καὶ μάλ᾿ ἀκριβῶς οἶδα· ἐπ᾿ ἐμοῦ γάρ, οὐ πάλαι
    +  γέγονεν ταῦτ᾿ ἀμφότερα· νῦν μέντοι πέπεισμαι τοῦθ᾿ ἱκανὸν
    +  προλαβεῖν ἡμῖν εἶναι τὴν πρώτην, ὅπως τοὺς συμμάχους
    +  σώσομεν. ἐὰν γὰρ τοῦτο βεβαίως ὑπάρξῃ, τότε καὶ περὶ τοῦ
    +  τίνα τιμωρήσεταί τις καὶ ὃν τρόπον ἐξέσται σκοπεῖν· πρὶν δὲ
    +  τὴν ἀρχὴν ὀρθῶς ὑποθέσθαι, μάταιον ἡγοῦμαι περὶ τῆς
    +  τελευτῆς ὁντινοῦν ποιεῖσθαι λόγον.
    + 
    +  Δημοσθένους, Γ´ ᾿Ολυνθιακὸς
    + 
    +Georgian:
    + 
    +  From a Unicode conference invitation:
    + 
    +  გთხოვთ ახლავე გაიაროთ რეგისტრაცია Unicode-ის მეათე საერთაშორისო
    +  კონფერენციაზე დასასწრებად, რომელიც გაიმართება 10-12 მარტს,
    +  ქ. მაინცში, გერმანიაში. კონფერენცია შეჰკრებს ერთად მსოფლიოს
    +  ექსპერტებს ისეთ დარგებში როგორიცაა ინტერნეტი და Unicode-ი,
    +  ინტერნაციონალიზაცია და ლოკალიზაცია, Unicode-ის გამოყენება
    +  ოპერაციულ სისტემებსა, და გამოყენებით პროგრამებში, შრიფტებში,
    +  ტექსტების დამუშავებასა და მრავალენოვან კომპიუტერულ სისტემებში.
    + 
    +Russian:
    + 
    +  From a Unicode conference invitation:
    + 
    +  Зарегистрируйтесь сейчас на Десятую Международную Конференцию по
    +  Unicode, которая состоится 10-12 марта 1997 года в Майнце в Германии.
    +  Конференция соберет широкий круг экспертов по  вопросам глобального
    +  Интернета и Unicode, локализации и интернационализации, воплощению и
    +  применению Unicode в различных операционных системах и программных
    +  приложениях, шрифтах, верстке и многоязычных компьютерных системах.
    + 
    +Thai (UCS Level 2):
    + 
    +  Excerpt from a poetry on The Romance of The Three Kingdoms (a Chinese
    +  classic 'San Gua'):
    + 
    +  [----------------------------|------------------------]
    +    ๏ แผ่นดินฮั่นเสื่อมโทรมแสนสังเวช  พระปกเกศกองบู๊กู้ขึ้นใหม่
    +  สิบสองกษัตริย์ก่อนหน้าแลถัดไป       สององค์ไซร้โง่เขลาเบาปัญญา
    +    ทรงนับถือขันทีเป็นที่พึ่ง           บ้านเมืองจึงวิปริตเป็นนักหนา
    +  โฮจิ๋นเรียกทัพทั่วหัวเมืองมา         หมายจะฆ่ามดชั่วตัวสำคัญ
    +    เหมือนขับไสไล่เสือจากเคหา      รับหมาป่าเข้ามาเลยอาสัญ
    +  ฝ่ายอ้องอุ้นยุแยกให้แตกกัน          ใช้สาวนั้นเป็นชนวนชื่นชวนใจ
    +    พลันลิฉุยกุยกีกลับก่อเหตุ          ช่างอาเพศจริงหนาฟ้าร้องไห้
    +  ต้องรบราฆ่าฟันจนบรรลัย           ฤๅหาใครค้ำชูกู้บรรลังก์ ฯ
    + 
    +  (The above is a two-column text. If combining characters are handled
    +  correctly, the lines of the second column should be aligned with the
    +  | character above.)
    + 
    +Ethiopian:
    + 
    +  Proverbs in the Amharic language:
    + 
    +  ሰማይ አይታረስ ንጉሥ አይከሰስ።
    +  ብላ ካለኝ እንደአባቴ በቆመጠኝ።
    +  ጌጥ ያለቤቱ ቁምጥና ነው።
    +  ደሀ በሕልሙ ቅቤ ባይጠጣ ንጣት በገደለው።
    +  የአፍ ወለምታ በቅቤ አይታሽም።
    +  አይጥ በበላ ዳዋ ተመታ።
    +  ሲተረጉሙ ይደረግሙ።
    +  ቀስ በቀስ፥ ዕንቁላል በእግሩ ይሄዳል።
    +  ድር ቢያብር አንበሳ ያስር።
    +  ሰው እንደቤቱ እንጅ እንደ ጉረቤቱ አይተዳደርም።
    +  እግዜር የከፈተውን ጉሮሮ ሳይዘጋው አይድርም።
    +  የጎረቤት ሌባ፥ ቢያዩት ይስቅ ባያዩት ያጠልቅ።
    +  ሥራ ከመፍታት ልጄን ላፋታት።
    +  ዓባይ ማደሪያ የለው፥ ግንድ ይዞ ይዞራል።
    +  የእስላም አገሩ መካ የአሞራ አገሩ ዋርካ።
    +  ተንጋሎ ቢተፉ ተመልሶ ባፉ።
    +  ወዳጅህ ማር ቢሆን ጨርስህ አትላሰው።
    +  እግርህን በፍራሽህ ልክ ዘርጋ።
    + 
    +Runes:
    + 
    +  ᚻᛖ ᚳᚹᚫᚦ ᚦᚫᛏ ᚻᛖ ᛒᚢᛞᛖ ᚩᚾ ᚦᚫᛗ ᛚᚪᚾᛞᛖ ᚾᚩᚱᚦᚹᛖᚪᚱᛞᚢᛗ ᚹᛁᚦ ᚦᚪ ᚹᛖᛥᚫ
    + 
    +  (Old English, which transcribed into Latin reads 'He cwaeth that he
    +  bude thaem lande northweardum with tha Westsae.' and means 'He said
    +  that he lived in the northern land near the Western Sea.')
    + 
    +Braille:
    + 
    +  ⡌⠁⠧⠑ ⠼⠁⠒  ⡍⠜⠇⠑⠹⠰⠎ ⡣⠕⠌
    + 
    +  ⡍⠜⠇⠑⠹ ⠺⠁⠎ ⠙⠑⠁⠙⠒ ⠞⠕ ⠃⠑⠛⠔ ⠺⠊⠹⠲ ⡹⠻⠑ ⠊⠎ ⠝⠕ ⠙⠳⠃⠞
    +  ⠱⠁⠞⠑⠧⠻ ⠁⠃⠳⠞ ⠹⠁⠞⠲ ⡹⠑ ⠗⠑⠛⠊⠌⠻ ⠕⠋ ⠙⠊⠎ ⠃⠥⠗⠊⠁⠇ ⠺⠁⠎
    +  ⠎⠊⠛⠝⠫ ⠃⠹ ⠹⠑ ⠊⠇⠻⠛⠹⠍⠁⠝⠂ ⠹⠑ ⠊⠇⠻⠅⠂ ⠹⠑ ⠥⠝⠙⠻⠞⠁⠅⠻⠂
    +  ⠁⠝⠙ ⠹⠑ ⠡⠊⠑⠋ ⠍⠳⠗⠝⠻⠲ ⡎⠊⠗⠕⠕⠛⠑ ⠎⠊⠛⠝⠫ ⠊⠞⠲ ⡁⠝⠙
    +  ⡎⠊⠗⠕⠕⠛⠑⠰⠎ ⠝⠁⠍⠑ ⠺⠁⠎ ⠛⠕⠕⠙ ⠥⠏⠕⠝ ⠰⡡⠁⠝⠛⠑⠂ ⠋⠕⠗ ⠁⠝⠹⠹⠔⠛ ⠙⠑ 
    +  ⠡⠕⠎⠑ ⠞⠕ ⠏⠥⠞ ⠙⠊⠎ ⠙⠁⠝⠙ ⠞⠕⠲
    + 
    +  ⡕⠇⠙ ⡍⠜⠇⠑⠹ ⠺⠁⠎ ⠁⠎ ⠙⠑⠁⠙ ⠁⠎ ⠁ ⠙⠕⠕⠗⠤⠝⠁⠊⠇⠲
    + 
    +  ⡍⠔⠙⠖ ⡊ ⠙⠕⠝⠰⠞ ⠍⠑⠁⠝ ⠞⠕ ⠎⠁⠹ ⠹⠁⠞ ⡊ ⠅⠝⠪⠂ ⠕⠋ ⠍⠹
    +  ⠪⠝ ⠅⠝⠪⠇⠫⠛⠑⠂ ⠱⠁⠞ ⠹⠻⠑ ⠊⠎ ⠏⠜⠞⠊⠊⠥⠇⠜⠇⠹ ⠙⠑⠁⠙ ⠁⠃⠳⠞
    +  ⠁ ⠙⠕⠕⠗⠤⠝⠁⠊⠇⠲ ⡊ ⠍⠊⠣⠞ ⠙⠁⠧⠑ ⠃⠑⠲ ⠔⠊⠇⠔⠫⠂ ⠍⠹⠎⠑⠇⠋⠂ ⠞⠕
    +  ⠗⠑⠛⠜⠙ ⠁ ⠊⠕⠋⠋⠔⠤⠝⠁⠊⠇ ⠁⠎ ⠹⠑ ⠙⠑⠁⠙⠑⠌ ⠏⠊⠑⠊⠑ ⠕⠋ ⠊⠗⠕⠝⠍⠕⠝⠛⠻⠹ 
    +  ⠔ ⠹⠑ ⠞⠗⠁⠙⠑⠲ ⡃⠥⠞ ⠹⠑ ⠺⠊⠎⠙⠕⠍ ⠕⠋ ⠳⠗ ⠁⠝⠊⠑⠌⠕⠗⠎ 
    +  ⠊⠎ ⠔ ⠹⠑ ⠎⠊⠍⠊⠇⠑⠆ ⠁⠝⠙ ⠍⠹ ⠥⠝⠙⠁⠇⠇⠪⠫ ⠙⠁⠝⠙⠎
    +  ⠩⠁⠇⠇ ⠝⠕⠞ ⠙⠊⠌⠥⠗⠃ ⠊⠞⠂ ⠕⠗ ⠹⠑ ⡊⠳⠝⠞⠗⠹⠰⠎ ⠙⠕⠝⠑ ⠋⠕⠗⠲ ⡹⠳
    +  ⠺⠊⠇⠇ ⠹⠻⠑⠋⠕⠗⠑ ⠏⠻⠍⠊⠞ ⠍⠑ ⠞⠕ ⠗⠑⠏⠑⠁⠞⠂ ⠑⠍⠏⠙⠁⠞⠊⠊⠁⠇⠇⠹⠂ ⠹⠁⠞
    +  ⡍⠜⠇⠑⠹ ⠺⠁⠎ ⠁⠎ ⠙⠑⠁⠙ ⠁⠎ ⠁ ⠙⠕⠕⠗⠤⠝⠁⠊⠇⠲
    + 
    +  (The first couple of paragraphs of "A Christmas Carol" by Dickens)
    + 
    +Compact font selection example text:
    + 
    +  ABCDEFGHIJKLMNOPQRSTUVWXYZ /0123456789
    +  abcdefghijklmnopqrstuvwxyz £©µÀÆÖÞßéöÿ
    +  –—‘“”„†•…‰™œŠŸž€ ΑΒΓΔΩαβγδω АБВГДабвгд
    +  ∀∂∈ℝ∧∪≡∞ ↑↗↨↻⇣ ┐┼╔╘░►☺♀ fi�⑀₂ἠḂӥẄɐː⍎אԱა
    + 
    +Greetings in various languages:
    + 
    +  Hello world, Καλημέρα κόσμε, コンニチハ
    + 
    +Box drawing alignment tests:                                          █
    +                                                                      ▉
    +  ╔══╦══╗  ┌──┬──┐  ╭──┬──╮  ╭──┬──╮  ┏━━┳━━┓  ┎┒┏┑   ╷  ╻ ┏┯┓ ┌┰┐    ▊ ╱╲╱╲╳╳╳
    +  ║┌─╨─┐║  │╔═╧═╗│  │╒═╪═╕│  │╓─╁─╖│  ┃┌─╂─┐┃  ┗╃╄┙  ╶┼╴╺╋╸┠┼┨ ┝╋┥    ▋ ╲╱╲╱╳╳╳
    +  ║│╲ ╱│║  │║   ║│  ││ │ ││  │║ ┃ ║│  ┃│ ╿ │┃  ┍╅╆┓   ╵  ╹ ┗┷┛ └┸┘    ▌ ╱╲╱╲╳╳╳
    +  ╠╡ ╳ ╞╣  ├╢   ╟┤  ├┼─┼─┼┤  ├╫─╂─╫┤  ┣┿╾┼╼┿┫  ┕┛┖┚     ┌┄┄┐ ╎ ┏┅┅┓ ┋ ▍ ╲╱╲╱╳╳╳
    +  ║│╱ ╲│║  │║   ║│  ││ │ ││  │║ ┃ ║│  ┃│ ╽ │┃  ░░▒▒▓▓██ ┊  ┆ ╎ ╏  ┇ ┋ ▎
    +  ║└─╥─┘║  │╚═╤═╝│  │╘═╪═╛│  │╙─╀─╜│  ┃└─╂─┘┃  ░░▒▒▓▓██ ┊  ┆ ╎ ╏  ┇ ┋ ▏
    +  ╚══╩══╝  └──┴──┘  ╰──┴──╯  ╰──┴──╯  ┗━━┻━━┛           └╌╌┘ ╎ ┗╍╍┛ ┋  ▁▂▃▄▅▆▇█
    + 
    +
    + + \ No newline at end of file diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/image_background.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/image_background.html new file mode 100755 index 00000000..d204f029 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/image_background.html @@ -0,0 +1,87 @@ + + + + + + Images with background-color, background-image, border, margin and padding + + + + + +

    Lorem ipsum dolor sit amet

    +

    Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec at +odio vitae libero tempus convallis. Cum sociis natoque penatibus et +magnis dis parturient montes, nascetur ridiculus mus. Vestibulum purus +mauris, dapibus eu, sagittis quis, sagittis quis, mi. Morbi fringilla +massa quis velit. Curabitur metus massa, semper mollis, molestie vel, +adipiscing nec, massa. Phasellus vitae felis sed lectus dapibus +facilisis. In ultrices sagittis ipsum. In at est. Integer iaculis +turpis vel magna. Cras eu est. Integer porttitor ligula a +tellus. Curabitur accumsan ipsum a velit. Sed laoreet lectus quis +leo. Nulla pellentesque molestie ante. Quisque vestibulum est id +justo. Ut pellentesque ante in neque.

    + +

    Curabitur ut diam eu dui vestibulum pharetra. Nam pellentesque, justo +non hendrerit venenatis, mi orci pretium mi, et vehicula leo arcu quis +diam. Nullam mattis laoreet quam. Morbi mollis sem ut tellus. Nam mi +massa, lobortis eu, sollicitudin et, iaculis et, massa. Maecenas purus +mauris, luctus sit amet, pharetra in, facilisis sit amet, elit. Nullam +vel erat tempus purus molestie suscipit. Vestibulum odio lorem, +sollicitudin non, volutpat sit amet, tincidunt vel, nunc. Nulla quis +ante vestibulum odio feugiat facilisis. Proin lorem nisl, viverra at, +rhoncus quis, semper nec, mi. Donec euismod enim vitae velit. Nulla +sed lectus. Vivamus placerat, lacus sed vehicula sagittis, arcu massa +adipiscing lorem, bibendum luctus nisl tortor vitae leo.

    + +

    Etiam a mauris. Proin justo elit, accumsan sit amet, tempus et, +blandit id, tellus. Morbi varius, nisi id iaculis aliquam, lacus +ligula facilisis velit, ac pharetra ipsum augue a massa. Etiam rhoncus +commodo orci. Mauris ullamcorper sagittis turpis. Nullam magna libero, +sagittis sed, auctor faucibus, accumsan vitae, urna. Pellentesque +volutpat. Aliquam sapien ipsum, eleifend nec, imperdiet vitae, +consectetuer id, quam. Donec a urna. Suspendisse sit amet +velit. Curabitur quis nisi id dui viverra ornare. Sed condimentum enim +quis tortor. Ut condimentum, magna non tempus tincidunt, leo nibh +molestie tellus, vitae convallis dolor ante sed ante. Nunc et +metus. Phasellus ultricies. Fusce faucibus tortor sit amet mauris.

    + +

    Aliquam enim. Duis et diam. Praesent porta, mauris quis pellentesque +volutpat, erat elit vulputate eros, vitae pulvinar augue velit sit +amet sem. Fusce eu urna eu nisi condimentum posuere. Vivamus sed +felis. Duis eget urna vitae eros interdum dignissim. Proin justo eros, +eleifend in, porttitor in, malesuada non, neque. Etiam sed +augue. Nulla sit amet magna. Lorem ipsum dolor sit amet, consectetuer +adipiscing elit. Mauris facilisis. Curabitur massa magna, pulvinar a, +nonummy eget, egestas vitae, mauris. Quisque vel elit sit amet lorem +malesuada facilisis. Vestibulum porta, metus sit amet egestas +interdum, urna justo euismod erat, id tristique urna leo quis +nibh. Morbi non erat.

    + +

    Cras fringilla, nulla id egestas elementum, augue nunc iaculis nibh, +ac adipiscing nibh justo id tortor. Donec vel orci a nisi ultricies +aliquet. Nunc urna quam, adipiscing molestie, vehicula non, +condimentum non, magna. Integer magna. Donec quam metus, pulvinar id, +suscipit eget, euismod ac, orci. Nulla facilisi. Nullam nec +mauris. Morbi in mi. Etiam urna lectus, pulvinar ac, sollicitudin eu, +euismod ac, lectus. Fusce elit. Sed ultricies odio ac felis.

    + + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/image_basic.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/image_basic.html new file mode 100755 index 00000000..9ad35a15 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/image_basic.html @@ -0,0 +1,20 @@ + + + + + + + + +
    + +
    +The PHP 5 HTML to PDF converter +
    + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/image_bmp.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/image_bmp.html new file mode 100755 index 00000000..34967409 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/image_bmp.html @@ -0,0 +1,128 @@ + + + + + BMP image test suite + + + + + +

    + This test suite was grabbed from http://wvnvaxa.wvnet.edu/vmswww/bmp.html. +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    BMPPNG
    1 bit (2 color)
    4 bit
    8 bit
    16 bit
    24 bit
    32 bit
    4 bit compressed
    8 bit compressed
    16 bit 555 bitfield
    16 bit 565 bitfield
    32 bit 888 bitfield
    32 bit 888 bitfield version 4
    32 bit version 5
    32 bit transparent version 4
    + +

    +Note that as of December 2005, Mozilla and Internet Explorer +do not support transparent BMP images. +

    + +

    +The images (except for the last three and the OS/2 version 2 image) +are from Jason Summer's BMP Suite. +

    + + \ No newline at end of file diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/image_datauri.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/image_datauri.html new file mode 100755 index 00000000..12792448 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/image_datauri.html @@ -0,0 +1,35 @@ + + + + + + + +

    + Embedded <img> :
    + +

    + +

    + Normal <img> :
    + +

    + +

    + Embedded background image +

    + +

    + Normal background image +

    + + + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/image_dimensions.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/image_dimensions.html new file mode 100755 index 00000000..5b0a75be --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/image_dimensions.html @@ -0,0 +1,50 @@ + + + + + + + + + +

    All these images should be nearly of the same size

    + +width=150 +
    + +
    + +width: 40mm +
    + +
    + +width: 4cm +
    + +
    + +width: 21% +
    + +
    + +width: 150px +
    + +
    + +width: 110pt +
    + +
    + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/image_gif.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/image_gif.html new file mode 100755 index 00000000..9d4760b0 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/image_gif.html @@ -0,0 +1,9 @@ + + + + + + + +

    + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/image_remote.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/image_remote.html new file mode 100755 index 00000000..7b3611ac --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/image_remote.html @@ -0,0 +1,41 @@ + + + + + + + +
    +

    Remote CSS & Image Test

    +

    Note: DOMPDF_ENABLE_REMOTE must be enabled for this test to work.

    + +

    CSS: http://dompdf.googlecode.com/svn/trunk/dompdf/www/style.css

    +

    + Remote image with extension:
    + +

    +

    + Remote image without extension:
    + +

    +

    + Remote image with unknown extension:
    + +

    +

    + Remote image with unknown extension and params:
    + +

    +

    + Remote image with unknown extension and advances params:
    + +

    +
    + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/image_transparent_gif.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/image_transparent_gif.html new file mode 100755 index 00000000..1bb45f48 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/image_transparent_gif.html @@ -0,0 +1,23 @@ + + + + + + + + + +
    + +
    + +
    + +
    + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/image_transparent_png.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/image_transparent_png.html new file mode 100755 index 00000000..686f5548 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/image_transparent_png.html @@ -0,0 +1,189 @@ + + + + + PNG transparency test + + + + + +

    PNG transparency test

    + +Examples from http://entropymine.com/jason/testbed/pngtrans/ + +

    +Not all possible results are shown; there are too many combinations +of background colors and shapes of the opaque region. However, I +intend to include every result that actually occurs in a mainstream +browser. If I am missing any, please +let me know. + +

    It's come to my attention that my images which show how +alpha transparency should look are not quite perfect +in regard to precisely how transparent they are at various points. +Rather than try to modify this page to test gamma +correction issues as well, I've created a +separate test page for that. + +

    +This test page was constructed by +Jason Summers. +Comments may be emailed to jason1@pobox.com.
    +There are +other test +pages listed at the PNG web site. + + + + + +

    + +

    Alpha and palette transparency

    + +

    Expected result:
    +[Test image] +

    + +

    (T1) 8-bit palette, includes background color:
    +[Test image] +

    + +

    (T2) 8-bit palette, no background color:
    +[Test image] +

    + +

    (T3) 32-bit RGBA, includes background color:
    +[Test image] +

    + +

    (T4) 32-bit RGBA, no background color:
    +[Test image] +

    + +

    (T5) 64-bit RGBA, includes background color:
    +[Test image] +

    + +

    (T6) 64-bit RGBA, no background color:
    +[Test image] +

    + +

    RGB binary transparency

    + +

    Expected result:
    +[Test image] +

    + +

    (T7) 24-bit RGB, binary transparency, includes background color:
    +[Test image] +

    + +

    (T8) 24-bit RGB, binary transparency, no background color:
    +[Test image] +

    + +

    (T9) 48-bit RGB, binary transparency, includes background color:
    +[Test image] +

    + +

    (T10) 48-bit RGB, binary transparency, no background color:
    +[Test image] +

    + + +

    Grayscale alpha transparency

    + +

    Expected result:
    +[Test image] +

    + +

    (G1) 16 bpp grayscale (8 gray + 8 alpha), includes background color:
    +[Test image] +

    + +

    (G2) 16 bpp grayscale (8 gray + 8 alpha), no background color:
    +[Test image] +

    + +

    (G3) 32 bpp grayscale (16 gray + 16 alpha), includes background color:
    +[Test image] +

    + +

    (G4) 32 bpp grayscale (16 gray + 16 alpha), no background color:
    +[Test image] + + +

    Grayscale binary transparency

    + +

    Expected result:
    +[Test image] +

    + +

    (G5) 8 bpp grayscale (8 gray), includes background color:
    +[Test image] +

    + +

    (G6) 8 bpp grayscale (8 gray), no background color:
    +[Test image] +

    + +

    (G7) 16 bpp grayscale (16 gray), includes background color:
    +[Test image] +

    + +

    (G8) 16 bpp grayscale (16 gray), no background color:
    +[Test image] + +

    Miscellaneous

    + +

    (M1) 8-bit palette, no transparency, includes background color:
    +Expected result:
    +[Test image]
    +[Test image] +

    + +

    (M2) (4-bit) palette, binary transparency only, no background color:
    +Expected result:
    +[Test image]
    +[Test image]
    +(This tests a few things that may have slipped through the cracks.) +

    + + \ No newline at end of file diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/image_variants.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/image_variants.html new file mode 100755 index 00000000..c9123cce --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/image_variants.html @@ -0,0 +1,149 @@ + + + + + + + + +
    + +

    40% of box width:

    +
    + +
    + +

    multiple identical images jpg:

    + + + + +

    multiple identical images gif (will be recoded to png by dompdf):

    + + + + +

    multiple identical images png:

    + + + + +

    local png image with alpha channel:

    + + +

    Attention!

    + +

    For external images to work, the following configuration is required:

    +
    dompdf_config.inc.php :
    + +
    define("DOMPDF_ENABLE_REMOTE", true);
    + +

    external png Image with alpha channel:

    + + +

    external image, dynamically created with id in url parameter at end of parameter(.jpg):

    + + +

    external image, dynamically created with id in url parameter not at end of parameter (.jpg):

    + + +

    external Image without file extension (.gif):

    + + +

    Background images

    +
    + + + + + + +
    +

    paragraph link no-repeat position:default

    +

    paragraph text no-repeat position:left-top; more text text more text text bla bla sdfjkhs sdfsjksdfks sdfkjsfsf skjfh ksjdfhsd

    +

    paragraph text no-repeat position:left-center; more text text more text text bla bla sdfjkhs sdfsjksdfks sdfkjsfsf skjfh ksjdfhsd

    +

    +The PHP 5 HTML to PDF converter +

    + +
    + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test1.bmp b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test1.bmp new file mode 100755 index 00000000..a7203476 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test1.bmp differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test1.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test1.png new file mode 100755 index 00000000..3cdc4981 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test1.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test16.bmp b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test16.bmp new file mode 100755 index 00000000..a5a3195c Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test16.bmp differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test16.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test16.png new file mode 100755 index 00000000..32a1cb30 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test16.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test16bf555.bmp b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test16bf555.bmp new file mode 100755 index 00000000..639a57f8 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test16bf555.bmp differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test16bf555.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test16bf555.png new file mode 100755 index 00000000..32a1cb30 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test16bf555.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test16bf565.bmp b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test16bf565.bmp new file mode 100755 index 00000000..cb0ea24f Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test16bf565.bmp differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test16bf565.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test16bf565.png new file mode 100755 index 00000000..62237907 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test16bf565.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test24.bmp b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test24.bmp new file mode 100755 index 00000000..d6d9e6af Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test24.bmp differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test24.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test24.png new file mode 100755 index 00000000..46211a8c Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test24.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test32.bmp b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test32.bmp new file mode 100755 index 00000000..9524f765 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test32.bmp differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test32.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test32.png new file mode 100755 index 00000000..46211a8c Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test32.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test32bf.bmp b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test32bf.bmp new file mode 100755 index 00000000..0f41534e Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test32bf.bmp differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test32bf.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test32bf.png new file mode 100755 index 00000000..46211a8c Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test32bf.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test32bfv4.bmp b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test32bfv4.bmp new file mode 100755 index 00000000..37060373 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test32bfv4.bmp differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test32bfv4.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test32bfv4.png new file mode 100755 index 00000000..0525bc74 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test32bfv4.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test32v5.bmp b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test32v5.bmp new file mode 100755 index 00000000..8ad3cfa6 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test32v5.bmp differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test32v5.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test32v5.png new file mode 100755 index 00000000..659164e8 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test32v5.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test4.bmp b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test4.bmp new file mode 100755 index 00000000..a064f66a Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test4.bmp differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test4.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test4.png new file mode 100755 index 00000000..29f1c343 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test4.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test4os2v2.bmp b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test4os2v2.bmp new file mode 100755 index 00000000..874a277f Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test4os2v2.bmp differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test4os2v2.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test4os2v2.png new file mode 100755 index 00000000..a939a515 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test4os2v2.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test8.bmp b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test8.bmp new file mode 100755 index 00000000..3be9a206 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test8.bmp differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test8.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test8.png new file mode 100755 index 00000000..47870313 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test8.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test8os2.bmp b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test8os2.bmp new file mode 100755 index 00000000..f7f9f579 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test8os2.bmp differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test8os2.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test8os2.png new file mode 100755 index 00000000..47870313 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/test8os2.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/testcompress4.bmp b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/testcompress4.bmp new file mode 100755 index 00000000..7239fa66 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/testcompress4.bmp differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/testcompress4.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/testcompress4.png new file mode 100755 index 00000000..29f1c343 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/testcompress4.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/testcompress8.bmp b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/testcompress8.bmp new file mode 100755 index 00000000..082f7f48 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/testcompress8.bmp differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/testcompress8.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/testcompress8.png new file mode 100755 index 00000000..47870313 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/testcompress8.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/trans.bmp b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/trans.bmp new file mode 100755 index 00000000..edd5ed81 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/trans.bmp differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/trans.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/trans.png new file mode 100755 index 00000000..653d44af Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/bmp/trans.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/cmyk_test2.jpg b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/cmyk_test2.jpg new file mode 100755 index 00000000..9b982295 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/cmyk_test2.jpg differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/dokuwiki-128.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/dokuwiki-128.png new file mode 100755 index 00000000..b2306ac9 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/dokuwiki-128.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/dompdf_simple.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/dompdf_simple.png new file mode 100755 index 00000000..fd3265e5 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/dompdf_simple.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/goldengate.jpg b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/goldengate.jpg new file mode 100755 index 00000000..42802744 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/goldengate.jpg differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/green.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/green.gif new file mode 100755 index 00000000..151a83c0 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/green.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/grid-36.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/grid-36.gif new file mode 100755 index 00000000..4bf1e2cf Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/grid-36.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/html.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/html.png new file mode 100755 index 00000000..672cbce4 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/html.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/no_extension b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/no_extension new file mode 100755 index 00000000..fd3265e5 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/no_extension differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/pdf.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/pdf.png new file mode 100755 index 00000000..638066de Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/pdf.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/php.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/php.gif new file mode 100755 index 00000000..f352c730 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/php.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png.png new file mode 100755 index 00000000..f0b5b00e Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/gray16a.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/gray16a.png new file mode 100755 index 00000000..946006b1 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/gray16a.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/gray16a_bk.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/gray16a_bk.png new file mode 100755 index 00000000..afbb9c86 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/gray16a_bk.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/gray16b.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/gray16b.png new file mode 100755 index 00000000..46aca9ce Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/gray16b.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/gray16b_bk.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/gray16b_bk.png new file mode 100755 index 00000000..67977083 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/gray16b_bk.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/gray8a.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/gray8a.png new file mode 100755 index 00000000..df7cefcd Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/gray8a.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/gray8a_bk.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/gray8a_bk.png new file mode 100755 index 00000000..fcb8483a Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/gray8a_bk.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/gray8b.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/gray8b.png new file mode 100755 index 00000000..9ad1ab25 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/gray8b.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/gray8b_bk.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/gray8b_bk.png new file mode 100755 index 00000000..ca246e81 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/gray8b_bk.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/pal.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/pal.png new file mode 100755 index 00000000..7fec549c Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/pal.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/pal_bk.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/pal_bk.png new file mode 100755 index 00000000..1923b038 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/pal_bk.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/pal_bk_notrns.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/pal_bk_notrns.png new file mode 100755 index 00000000..b89efae6 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/pal_bk_notrns.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/palb.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/palb.png new file mode 100755 index 00000000..65a8351c Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/palb.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_16ns.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_16ns.gif new file mode 100755 index 00000000..55c4a396 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_16ns.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_1trns.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_1trns.gif new file mode 100755 index 00000000..8a981309 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_1trns.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_bla.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_bla.gif new file mode 100755 index 00000000..c29b13f5 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_bla.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_dith.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_dith.gif new file mode 100755 index 00000000..b76f4847 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_dith.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_gra.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_gra.gif new file mode 100755 index 00000000..fb348ff9 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_gra.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_mag.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_mag.gif new file mode 100755 index 00000000..fa72b527 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_mag.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_magthr1.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_magthr1.gif new file mode 100755 index 00000000..478250fd Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_magthr1.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_no.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_no.gif new file mode 100755 index 00000000..e64739a4 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_no.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_nsbug.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_nsbug.gif new file mode 100755 index 00000000..52a87b3f Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_nsbug.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_ok.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_ok.gif new file mode 100755 index 00000000..f8699883 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_ok.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_oprbug.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_oprbug.gif new file mode 100755 index 00000000..5fac687a Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_oprbug.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_thr1.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_thr1.gif new file mode 100755 index 00000000..66ee0f62 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_thr1.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_thr128.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_thr128.gif new file mode 100755 index 00000000..998fb74e Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_thr128.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_thr255.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_thr255.gif new file mode 100755 index 00000000..a7b719ce Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_thr255.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_whi.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_whi.gif new file mode 100755 index 00000000..74ddabc0 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_whi.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_yel.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_yel.gif new file mode 100755 index 00000000..681d0883 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_yel.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_yelthr1.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_yelthr1.gif new file mode 100755 index 00000000..6049157b Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/result_yelthr1.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultb_bla.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultb_bla.gif new file mode 100755 index 00000000..bcbd4d96 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultb_bla.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultb_bug.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultb_bug.gif new file mode 100755 index 00000000..3789f2b0 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultb_bug.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultb_mag.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultb_mag.gif new file mode 100755 index 00000000..f051aa46 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultb_mag.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultb_moz2.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultb_moz2.gif new file mode 100755 index 00000000..312f7345 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultb_moz2.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultb_no.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultb_no.gif new file mode 100755 index 00000000..9cb7801e Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultb_no.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultb_ok.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultb_ok.gif new file mode 100755 index 00000000..23981255 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultb_ok.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultb_whi.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultb_whi.gif new file mode 100755 index 00000000..a21af08b Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultb_whi.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultb_yel.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultb_yel.gif new file mode 100755 index 00000000..969db3d1 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultb_yel.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultg_bla.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultg_bla.gif new file mode 100755 index 00000000..c4ecc4e0 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultg_bla.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultg_dgr.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultg_dgr.gif new file mode 100755 index 00000000..17fbb6c8 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultg_dgr.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultg_lgr.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultg_lgr.gif new file mode 100755 index 00000000..68914a2f Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultg_lgr.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultg_no.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultg_no.gif new file mode 100755 index 00000000..3e3619a0 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultg_no.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultga.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultga.gif new file mode 100755 index 00000000..33ce2f88 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultga.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultgb.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultgb.gif new file mode 100755 index 00000000..76ecb545 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultgb.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultgb_dgr.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultgb_dgr.gif new file mode 100755 index 00000000..06413c53 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultgb_dgr.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultgb_no.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultgb_no.gif new file mode 100755 index 00000000..a2453e42 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultgb_no.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultpb_no.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultpb_no.gif new file mode 100755 index 00000000..72e61f8c Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/resultpb_no.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/rgb16_t.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/rgb16_t.png new file mode 100755 index 00000000..37682e9b Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/rgb16_t.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/rgb16_t_bk.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/rgb16_t_bk.png new file mode 100755 index 00000000..0505b2f6 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/rgb16_t_bk.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/rgb8_t.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/rgb8_t.png new file mode 100755 index 00000000..3fd10c85 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/rgb8_t.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/rgb8_t_bk.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/rgb8_t_bk.png new file mode 100755 index 00000000..89ce912b Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/rgb8_t_bk.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/rgba16.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/rgba16.png new file mode 100755 index 00000000..8a10587c Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/rgba16.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/rgba16_bk.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/rgba16_bk.png new file mode 100755 index 00000000..05a6db1e Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/rgba16_bk.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/rgba8.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/rgba8.png new file mode 100755 index 00000000..495d8c32 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/rgba8.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/rgba8_bk.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/rgba8_bk.png new file mode 100755 index 00000000..10a1ee50 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/rgba8_bk.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/stripe.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/stripe.gif new file mode 100755 index 00000000..e3fa3b33 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/png/stripe.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/smiley.png b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/smiley.png new file mode 100755 index 00000000..f5d3a0a9 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/smiley.png differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/unknown_extension.foo b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/unknown_extension.foo new file mode 100755 index 00000000..fd3265e5 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/unknown_extension.foo differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/vblank.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/vblank.gif new file mode 100755 index 00000000..332034b8 Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/vblank.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/what_ordered.gif b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/what_ordered.gif new file mode 100755 index 00000000..63de445a Binary files /dev/null and b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/images/what_ordered.gif differ diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/page_pages.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/page_pages.html new file mode 100755 index 00000000..a9f2fe02 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/page_pages.html @@ -0,0 +1,201 @@ + + + + + + + + + +

    Lorem ipsum dolor sit amet

    +

    Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec at +odio vitae libero tempus convallis. Cum sociis natoque penatibus et +magnis dis parturient montes, nascetur ridiculus mus. Vestibulum purus +mauris, dapibus eu, sagittis quis, sagittis quis, mi. Morbi fringilla +massa quis velit. Curabitur metus massa, semper mollis, molestie vel, +adipiscing nec, massa. Phasellus vitae felis sed lectus dapibus +facilisis. In ultrices sagittis ipsum. In at est. Integer iaculis +turpis vel magna. Cras eu est. Integer porttitor ligula a +tellus. Curabitur accumsan ipsum a velit. Sed laoreet lectus quis +leo. Nulla pellentesque molestie ante. Quisque vestibulum est id +justo. Ut pellentesque ante in neque.

    + +

    Curabitur ut diam eu dui vestibulum pharetra. Nam pellentesque, justo +non hendrerit venenatis, mi orci pretium mi, et vehicula leo arcu quis +diam. Nullam mattis laoreet quam. Morbi mollis sem ut tellus. Nam mi +massa, lobortis eu, sollicitudin et, iaculis et, massa. Maecenas purus +mauris, luctus sit amet, pharetra in, facilisis sit amet, elit. Nullam +vel erat tempus purus molestie suscipit. Vestibulum odio lorem, +sollicitudin non, volutpat sit amet, tincidunt vel, nunc. Nulla quis +ante vestibulum odio feugiat facilisis. Proin lorem nisl, viverra at, +rhoncus quis, semper nec, mi. Donec euismod enim vitae velit. Nulla +sed lectus. Vivamus placerat, lacus sed vehicula sagittis, arcu massa +adipiscing lorem, bibendum luctus nisl tortor vitae leo.

    + +

    Etiam a mauris. Proin justo elit, accumsan sit amet, tempus et, +blandit id, tellus. Morbi varius, nisi id iaculis aliquam, lacus +ligula facilisis velit, ac pharetra ipsum augue a massa. Etiam rhoncus +commodo orci. Mauris ullamcorper sagittis turpis. Nullam magna libero, +sagittis sed, auctor faucibus, accumsan vitae, urna. Pellentesque +volutpat. Aliquam sapien ipsum, eleifend nec, imperdiet vitae, +consectetuer id, quam. Donec a urna. Suspendisse sit amet +velit. Curabitur quis nisi id dui viverra ornare. Sed condimentum enim +quis tortor. Ut condimentum, magna non tempus tincidunt, leo nibh +molestie tellus, vitae convallis dolor ante sed ante. Nunc et +metus. Phasellus ultricies. Fusce faucibus tortor sit amet mauris.

    + +

    Aliquam enim. Duis et diam. Praesent porta, mauris quis pellentesque +volutpat, erat elit vulputate eros, vitae pulvinar augue velit sit +amet sem. Fusce eu urna eu nisi condimentum posuere. Vivamus sed +felis. Duis eget urna vitae eros interdum dignissim. Proin justo eros, +eleifend in, porttitor in, malesuada non, neque. Etiam sed +augue. Nulla sit amet magna. Lorem ipsum dolor sit amet, consectetuer +adipiscing elit. Mauris facilisis. Curabitur massa magna, pulvinar a, +nonummy eget, egestas vitae, mauris. Quisque vel elit sit amet lorem +malesuada facilisis. Vestibulum porta, metus sit amet egestas +interdum, urna justo euismod erat, id tristique urna leo quis +nibh. Morbi non erat.

    + +

    Cras fringilla, nulla id egestas elementum, augue nunc iaculis nibh, +ac adipiscing nibh justo id tortor. Donec vel orci a nisi ultricies +aliquet. Nunc urna quam, adipiscing molestie, vehicula non, +condimentum non, magna. Integer magna. Donec quam metus, pulvinar id, +suscipit eget, euismod ac, orci. Nulla facilisi. Nullam nec +mauris. Morbi in mi. Etiam urna lectus, pulvinar ac, sollicitudin eu, +euismod ac, lectus. Fusce elit. Sed ultricies odio ac felis.

    + +

    Cras iaculis. Nulla facilisi.

    +

    Cras iaculis. Nulla facilisi. Fusce vitae arcu. Integer lectus mauris, +ornare vel, accumsan eget, scelerisque vel, nunc. Maecenas justo urna, +volutpat vel, vehicula vel, ullamcorper nec, odio. Suspendisse laoreet +nisi sed erat. Cras convallis sollicitudin sapien. Phasellus ac erat +eu mi rutrum rhoncus. Morbi et velit. Morbi odio nisi, pharetra eget, +sollicitudin sed, aliquam at, nisl. Quisque euismod diam in +sapien. Integer accumsan urna in risus.

    + +

    Proin sit amet nisl. Phasellus dui ipsum, laoreet a, pulvinar id, +fringilla ut, libero. In hac habitasse platea dictumst. Maecenas mi +magna, cursus sed, rutrum eget, molestie nec, dui. Suspendisse +lacus. Vivamus nibh urna, accumsan sit amet, gravida sed, convallis a, +leo. Cras sollicitudin orci sit amet eros. Pellentesque eu odio et +velit tempor dignissim. Morbi vehicula malesuada enim. Pellentesque +tincidunt, tellus ac fringilla tempor, justo libero interdum nunc, eu +sollicitudin tortor augue nec tellus. Nullam eget leo quis tellus +gravida faucibus. Nam gravida. Curabitur rhoncus egestas +nunc. Curabitur mollis, nisi sed suscipit gravida, enim felis interdum +justo, vel accumsan magna nunc ut libero. Ut fermentum. Fusce luctus, +est sit amet feugiat lobortis, nisl eros bibendum libero, ut suscipit +felis ligula in massa. Proin congue elit et nisi. Cras ac nisl. Nunc +ullamcorper neque vel diam.

    + +

    Ut pellentesque arcu ac lectus.

    +

    Sed ac lorem. Ut pellentesque arcu ac lectus. Cum sociis natoque +penatibus et magnis dis parturient montes, nascetur ridiculus +mus. Pellentesque ultrices metus sollicitudin pede. Donec fermentum +est a velit fringilla mollis. Duis ligula. Fusce viverra laoreet +odio. Suspendisse sit amet ligula. Maecenas nunc velit, sagittis eu, +bibendum eu, placerat at, nibh. Praesent ut erat eget nisi gravida +imperdiet. Quisque vitae sapien. Ut eros.

    + +

    Donec eros ligula, dignissim vel, ultricies id, mattis in, massa. Duis +lobortis dui nec orci. Sed ullamcorper metus non massa. Aliquam eget +mauris ac nulla elementum posuere. Sed porta, augue vitae rhoncus +aliquet, felis quam eleifend est, vitae rutrum metus arcu vel +lorem. Proin laoreet, mauris sit amet aliquet eleifend, nisl sem +molestie nisi, eu varius eros ligula non erat. Integer ac +sem. Suspendisse lectus. Aliquam erat volutpat. Fusce sit amet leo +faucibus erat molestie ultrices. Maecenas lacinia lectus eget +dui. Etiam porta porttitor ante. Phasellus sit amet lacus adipiscing +enim mollis iaculis. Fusce congue, nulla a commodo aliquam, erat dui +fermentum dui, pellentesque faucibus orci enim at mauris. Pellentesque +a diam porta magna tempor posuere. Donec lorem.

    + +

    Sed viverra aliquam turpis. Aliquam lacus. Duis id massa. Nullam +ante. Suspendisse condimentum. Donec adipiscing, felis vel semper +sollicitudin, lacus justo pretium est, sed blandit pede risus eu +ante. Praesent ante nulla, fringilla id, ultrices et, feugiat a, +metus. Proin ac velit a metus suscipit fermentum. Integer aliquet. Sed +sapien nulla, placerat at, rutrum at, condimentum quis, libero. In +accumsan, tellus nec tincidunt malesuada, pede arcu commodo ipsum, ac +mattis tortor urna vitae enim. Aenean nonummy, mauris eget commodo +bibendum, augue sem ultrices nunc, eget rhoncus metus erat placerat +lectus. Aliquam mollis lectus in justo. Vivamus iaculis lacus sit amet +ligula. Etiam consectetuer convallis diam. Curabitur sollicitudin, +felis eu vehicula scelerisque, nisl urna aliquam orci, sit amet +laoreet mi turpis id ligula. Donec at enim non nulla adipiscing +dapibus. Aenean nisl.

    + +

    Ut in lacus nec enim volutpat pellentesque. Integer euismod. In odio +eros, malesuada in, mattis vel, tempor nec, sem. In libero tellus, +varius vitae, bibendum in, elementum quis, nisl. Duis tortor. Etiam at +justo. Pellentesque facilisis mauris non nunc. Praesent eros mi, +dapibus eget, placerat ac, lobortis quis, sem. Nulla rhoncus +turpis. Nulla vitae mi. Proin id massa. Nunc eros.

    + +

    Aliquam molestie pulvinar ligula.

    +

    Vestibulum dui risus, varius ut, semper et, consequat ultrices, +felis. Pellentesque iaculis urna in velit. Ut pharetra. Nunc +fringilla, nisi vitae fringilla placerat, enim justo semper erat, +mollis feugiat leo neque eu sem. Vestibulum orci urna, suscipit a, +accumsan nec, fringilla in, risus. Nullam ante. Nullam nec +eros. Nullam varius. Nulla facilisi. In auctor libero in +metus. Aliquam porttitor congue eros. Nulla facilisi. Mauris euismod +turpis ut felis. Ut nunc nisl, cursus quis, eleifend at, viverra +bibendum, lacus. Donec consequat lacus eu sapien. Fusce pulvinar +lectus quis nunc. In hac habitasse platea dictumst.

    + +

    Aliquam molestie pulvinar ligula. Maecenas imperdiet, urna eget +ultrices adipiscing, nibh ante elementum neque, id molestie massa quam +ut nunc. Nullam porta. Phasellus a magna in sem volutpat +viverra. Quisque aliquet nunc ac turpis. Mauris dolor enim, viverra +rutrum, placerat et, laoreet et, justo. In id nulla. Donec +erat. Phasellus nec mi sed velit mollis cursus. Vestibulum +tincidunt. Praesent dui libero, facilisis eu, vulputate eget, aliquet +nec, ipsum. Pellentesque in nisl in mauris pretium euismod.

    + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/quirks_center_table.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/quirks_center_table.html new file mode 100755 index 00000000..d0a45366 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/quirks_center_table.html @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + +
    ab
    cd
    + + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/quirks_font_tag.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/quirks_font_tag.html new file mode 100755 index 00000000..6b0812f7 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/quirks_font_tag.html @@ -0,0 +1,70 @@ + + + + + + + +

    Font tags with absolute size

    + +size=1 +size=2 +size=3 +size=4 +size=5 +size=6 +size=7 + +

    Span tags with absolute CSS size

    + +size=1 +size=2 +size=3 +size=4 +size=5 +size=6 +size=7 + +

    Font tags with relative size

    + +size=-4 +size=-3 +size=-2 +size=-1 +size=+1 +size=+2 +size=+3 +size=+4 + +

    Span tags with relative CSS size

    + +size=-4 +size=-3 +size=-2 +size=-1 +size=+1 +size=+2 +size=+3 +size=+4 + +

    Nested font tags

    + +size=2 + size=4 + size=2 + size=4 + size=2 + size=4 + size=2 + size=4 + + + + + + + + + + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/quirks_html_attributes.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/quirks_html_attributes.html new file mode 100755 index 00000000..efb6b264 --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/quirks_html_attributes.html @@ -0,0 +1,55 @@ + + + + + + +
    + +Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet +doming id quod mazim placerat facer possim assum. Lorem ipsum dolor sit +amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt +ut laoreet dolore magna aliquam erat volutpat.
    +Ut wisi enim ad minim veniam, +quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex +ea commodo consequat. + +
    +
    + + + + + + + + + + + + + + + + + + + + +
    Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper + suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem + vel eum iriure dolor in hendrerit in vulputate velit esse molestie + consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et + accumsan et iusto odio dignissim qui blandit praesent luptatum zzril + delenit augue duis dolore te feugait nulla facilisi.table testLorem ipsum dolor sit amet, consetetur sadipscing elitr, + sed diam nonumy eirmod tempor invidunt ut labore et dolore magna + aliquyam erat, sed diam voluptua.Duis autem vel eum iriure dolor in hendrerit in + vulputate velit esse molestie consequat, vel illum dolore eu feugiat + nulla facilisis at vero eros et accumsan et iusto odio dignissim qui + blandit praesent luptatum zzril delenit augue duis dolore te feugait + nulla facilisi.
    table testNam liber tempor cum soluta nobis eleifend option congue nihil + imperdiet doming id quod mazim placerat facer possim assum.
    + Lorem ipsum dolor sit amet.
    table testtable test
    table testtable testtable testtable test
    + + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/script_javascript.html b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/script_javascript.html new file mode 100755 index 00000000..45241edb --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/script_javascript.html @@ -0,0 +1,24 @@ + + + + Javascript test + + + + +This page will be printed automatically + +

    A title

    + + + + + diff --git a/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/script_php.php b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/script_php.php new file mode 100755 index 00000000..ad75b6ed --- /dev/null +++ b/docroot/sites/all/modules/contrib/print/lib/dompdf/www/test/script_php.php @@ -0,0 +1,28 @@ + + + + + + + + + +Here's some dynamically generated text and some random circles...

    "; +?> + + +Current PHP version: " . phpversion() . ". "; +echo "Today is " . strftime("%A") . " the " . strftime("%e").date("S").strftime(" of %B, %Y %T") . "

    "; + +?> + diff --git a/docroot/sites/all/modules/contrib/roleassign/CHANGELOG.txt b/docroot/sites/all/modules/contrib/roleassign/CHANGELOG.txt new file mode 100644 index 00000000..44c9e72f --- /dev/null +++ b/docroot/sites/all/modules/contrib/roleassign/CHANGELOG.txt @@ -0,0 +1,40 @@ + +CHANGELOG for RoleAssign for Drupal 7 + + +roleassign 7.x-1.x-dev: + + +roleassign 7.x-1.0 (2012-11-04): + +roleassign 7.x-1.0-rc2 (2012-10-17): + #1402408: Ensure that hook_user_presave() is always registered. + #1431338: Clarify the configuration instructions. + #1386064: Fix a notice in the bulk user administration hook. + Tune the module-uninstall protection. + +roleassign 7.x-1.0-rc1 (2011-11-26): + Clean up type hints, docblocks, comments and some minor code issues. + +roleassign 7.x-1.0-beta2 (2011-09-05): + Protect more-privileged users as well as RoleAssign itself. + #1258808: Fix a warning in _roleassign_form_alter(). + +roleassign 7.x-1.0-beta1 (2011-08-11): + Port to D7 and extract roleassign.admin.inc to reduce the footprint. + + +roleassign 6.x-1.0 (2011-08-11): + +roleassign 6.x-1.0-rc1 (2011-07-20): + Remove unnecessary quotes from the .info file. + Avoid two 'undefined index' notices. + #599440 by shark: Keep permission names in help text visible for light-on-dark themes. + Minor coding style and porting clean-up. + 'administer access control' is called 'administer permissions' in D6. + Maintainership passed to salvis. + Minor code cleanup, by TBarregren. + +roleassign 6.x-1.0-beta3 (2010-10-09): + Last release by TBarregren. + diff --git a/docroot/sites/all/modules/contrib/roleassign/LICENSE.txt b/docroot/sites/all/modules/contrib/roleassign/LICENSE.txt new file mode 100644 index 00000000..d159169d --- /dev/null +++ b/docroot/sites/all/modules/contrib/roleassign/LICENSE.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 2 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, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/docroot/sites/all/modules/contrib/roleassign/README.txt b/docroot/sites/all/modules/contrib/roleassign/README.txt new file mode 100755 index 00000000..63e1a478 --- /dev/null +++ b/docroot/sites/all/modules/contrib/roleassign/README.txt @@ -0,0 +1,82 @@ +ROLEASSIGN +========== + +RoleAssign specifically allows site administrators to further delegate +the task of managing user's roles. + +RoleAssign introduces a new permission called 'assign roles'. Users +with this permission are able to assign selected roles to still other +users. Only users with the 'administer permissions' permission may +select which roles are available for assignment through this module. + +This module was developped by TBarregren and is now maintained by +salvis. + + +BACKGROUND +---------- + +It is possible for site administrators to delegate the user +administration through the 'administer users' permission. But that +doesn't include the right to assign roles to users. That is necessary if +the delegatee should be able to administrate user accounts without +intervention from a site administrator. + +To delegate the assignment of roles, site administrators have had until +now no other choice than also grant the 'administer permissions' +permission. But that is not advisable, since it gives right to access +all roles, and worse, to grant any rights to any role. That can be +abused by the delegatee, who can assign himself all rights and thereby +take control over the site. + +This module solves this dilemma by introducing the 'assign roles' +permission. While editing a user's account information, a user with this +permission will be able to select roles for the user from a set of +available roles. Roles available are configured by users with the +'administer permissions' permission. + + +INSTALL +------- + +1. Copy the entire 'roleassign' directory, containing the +'roleassign.module' and other files, to your Drupal modules directory. + +2. Log in as site administrator. + +3. Go to the administration page for modules and enable the module. + + +CONFIGURATION +------------- + +1. Log in as site administrator. + +2. Go to the Permissions page (people/permissions) and grant the 'assign roles' +permission to those roles that should be able to assign roles to other users. +Notice that besides the 'assign roles' permission, these roles also must have +the 'administer users' permission. + +3. Go to the administration page for RoleAssign (people/permissions/roleassign) +and select those roles that should be available for assignment by users with +'assign roles' permission. + +4. For each user that should be able to assign roles, go to the user's account +and select a role with both the 'assign roles' and the 'administer users' +permissions. + +Beware: Granting the 'administer users' permission to users will allow them to +modify admin passwords or email addresses or even delete the site administrator +account. The User Protect module can prevent this. + + +USAGE +----- + +1. Log in as a user with both the 'assign roles' and the 'administer users' +permissions. + +2. To change the roles of a user, go to the user's account and review the +assignable roles and change them as necessary. + + diff --git a/docroot/sites/all/modules/contrib/roleassign/roleassign.admin.inc b/docroot/sites/all/modules/contrib/roleassign/roleassign.admin.inc new file mode 100644 index 00000000..c33329ba --- /dev/null +++ b/docroot/sites/all/modules/contrib/roleassign/roleassign.admin.inc @@ -0,0 +1,292 @@ +assign roles permission. + * + * @return array|null + */ +function roleassign_admin_form() { + // To admister roleassign, 'administer permissions' permission is required. + if (!user_access('administer permissions')) { + return NULL; + } + + // Get all available roles except for 'anonymous user' + // and 'authenticated user'. + $roles = user_roles(TRUE); + unset($roles[DRUPAL_AUTHENTICATED_RID]); + + // Show checkboxes with roles that can be delegated if any. + if ($roles) { + $form['roleassign_roles'] = array( + '#type' => 'checkboxes', + '#title' => t('Roles'), + '#options' => $roles, + '#default_value' => variable_get('roleassign_roles', array()), + '#description' => t('Select roles that should be available for assignment.'), + ); + } + else { + $form['roleassign_roles'] = array( + '#type' => 'markup', + '#value' => '

    No assignable roles available. You have to ' . l(t('create roles'), 'admin/people/permissions/roles') . ' that can be assigned.

    ', + ); + } + + // Return system settings form. + return system_settings_form($form); +} + +/** + * Really implements hook_form_alter(). + * + * Adds checkboxes for assignable roles to the user edit form. + * + * @param array $form + * @param array $form_state + * @param string $form_id + */ +function _roleassign_form_alter(array &$form, array &$form_state, $form_id) { + // Get all roles that are available. + $roles = user_roles(TRUE); + + // Get roles that are available for assignment. + $assignable_roles = _roleassign_assignable_roles($roles); + + // Get roles already assigned to the account. + $account = menu_get_object('user'); + $assigned_roles = (isset($account->roles) ? $account->roles : array()); + + // An account might already have a role that isn't available for assignment + // through this module. Such a role is called "sticky". + // Get sticky roles. + $sticky_roles = array_diff($assigned_roles, $assignable_roles); + $sticky_roles = array_intersect_key($roles, $sticky_roles); + + // Store sticky roles for later use in roleassign_user_presave(). + _roleassign_sticky_roles($sticky_roles); + + // Make a string of all sticky roles. + $sticky_roles[DRUPAL_AUTHENTICATED_RID] = $roles[DRUPAL_AUTHENTICATED_RID]; + $sticky_roles_str = implode(', ', $sticky_roles); + + // Build the assign roles checkboxes. + $roles_field = array( + '#type' => 'checkboxes', + '#title' => t('Assignable roles'), + '#options' => $assignable_roles, + '#default_value' => array_keys($assigned_roles), + '#description' => t('The user receives the combined permissions of all roles selected here and the following roles: %roles.', array('%roles' => $sticky_roles_str)), + ); + + // The user form is sometimes within an 'account' fieldset. + if (isset($form['account'])) { + $user_form =& $form['account']; + } + else { + $user_form =& $form; + } + + // Add the assign roles checkboxes to the user form, and make sure + // that the notify user checkbox comes last. + if (isset($user_form['notify'])) { + $notify_field = $user_form['notify']; + unset($user_form['notify']); + $user_form['roleassign_roles'] = $roles_field; + $user_form['notify'] = $notify_field; + } + else { + $user_form['roleassign_roles'] = $roles_field; + } + + if (user_access('administer permissions', $account) && !user_access('administer permissions')) { + drupal_set_message(t('Some of the fields on this form are locked for this user.'), 'warning', FALSE); + $form['account']['name']['#disabled'] = TRUE; + $form['account']['mail']['#disabled'] = TRUE; + $form['account']['pass']['#disabled'] = TRUE; + } +} + +/** + * Really implements hook_user_presave(). + * + * @param array $edit + * @param object $account + * @param string $category + */ +function _roleassign_user_presave(array &$edit, $account, $category) { + // If this isn't the account category, or there is no roleassign_roles + // field, there isn't much to do. + if ($category != 'account' || !isset($edit['roleassign_roles'])) { + return; + } + + // If someone is trying to update user's roles, it's a malicious + // attempt to alter user's roles. + if (!user_access('assign roles')) { + watchdog('security', "Detected malicious attempt to alter user's roles.", array(), WATCHDOG_WARNING); + form_set_error('category', t("Detected malicious attempt to alter user's roles.")); + } + + // On submit, copy sticky and assigned roles from 'roleassign_roles' + // to 'roles'. + $edit['roles'] = array_filter(_roleassign_sticky_roles() + $edit['roleassign_roles']); + unset($edit['roleassign_roles']); +} + +/** + * Really implements hook_user_operations(). + * + * Add or remove roles to selected users. + * Thanks to hunmonk for the original code. + * + * @return array|null + */ +function _roleassign_user_operations() { + // Get roles that are available for assignment. + $assignable_roles = _roleassign_assignable_roles(user_roles(TRUE)); + + // Build an array of available operations. + if (count($assignable_roles)) { + $add_roles = $remove_roles = array(); + foreach ($assignable_roles as $key => $value) { + $add_roles['roleassign_add_role-' . $key] = $value; + $remove_roles['roleassign_remove_role-' . $key] = $value; + } + $operations = array( + t('Add a role to the selected users') => array('label' => $add_roles), + t('Remove a role from the selected users') => array('label' => $remove_roles), + ); + } + else { + $operations = array(); + } + + // The global variable $form_values is not available anymore; + // the $_POST values are "sanitized" below. + + // The required 'callback' key and optional 'callback arguments' key are + // actually only needed when someone has posted. We therefore postpone + // the attachement of these until $form_values is set. + if (isset($_POST['operation']) && $operation = $_POST['operation']) { + // Get operation and role id. + $op = explode('-', $operation); + $rid = (isset($op[1]) ? intval($op[1]) : NULL); + $op = $op[0]; + + // If not a RoleAssign operation, there is not much to do. + if ($op != 'roleassign_add_role' && $op != 'roleassign_remove_role') { + return NULL; + } + + // If someone is trying to update user's roles, it's a malicious + // attempt to alter user's roles. + if (!user_access('assign roles')) { + watchdog('security', 'Detected malicious attempt to alter user\'s roles.', array(), WATCHDOG_WARNING); + form_set_error('category', t('Detected malicious attempt to alter user\'s roles.')); + } + + // Form the name of the core callback functions for adding and + // removing roles by choping off the 'roleassign_' part of the + // operation string. + $operations[$operation] = array( + 'callback' => 'user_multiple_role_edit', + 'callback arguments' => array(substr($op, 11), $rid), + 'label' => '(DUMMY)', + ); + } + + return $operations; +} + +/** + * Returns assignable roles. + * + * @param array $roles + * + * @return array + */ +function _roleassign_assignable_roles(array $roles) { + return array_intersect_key($roles, array_filter(variable_get('roleassign_roles', array()))); +} + +/** + * Store and retrive sticky roles. + * + * @param array|null $new_sticky_roles + * + * @return array + */ +function _roleassign_sticky_roles($new_sticky_roles = NULL) { + static $sticky_roles = array(); + if (isset($new_sticky_roles)) { + $sticky_roles = $new_sticky_roles; + } + return $sticky_roles; +} + +/** + * Really implements hook_help(). + * + * Returns various help texts. + * + * @param string $path + * @param $arg + * + * @return string|null + */ +function _roleassign_help($path = "admin/help#roleassign", $arg) { + $perms = user_permission(); + $variables['%Administer_users'] = $perms['administer users']['title']; + $variables['%Administer_permissions'] = $perms['administer permissions']['title']; + $perms = roleassign_permission(); + $variables['%Assign_roles'] = $perms['assign roles']['title']; + $variables['!help'] = l(t('help page'), 'admin/help/roleassign'); + + switch ($path) { + case 'admin/people/permissions/roleassign': + return t('Users with both %Administer_users and %Assign_roles permissions are allowed to assign the roles selected below. For more information, see the !help.', $variables); + case 'admin/help#roleassign': + return t(' +

    RoleAssign specifically allows site administrators to further delegate the task of managing user\'s roles.

    +

    RoleAssign introduces a new permission called %Assign_roles. Users with this permission are able to assign selected roles to still other users. Only users with the %Administer_permissions permission may select which roles are available for assignment through this module.

    + +

    Background

    +

    It is possible for site administrators to delegate the user administration through the %Administer_users permission. But that doesn\'t include the right to assign roles to users. That is necessary if the delegatee should be able to administrate user accounts without intervention from a site administrator.

    +

    To delegate the assignment of roles, site administrators have had until now no other choice than also grant the %Administer_permissions permission. But that is not advisable, since it gives right to access all roles, and worse, to grant any rights to any role. That can be abused by the delegatee, who can assign himself all rights and thereby take control over the site.

    +

    This module solves this dilemma by introducing the %Assign_roles permission. While editing a user\'s account information, a user with this permission will be able to select roles for the user from a set of available roles. Roles available are configured by users with the %Administer_permissions permission.

    +

    Install

    +
      +
    1. Copy the entire !roleassign directory, containing the !roleassign_module and other files, to your Drupal modules directory.
    2. +
    3. Log in as site administrator.
    4. +
    5. Go to the administration page for modules and enable the module.
    6. +
    +

    Configuration

    +
      +
    1. Log in as site administrator.
    2. +
    3. Go to the administration page for access control and grant %Assign_roles permission to those roles that should be able to assign roles to other users. Notice that besides the %Assign_roles permission, these roles also must have the %Administer_users permission.
    4. +
    5. Go to the administration page for role assign and select those roles that should be available for assignment by users with %Assign_roles permission.
    6. +
    7. For each user that should be able to assign roles, go to the user\'s account and select a role with both the %Assign_roles and the %Administer_users permissions.
    8. +
    +

    Beware: granting %Administer_users permission to users will allow them to modify admin passwords or email addresses or even delete the site administrator account. The !User_protect module can prevent this.

    +

    Usage

    +
      +
    1. Log in as a user with both the %Assign_roles and the %Administer_users permissions.
    2. +
    3. To change the roles of a user, go to the user\'s account and review the assignable roles and change them as necessary.
    4. +
    ', $variables + array( + '!roleassign' => 'roleassign', + '!roleassign_module' => 'roleassign.module', + '!User_protect' => 'User protect', + )); + } + return NULL; +} diff --git a/docroot/sites/all/modules/contrib/roleassign/roleassign.info b/docroot/sites/all/modules/contrib/roleassign/roleassign.info new file mode 100644 index 00000000..2e66a157 --- /dev/null +++ b/docroot/sites/all/modules/contrib/roleassign/roleassign.info @@ -0,0 +1,13 @@ +name = RoleAssign +description = Allows site administrators to further delegate the task of managing user's roles. +core = 7.x + +configure = admin/people/permissions/roleassign + + +; Information added by drupal.org packaging script on 2012-11-04 +version = "7.x-1.0" +core = "7.x" +project = "roleassign" +datestamp = "1352043133" + diff --git a/docroot/sites/all/modules/contrib/roleassign/roleassign.install b/docroot/sites/all/modules/contrib/roleassign/roleassign.install new file mode 100755 index 00000000..e06e6115 --- /dev/null +++ b/docroot/sites/all/modules/contrib/roleassign/roleassign.install @@ -0,0 +1,14 @@ +assign + * roles permission will be able to select roles for the user from + * a set of available roles. Roles available are configured by the site + * administrator. + * + * @return array + */ +function roleassign_permission() { + $perm = user_permission(); + $perm = $perm['administer users']['title']; + return array( + 'assign roles' => array( + 'title' => t('Assign roles'), + 'description' => t('Allow users with the %Administer_users permission to assign a restricted set of roles.', array('%Administer_users' => $perm)), + 'restrict access' => TRUE, + ), + ); +} + +/** + * Implements hook_menu(). + * + * Adds role assign to Administration » People. + * + * @return array + */ +function roleassign_menu() { + $items = array(); + + $items['admin/people/permissions/roleassign'] = array( + 'title' => 'Role assign', + 'description' => "Define the set of roles that can be assigned by admins with the 'Assign roles' permission.", + 'type' => MENU_LOCAL_TASK | MENU_VISIBLE_IN_TREE, + 'file' => 'roleassign.admin.inc', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('roleassign_admin_form'), + 'access callback' => 'user_access', + 'access arguments' => array('administer permissions'), + ); + + return $items; +} + +/** + * Implements hook_form_alter(). + * + * Adds checkboxes for assignable roles to the user edit form. + * + * @param array $form + * @param array $form_state + * @param string $form_id + */ +function roleassign_form_alter(array &$form, array &$form_state, $form_id) { + + // Do nothing if the user already has 'administer permissions' permission. + if (user_access('administer permissions')) { + return; + } + + // Do nothing if the user doesn't have both 'administer users' and + // 'assign roles' permissions. + if (!user_access('administer users') || !user_access('assign roles')) { + return; + } + + // Do nothing if right form isn't shown. + if ($form_id == 'user_register_form' || ($form_id == 'user_profile_form' && isset($form['account']))) { + // Add the checkboxes to the user edit page. + _roleassign_module_load_include('admin.inc'); + _roleassign_form_alter($form, $form_state, $form_id); + } + elseif ($form_id == 'system_modules' && !user_access('administer roles')) { + // Keep the (restricted) user from disabling this module. + $form['modules']['roleassign']['enable']['#disabled'] = TRUE; + $form['modules']['roleassign']['description']['#markup'] .= '
    ' . t('(protected)') . ''; + } +} + + /** + * Implements hook_user_presave(). + * + * @param array $edit + * @param object $account + * @param string $category + */ +function roleassign_user_presave(array &$edit, $account, $category) { + _roleassign_module_load_include('admin.inc'); + return _roleassign_user_presave($edit, $account, $category); +} + +/** + * Implements hook_user_operations(). + * + * Add or remove roles to selected users. + * + * @return array|null + */ +function roleassign_user_operations() { + // Do nothing if add and remove roles operations already is shown or + // the user hasn't right to assign roles. + if (user_access('administer permissions') || !user_access('assign roles')) { + return NULL; + } + + _roleassign_module_load_include('admin.inc'); + return _roleassign_user_operations(); +} + +/** + * Implements hook_help(). + * + * Returns various help texts. + * + * @param string $path + * @param $arg + * + * @return string|null + */ +function roleassign_help($path = "admin/help#roleassign", $arg) { + _roleassign_module_load_include('admin.inc'); + return _roleassign_help($path, $arg); +} + +/** + * Helper function to load include files. + * + * @param string $type + */ +function _roleassign_module_load_include($type) { + static $loaded = array(); + + if (!isset($loaded[$type])) { + $loaded[$type] = (bool) module_load_include($type, 'roleassign'); + } + return $loaded[$type]; +} diff --git a/docroot/sites/all/modules/contrib/scald/LICENSE.txt b/docroot/sites/all/modules/contrib/scald/LICENSE.txt new file mode 100644 index 00000000..d159169d --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/LICENSE.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 2 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, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/docroot/sites/all/modules/contrib/scald/README.txt b/docroot/sites/all/modules/contrib/scald/README.txt new file mode 100644 index 00000000..b20ce4d2 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/README.txt @@ -0,0 +1,136 @@ +SCALD: MEDIA MANAGEMENT MADE EASY +--------------------------------- + +Homepage: http://drupal.org/project/scald +Documentation: http://drupal.org/node/1652740 + +Contents of this file: + + * Introduction + * Terminology + * Installation + + +INTRODUCTION +------------ + +"SCALD is Content, Attribution, Licensing, & Distribution". The problem that +sparked the development of Scald is obvious all over the web. When I (the +end-user) want to post something online I first must figure out what *type* of +thing I'm posting. If I am writing something for my personal blog about my +vacation last weekend, I'll open up Blogger and start writing. But then I +realize that I have a video which I want to include in my post. So I open up +YouTube, check to see if the video format that I have my video in is compatible +with YouTube, upload my video, copy the embed code, paste it into Blogger and +then test my post to see if the video actually embedded properly. THEN, I can +get back to writing my post -- only to realize that the photos I took on the +trip would be good to include too, so I open up Flickr... + +As the narrative above highlights, the web currently has "silos" of media which +are exposed to the end-user. I shouldn't have to care that YouTube is where +videos live. Or which codecs YouTube supports. I should be able to just upload +my video directly in Blogger, pay no attention to where its being stored and +put it in my post. Similarly, if the video is already online, I shouldn't have +to figure out if the embed code from Vimeo is different than the one on +YouTube. I should just be able to select my video and put it in my blog post -- +ideally from right within Blogger. And this should apply to audio, images, and +video -- all regardless of the source (my hard drive or someone else's +website). + +To make things worse, we have not even begun to consider the licensing +implications, we're just discussing a format usability problem. The average +user has no concept of the intracacies of "fair use" or "attribution +share-alike". Despite all the efforts by the Creative Commons folks, these are +concepts which are very difficult for those who don't deal with such issues +daily to understand. What I want to know is "how do I get that video in my blog +post?". There should be a mechanism which distills the licensing issues down to +"can I use it or not?" Even better, the content which I am not allowed to use +in that way shouldn't even be exposed in the interface. The related problem of +"how do I let other people use my stuff without giving it away" is something +that casual content creators may or may not consider. + + +TERMINOLOGY +----------- + +So again, SCALD is Content, Attribution, Licensing, & Distribution. The core +concepts of Scald are Scald Atoms, the Scald Unified Type system, Display +Contexts, Transcoders and Players. + +WTH? Too many new concepts! In fact, Scald started in 2008, at the same time as +Drupal 6. There was very little concept about entities, view modes. Therefore, +Scald used its own terminology for concepts that came in Drupal 7. + +- Scald Atom (or atomic asset): is Entity in Scald terminology. + +- Scald Unified Type (or atom type): is Entity Bundle. Each atom type thus can + have different attached fields, different view modes and different display + settings. Why "Unified Type"? Because one type (e.g. video) can have many + providers (e.g. local files, YouTube, Dailymotion etc.) and are all treated the + same way (e.g. share the same player). + +- Scald Display Context: is similar to Entity View mode. What make it + different is while view modes are about field display settings, in Scald the + atom itself (an "extra fields") could also have display settings. In each + context (read: view mode), an atom can have a different transcoder (read: image + style) and a different player (read: display plugin). It is similar to the + possibility of having different displays of node title in different view modes + - but an atom is much more complex than a node title. + +- Scald Action: is also designed to be extensible. Common actions defined in + Scald core are: fetch (read: load), view, edit, delete. Modules can defined + more actions. Each atom can be configured to open to certain actions. Scald + supports a permission system per action so that access control works out of the + box with great level of granularity. + +- Transcoder: is similar to image style, but designed to work with all kinds of + content. For example, a video or an audio transcoded to different bit rates + for different display contexts. + +- Player: is used to controlled how the atom is displayed. From that point of + view, it is similar to a theme. However, players are pluggable and look more + like a display plugin. + +- Scald Atom Shorthand (SAS): is a format representating an atom in a context + with options and does not use HTML markup. It could be abusively called + "token". SAS is not required, though it helps to avoid using dangerous HTML + markup in a text field. + + +INSTALLATION +------------ + +Scald depends on Views, CTools and has integration for Edit, CKEditor or +WYSIWYG, Token. + +Other than type/context/action/transcoder/player providers, Scald has 3 types +of modules: + +- Drag and Drop integration: the DnD module features drag and drop interface + for Scald atoms. DnD support many atom libraries, however if you don't want + to use your own, the scald_dnd_library module (requires Views) is available. + +- Field integration: MEE (Multimedia Editorial Element) enhances text fields to + support SAS conversion and atom usage tracking. The Atom Reference module + provides an entity reference field (which is compatible with Entity Reference + module) and a d'n'd widget. The Entity Reference module could be used as a + drop-in replacement for Atom Reference if you don't need the d'n'd widget. + +- Atom provider: lots of modules. They are in general independent and can be + enabled when necessary. + +Because Scald is modular, you need at least one module in each category to work: + +- dnd: the bridge between a library and a field, it is responsible for the drag + and drop. + +- scald_dnd_library: the default library in Scald. + +- a field that supports dnd: either Atom Reference field, or a text field with + "Drag and Drop" option enabled. + +- An atom provider module. + +More detail on how to install/configure Scald is available at +http://drupal.org/node/1775718. + diff --git a/docroot/sites/all/modules/contrib/scald/assets/audio.png b/docroot/sites/all/modules/contrib/scald/assets/audio.png new file mode 100644 index 00000000..f59bf7fe Binary files /dev/null and b/docroot/sites/all/modules/contrib/scald/assets/audio.png differ diff --git a/docroot/sites/all/modules/contrib/scald/assets/image.png b/docroot/sites/all/modules/contrib/scald/assets/image.png new file mode 100644 index 00000000..9635cba4 Binary files /dev/null and b/docroot/sites/all/modules/contrib/scald/assets/image.png differ diff --git a/docroot/sites/all/modules/contrib/scald/assets/thumbnail_default.png b/docroot/sites/all/modules/contrib/scald/assets/thumbnail_default.png new file mode 100644 index 00000000..b415be44 Binary files /dev/null and b/docroot/sites/all/modules/contrib/scald/assets/thumbnail_default.png differ diff --git a/docroot/sites/all/modules/contrib/scald/assets/video.png b/docroot/sites/all/modules/contrib/scald/assets/video.png new file mode 100644 index 00000000..93d03ab3 Binary files /dev/null and b/docroot/sites/all/modules/contrib/scald/assets/video.png differ diff --git a/docroot/sites/all/modules/contrib/scald/includes/ScaldAtom.inc b/docroot/sites/all/modules/contrib/scald/includes/ScaldAtom.inc new file mode 100644 index 00000000..86f98a8e --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/includes/ScaldAtom.inc @@ -0,0 +1,38 @@ + '', + 'type' => $type, + 'language' => LANGUAGE_NONE, + 'provider' => $provider, + 'publisher' => $GLOBALS['user']->uid, + 'actions' => scald_atom_defaults($type)->actions, + 'data' => array(), + ); + + if (module_exists('entity_translation')) { + unset($values['language']); + $handler = entity_translation_get_handler('scald_atom',(object) $values); + $langcode = $handler->getLanguage(); + $values['language'] = $langcode; + } + + foreach ($values as $key => $value) { + $this->$key = $value; + } + } + + public function save() { + return ScaldAtomController::save($this); + } +} diff --git a/docroot/sites/all/modules/contrib/scald/includes/ScaldAtomController.inc b/docroot/sites/all/modules/contrib/scald/includes/ScaldAtomController.inc new file mode 100644 index 00000000..a9de9d35 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/includes/ScaldAtomController.inc @@ -0,0 +1,323 @@ +data = unserialize($atom->data); + } + + parent::attachLoad($atoms, $revision_id); + } + + /** + * Prepares and returns the default thumbnail path for an atom type. + */ + public static function getThumbnailPath($type) { + $field = field_info_field('scald_thumbnail'); + $instance = field_info_instance('scald_atom', 'scald_thumbnail', $type); + if ($field && $instance) { + $directory = file_field_widget_uri($field, $instance); + if (file_prepare_directory($directory, FILE_CREATE_DIRECTORY)) { + return $directory; + } + } + } + + /** + * Returns the default description for a file or image field for an atom type. + */ + public static function getFieldDescription($type, $field_name = 'scald_thumbnail') { + $description = ''; + $field = field_info_field($field_name); + $instance = field_info_instance('scald_atom', $field_name, $type); + if ($field && $instance) { + $description = $instance['description']; + } + return $description; + } + + /** + * Returns the default upload validators for a file or image field for an atom type. + */ + public static function getFieldUploadValidators($type, $field_name = 'scald_thumbnail') { + $upload_validators = array(); + $field = field_info_field($field_name); + $instance = field_info_instance('scald_atom', $field_name, $type); + if ($field && $instance) { + // Add upload file validation. + $upload_validators = file_field_widget_upload_validators($field, $instance); + if ($type === 'image' && (!empty($instance['settings']['max_resolution']) || !empty($instance['settings']['min_resolution']))) { + // Add upload image validation. + $upload_validators['file_validate_image_resolution'] = array($instance['settings']['max_resolution'], $instance['settings']['min_resolution']); + } + } + return $upload_validators; + } + + /** + * Add a Scald unified type. + * + * This function create a new type if it does not already exist. It can be + * used inside atom providers hook_install(), to easily ensure that the type + * of the atom the module will provide is defined. + * + * @return bool + * TRUE if the new type was added, FALSE if already exists. + */ + public static function addType($type, $title, $description) { + // Check if this type already exists. + $types = scald_types(); + if (!empty($types[$type])) { + return FALSE; + } + + // Create a new type. + db_insert('scald_types') + ->fields(array('type', 'title', 'description', 'provider')) + ->values(array($type, $title, $description, 'scald')) + ->execute(); + + // And add fields on it, starting with the Scald Thumbnail field. + $instance = array( + 'field_name' => 'scald_thumbnail', + 'entity_type' => 'scald_atom', + 'bundle' => $type, + 'label' => 'Thumbnail', + 'required' => FALSE, + 'display' => array( + 'default' => array( + 'type' => 'hidden', + ), + ), + 'settings' => array( + 'file_directory' => 'thumbnails/' . $type, + ), + ); + if (!field_read_instance($instance['entity_type'], $instance['field_name'], $instance['bundle'])) { + field_create_instance($instance); + $instance = field_info_instance($instance['entity_type'], $instance['field_name'], $instance['bundle']); + foreach ($instance['display'] as $view_mode => $settings) { + $instance['display'][$view_mode]['type'] = 'hidden'; + } + field_update_instance($instance); + } + + // Instantiate the Scald Authors field, if the vocabulary exists, and if + // the field exists for us to instantiate. Otherwise, assume that one or + // both were intentionally deleted and don't re-create. + $vocabulary_name = variable_get('scald_author_vocabulary', 'scald_authors'); + $vocabulary = taxonomy_vocabulary_machine_name_load($vocabulary_name); + $instance = array( + 'field_name' => 'scald_authors', + 'entity_type' => 'scald_atom', + 'bundle' => $type, + 'label' => 'Authors', + 'required' => FALSE, + 'widget' => array( + 'type' => 'taxonomy_autocomplete', + ), + ); + if ($vocabulary && field_read_field($instance['field_name']) && !field_read_instance($instance['entity_type'], $instance['field_name'], $instance['bundle'])) { + field_create_instance($instance); + } + + // Instantiate the Scald Tags field. As with Scald Authors above, only do + // this if the vocabulary and the field already exist. + $vocabulary_name = variable_get('scald_tags_vocabulary', 'scald_tags'); + $vocabulary = taxonomy_vocabulary_machine_name_load($vocabulary_name); + $instance = array( + 'field_name' => 'scald_tags', + 'entity_type' => 'scald_atom', + 'bundle' => $type, + 'label' => 'Tags', + 'required' => FALSE, + 'widget' => array( + 'type' => 'taxonomy_autocomplete', + ), + ); + if ($vocabulary && field_read_field($instance['field_name']) && !field_read_instance($instance['entity_type'], $instance['field_name'], $instance['bundle'])) { + field_create_instance($instance); + } + + // Flush our caches. + scald_contexts(TRUE); + scald_types(TRUE); + + return TRUE; + } + + /** + * Remove a Scald unified type. + * + * This function removes a type. It can be used inside atom providers + * hook_uninstall(), to easily ensure that the type of the atom the module + * provides is removed if no other use it. + * + * @param string $type + * Machine name of atom type. + * + * @return bool + * TRUE if the type was removed, FALSE otherwise. + */ + public static function removeType($type) { + if (!array_key_exists($type, scald_atom_providers())) { + db_delete('scald_types') + ->condition('type', $type) + ->execute(); + scald_types(TRUE); + return TRUE; + } + + return FALSE; + } + + /** + * Save changes to a Scald Atom, or create a new one. + * + * @param ScaldAtom $atom + * At minimum, 'type', 'provider', and 'base_id' (which uniquely identifies + * a given Atom) are required. Additional included values which are keyed + * by recognized Scald Atom Object members will be used for those members + * and any additional values will be passed along to the Providers. + * + * @return mixed + * The saved atom upon successful save. + * NULL upon failure. + */ + public static function save($atom) { + // First pass Atom object validation. + $types = scald_types(); + + // Verify type. + if (empty($atom->type) || empty($atom->provider) || empty($types[$atom->type])) { + return NULL; + } + + // Ensure the Atom Object has all the required members. + if (!isset($atom->publisher)) { + $atom->publisher = NULL; + } + if (!isset($atom->actions)) { + $atom->actions = NULL; + } + if (!isset($atom->title)) { + $atom->title = ''; + } + if (!isset($atom->data)) { + $atom->data = array(); + } + if (!isset($atom->created)) { + $atom->created = REQUEST_TIME; + } + if (!isset($atom->changed)) { + $atom->changed = REQUEST_TIME; + } + + $op = empty($atom->sid) ? 'insert' : 'update'; + + if ($op == 'update') { + $hook = 'scald_update_atom'; + $atom->original = entity_load_unchanged('scald_atom', $atom->sid); + + // Nobody updated the changed date, so we do it. + if($atom->original->changed === $atom->changed) { + $atom->changed = REQUEST_TIME; + } + } + else { + $hook = 'scald_register_atom'; + } + + // The Type Provider can implement some other defaults at this point, but + // the Atom Provider may override them. + module_invoke($types[$atom->type]->provider, $hook, $atom, 'type'); + + // Hand the Atom off to the Atom Provider to do additional processing and + // population. + // NOTE: Providers explicitly have access to change the Atom's basic members + // to allow for hypothetical "dispatch Providers" which would determine the + // appropriate Provider and/or characteristics of an Atom upon registration. + module_invoke($atom->provider, $hook, $atom, 'atom'); + + // Another round of member validation is necessary due to the potential for + // the Providers to modify them. By design! + if (empty($atom->type) || empty($atom->provider) || empty($types[$atom->type])) { + return NULL; + } + + // Only supply defaults for the Actions bitstring if the Provider did + // nothing. Otherwise assume that the bitstring is intentional. + if (is_null($atom->actions)) { + $defaults = scald_atom_defaults($atom->type); + $atom->actions = $defaults->actions; + } + + // Do "poor-man's" UID validation. + if (empty($atom->publisher) || !is_numeric($atom->publisher) || !($atom->publisher > 0)) { + global $user; + $atom->publisher = $user->uid; + } + + // Let Field API have a pass at our atom too. + field_attach_presave('scald_atom', $atom); + + // Inform all modules before writing the atom in the database. + module_invoke_all('scald_atom_presave', $atom); + module_invoke_all('entity_presave', $atom, 'scald_atom'); + + // Put the basic data in the Scald Atom Registry. + if ($op == 'update') { + $written = drupal_write_record('scald_atoms', $atom, array('sid')); + } + else { + $written = drupal_write_record('scald_atoms', $atom); + } + + if (!$written) { + return NULL; + } + + $function = 'field_attach_' . $op; + $function('scald_atom', $atom); + + // Notify all modules of our new atom. + module_invoke_all('scald_atom_' . $op, $atom); + module_invoke_all('entity_' . $op, $atom, 'scald_atom'); + + // Transcoding. + // Only fire hook_register_atom() for Transcoder Providers that might be + // responsible for transcoding this Atom (based on the currently-configured + // Context and Transcoder settings). + $contexts = scald_contexts(); + $transcoders = scald_transcoders(); + + foreach ($contexts as $context => $details) { + if (isset($details['type_format'][$atom->type])) { + $transcoder = $details['type_format'][$atom->type]['transcoder']; + $values['@ccontext'] = $context; + module_invoke($transcoders[$transcoder]['provider'], $hook, $atom, 'transcoder'); + } + } + + // Clear the render cache. + cache_clear_all($atom->sid . ':', 'cache_scald', TRUE); + + // Clear the static caches. + entity_get_controller('scald_atom')->resetCache(array($atom->sid)); + + return $atom; + } +} diff --git a/docroot/sites/all/modules/contrib/scald/includes/scald.admin.inc b/docroot/sites/all/modules/contrib/scald/includes/scald.admin.inc new file mode 100644 index 00000000..b450e158 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/includes/scald.admin.inc @@ -0,0 +1,764 @@ +' . t('This is the Scald administration dashboard. It allows to manage Atom Types (entity bundles) and Representation Contexts (entity view modes). In each context, it is possible to choose which transcoder (for Image atoms, it is image style) is used and how atom is rendered using different players. The context settings is for the atom itself, while "manage display" is to controlled how are fields displayed. If you are strange to the terminology, please read the short README.txt or the long documentation pages.', array('@readme' => 'http://drupalcode.org/project/scald.git/blob/refs/heads/7.x-1.x:/README.txt', '@doc' => 'https://drupal.org/node/1652740')) . '

    '; + drupal_set_message($message); + + $content .= '

    ' . t('Scald Unified Atom Types') . '

    '; + $content .= '

    ' . t('List of Scald Unified Atom Types. Each type is an entity bundle and has different fields, displays and contexts. Multiple providers (e.g. local image provider, Flickr provider) can provide atoms of the same type and share the same transcoders, players.') . '

    '; + + $list = array('type' => 'ul', 'items' => array()); + $table = array( + 'header' => array( + t('Name'), + array( + 'data' => t('Actions'), + 'colspan' => module_exists('i18n_string') ? 5 : 4, + ), + ), + 'rows' => array(), + ); + + foreach ($types as $type) { + $rows = array( + check_plain(scald_type_property_translate($type)), + l(t('edit'), 'admin/structure/scald/' . $type->type), + l(t('manage fields'), 'admin/structure/scald/' . $type->type . '/fields'), + l(t('manage display'), 'admin/structure/scald/' . $type->type . '/display'), + l(t('contexts'), 'admin/structure/scald/' . $type->type . '/contexts'), + ); + // Add a 'translate' action if Internationalization is enabled. + if (module_exists('i18n_string')) { + $rows[] = l(t('translate'), 'admin/structure/scald/' . $type->type . '/translate'); + } + $table['rows'][] = $rows; + } + + $content .= theme('table', $table); + + // Tell the user, he can switch to a new export with Features. + if (!variable_get('scald_switch_feature_export', FALSE) && module_exists('features')) { + $content .= '

    ' . t('Scald Context Features Export') . '

    '; + $switch_form = drupal_get_form('scald_switch_to_feature_form'); + $content .= drupal_render($switch_form); + } + + // Display a context listing. + $content .= '

    ' . t('Scald Contexts') . '

    '; + $content .= '

    ' . t('List of all Scald Contexts, those created through the UI and even those hidden or defined by other modules.') . '

    '; + $content .= ''; + + $list = array('type' => 'ul', 'items' => array()); + $table = array( + 'header' => array( + t('Context name'), + t('Atom type'), + t('Module'), + t('Property'), + t('Actions'), + ), + 'rows' => array(), + ); + + $custom_contexts = variable_get('scald_custom_contexts', array()); + foreach (scald_contexts() as $name => $context) { + $actions = array(); + + // This is a context created through the UI, it could be edit or delete. + if (array_key_exists($name, $custom_contexts)) { + $actions[] = l(t('Edit'), 'admin/structure/scald/context/edit/' . $name); + $actions[] = l(t('Delete'), 'admin/structure/scald/context/delete/' . $name); + } + + $table['rows'][] = array( + check_plain($context['title']) . '
    ' . filter_xss_admin($context['description']) . '
    ', + empty($context['formats']) ? '' . t('not specified') . '' : check_plain(implode(', ', array_keys($context['formats']))), + $context['provider'], + empty($context['hidden']) ? '' : t('hidden'), + implode(' ', $actions), + ); + } + + $content .= theme('table', $table); + + return $content; +} + +/** + * Form for admin settings for Scald Types. + */ +function scald_admin_type_form($form, $form_state, $type) { + $form = array(); + $type_name = $type->type; + $type_raw = (array) $type; + $form['type_' . $type_name . '_title'] = array( + '#type' => 'textfield', + '#title' => t('Title'), + '#default_value' => $type_raw['title'], + '#size' => 40, + '#maxlength' => 255, + '#required' => TRUE, + ); + + $default = scald_atom_defaults($type_name); + + $form['defaults'] = array( + '#type' => 'fieldset', + '#title' => t('Defaults'), + '#description' => t('Every Atom must have certain data associated with it. If an Atom Provider fails to supply that data, these defaults are used. If nothing is specified here, Scald Core will supply generic defaults.'), + '#collapsible' => FALSE, + ); + $form['defaults']['type_' . $type_name . '_thumb'] = array( + '#type' => 'textfield', + '#title' => t('Default Thumbnail Image'), + '#description' => t('Specify a path relative to the Drupal install directory. This image file will be automatically resized and transcoded as appropriate when generating the actual thumbnail image.'), + '#default_value' => $default->thumbnail_source, + '#size' => 40, + '#maxlength' => 255, + '#required' => TRUE, + ); + $form['defaults']['type_' . $type_name . '_descr'] = array( + '#type' => 'textfield', + '#title' => t('Default Description'), + '#description' => t('Empty strings are permitted.'), + '#default_value' => $default->description, + '#size' => 40, + '#maxlength' => 255, + ); + $options = array( + 'managed_file' => t('Managed file'), + ); + if (module_exists('plupload')) { + $options['plupload'] = t('Plupload'); + } + $form['defaults']['type_' . $type_name . '_utype'] = array( + '#type' => 'select', + '#title' => t('Upload type'), + '#default_value' => $default->upload_type, + '#options' => $options + ); + // Create checkboxes for the defined actions. + $actions = scald_actions(); + $options = array(); + $options_default = array(); + foreach ($actions as $name => $action) { + $options[$name] = $action['title']; + $options_default[$name] = $default->actions & $action['bitmask'] ? $name : ''; + } + $form['defaults']['type_' . $type_name . '_actin'] = array( + '#type' => 'checkboxes', + '#title' => t('Default Actions'), + '#description' => t('Please select the actions that should be enabled by default for atom of this type. Note that the actions you choose here are the one that you want to be made available on this atom to everyone ; the actions that the atom author can perform can be configured per role using standard Drupal rights.'), + '#options' => $options, + '#default_value' => $options_default, + '#required' => TRUE, + ); + + $form['atom_type'] = array( + '#type' => 'value', + '#value' => $type_name, + ); + + $form['submit'] = array( + '#type' => 'submit', + '#value' => t('Save'), + ); + + return $form; +} + +/** + * Submit function for admin settings for Scald Types. + * + * Updated values are written directly back to the database and then the Scald + * Configuration Object is rebuilt from the db. + */ +function scald_admin_type_form_submit($form, &$form_state) { + $scald_atom_defaults = variable_get('scald_atom_defaults', array()); + $type = $form_state['values']['atom_type']; + + if (empty($scald_atom_defaults[$type])) { + $scald_atom_defaults[$type] = new stdClass(); + } + + foreach ($form_state['values'] as $key => $value) { + if (drupal_substr($key, 0, 5) == 'type_') { + $setting = substr($key, strlen(_scald_parse_machine_name($key)) + 1); + switch ($setting) { + case 'title': + db_update('scald_types') + ->fields(array('title' => $value)) + ->condition('type', $type) + ->execute(); + break; + + case 'thumb': + $scald_atom_defaults[$type]->thumbnail_source = $value; + break; + + case 'descr': + $scald_atom_defaults[$type]->description = $value; + break; + + case 'utype': + $scald_atom_defaults[$type]->upload_type = $value; + break; + + case 'actin': + $actions = scald_actions(); + $bitmask = 0; + foreach ($actions as $name => $action) { + if (!empty($value[$name])) { + $bitmask |= $action['bitmask']; + } + } + $scald_atom_defaults[$type]->actions = $bitmask; + break; + } + } + } + + drupal_set_message(t('Atom settings changed')); + variable_set('scald_atom_defaults', $scald_atom_defaults); + scald_types(TRUE); +} + +/** + * Form constructor for the context editing form. + * + * @param string $context_name + * (optional) Context name, when editing an existing Scald context. + */ +function scald_admin_context_form($form, &$form_state, $context_name = NULL) { + if ($context_name) { + // Edit an existing Scald context. + $custom_contexts = variable_get('scald_custom_contexts', array()); + if (!array_key_exists($context_name, $custom_contexts)) { + drupal_set_message(t('Custom context not found: %context', array('%context' => $context_name)), 'error'); + drupal_goto('admin/structure/scald'); + } + else { + $context = $custom_contexts[$context_name]; + } + } + else { + // Default setting for the new context. + $context = array( + 'name' => '', + 'title' => '', + 'description' => '', + 'render_language' => 'XHTML', + 'parseable' => TRUE, + 'formats' => array(), + ); + } + + // Make the context array available to implementations of hook_form_alter. + $form['#context'] = $context; + + $form['title'] = array( + '#title' => t('Title'), + '#type' => 'textfield', + '#default_value' => $context['title'], + '#description' => t('The title of this context. This text will be displayed as part of the list on the Scald Dashboard and on the Atom type Contexts pages. It is recommended that this name begin with a capital letter and contain only letters, numbers, and spaces..'), + '#required' => TRUE, + '#size' => 30, + ); + + $form['name'] = array( + '#type' => 'machine_name', + '#default_value' => $context['name'], + '#maxlength' => 32, + '#machine_name' => array( + 'source' => array('title'), + 'exists' => 'scald_context_load', + ), + '#disabled' => $context['name'] ? TRUE : FALSE, + '#description' => t('A unique machine-readable name for this context. It must only contain lowercase letters, numbers, and underscores.'), + ); + + $form['description'] = array( + '#title' => t('Description'), + '#type' => 'textarea', + '#default_value' => $context['description'], + '#description' => t('Describe this context. The text will be displayed on the Scald Dashboard page.'), + ); + + $form['additional_settings'] = array( + '#type' => 'vertical_tabs', + // @todo provide a JavaScript to do Vertical Tabs summary stuffs. + '#attached' => array(), + ); + + $form['system'] = array( + '#type' => 'fieldset', + '#title' => t('System settings'), + '#collapsible' => TRUE, + '#group' => 'additional_settings', + ); + $form['system']['parseable'] = array( + '#type' => 'checkbox', + '#title' => t('Make parseable'), + '#default_value' => (bool) $context['parseable'], + ); + + $form['actions'] = array('#type' => 'actions'); + $form['actions']['submit'] = array( + '#type' => 'submit', + '#value' => $context['name'] ? t('Save context') : t('Add context'), + '#weight' => 40, + ); + + if ($context['name']) { + $form['actions']['delete'] = array( + '#markup' => l(t('Delete context'), 'admin/structure/scald/context/delete/' . $context['name']), + '#weight' => 45, + ); + } + + return $form; +} + +/** + * Form validation handler for scald_admin_context_form(). + */ +function scald_admin_context_form_validate($form, &$form_state) { + // There is still nothing to do here. +} + +/** + * Form submission handler for scald_admin_context_form(). + */ +function scald_admin_context_form_submit($form, &$form_state) { + $op = isset($form_state['values']['op']) ? $form_state['values']['op'] : ''; + + if (!$context = scald_context_load($form_state['values']['name'])) { + $context = array(); + } + + $context = array( + 'name' => $form_state['values']['name'], + 'title' => $form_state['values']['title'], + 'description' => $form_state['values']['description'], + 'render_language' => 'XHTML', + 'parseable' => (bool) $form_state['values']['parseable'], + 'formats' => array(), + ) + $context; + + scald_context_save($context); + cache_clear_all('*', 'cache_scald', TRUE); + cache_clear_all('field_info_types', 'cache_field', TRUE); + field_info_cache_clear(); + + $form_state['redirect'] = 'admin/structure/scald'; +} + +/** + * Context delete confirm form. + */ +function scald_admin_context_confirm_delete_form($form, &$form_state, $context_name) { + // Delete a Scald custom context. + $custom_contexts = variable_get('scald_custom_contexts', array()); + if (!array_key_exists($context_name, $custom_contexts)) { + drupal_set_message(t('Custom context not found: %context', array('%context' => $context_name)), 'error'); + drupal_goto('admin/structure/scald'); + } + + $form['#context'] = $custom_contexts[$context_name]; + + return confirm_form( + $form, + t('Are you sure you want to delete the Scald context %context?', array('%context' => $form['#context']['name'])), + 'admin/structure/scald', + t('Any settings for this context will also be deleted. This action cannot be undone.') + ); +} + +/** + * Process scald_admin_context_confirm_delete_form form submission. + */ +function scald_admin_context_confirm_delete_form_submit($form, &$form_state) { + $context = $form['#context']; + $custom_contexts = variable_get('scald_custom_contexts', array()); + unset($custom_contexts[$context['name']]); + variable_set('scald_custom_contexts', $custom_contexts); + + $config = scald_context_config_load($context['name']); + scald_context_config_delete($config); + + $form_state['redirect'] = 'admin/structure/scald'; +} + +/** + * The Scald Admin page for Scald Atoms. + */ +function scald_admin_atoms() { + $count = db_query("SELECT COUNT(*) FROM {scald_atoms}")->fetchField(); + $content = '

    ' . t('Scald Atoms') . '

    '; + $content .= ''; + $content .= '

    ' . format_plural($count, 'Currently, there is 1 atom registered with Scald Core.', 'Currently, there are @count atoms registered with Scald Core.') . '

    '; + $content .= '

    ' . t('Enable the Views module to get an handy paginated table with filters which will allow you to browse your atoms.') . '

    '; + + return $content; +} + +/** + * The Scald Admin page for Scald Contexts. + */ +function scald_admin_contexts($type) { + $content = '

    ' . t('Scald Rendering Contexts') . '

    '; + $content .= '

    ' . t('Scald Rendering Contexts are something like view modes for Scald atoms. Any atom can be rendered in any supported context and the context determines what that rendering looks like, which player it uses, and what language (XHTML etc.) it is in.') . '

    '; + $content .= '

    ' . t('If a context is parseable, that means that its output is wrapped in HTML comments (currently this feature only works reliably for contexts which have a render language of XHTML) which make it possible for Scald to uniquely identify the atom based on the rendering. For instance, if a WYSIWYG editor is being used in some text areas and Scald atoms should be included in the WYSIWYG preview of the text, a context can be chosen and specified as parseable. That ensures that when the textarea is submitted, Scald will be able to determine which atoms are present in the textarea, convert the rendered versions to Scald Atom Shorthand (SAS).') . '

    '; + + $output[] = array('#markup' => $content); + $output[] = drupal_get_form('scald_admin_contexts_form', $type); + + return $output; +} + +/** + * Form for admin settings for Scald Contexts. + */ +function scald_admin_contexts_form($form, $form_state, $type) { + $form = array(); + + $contexts = scald_contexts(); + $transcoders = scald_transcoders(); + $players = scald_players(); + $transcoder_options = array(); + $player_options = array(); + foreach ($transcoders as $tname => $transcoder) { + $transcoder_options[$tname] = $transcoder['title']; + } + foreach ($players as $player_name => $player) { + if (array_intersect($player['type'], array('*', $type->type))) { + $player_options[$player_name] = $player['name']; + } + } + + foreach ($contexts as $name => $context) { + // Only list visible contexts. + if (!empty($context['hidden'])) { + continue; + } + + $default = !empty($contexts[$name]['type_format'][$type->type]['transcoder']) ? $contexts[$name]['type_format'][$type->type]['transcoder'] : NULL; + $form[$name] = array( + '#type' => 'fieldset', + '#title' => check_plain($context['title']), + '#description' => check_plain($context['description']) . '
    ' . t('Provided by @module.module.', array('@module' => $context['provider'])), + '#collapsible' => TRUE, + '#collapsed' => TRUE, + ); + $form[$name][$name . '_parse'] = array( + '#type' => 'checkbox', + '#title' => t('Make parseable.'), + '#default_value' => (bool) $context['parseable'], + '#disabled' => TRUE, + ); + + $form[$name][$name . '_trans'] = array( + '#type' => 'select', + '#title' => t('Transcoder'), + '#options' => $transcoder_options, + '#default_value' => $default, + ); + + $form[$name][$name . '_playe'] = array( + '#type' => 'select', + '#title' => t('Player'), + '#options' => $player_options, + '#default_value' => isset($context['player'][$type->type]) ? $context['player'][$type->type]['*'] : 'default', + '#ajax' => array( + 'callback' => 'scald_admin_contexts_player_ajax', + 'wrapper' => $name . '-player-settings', + ), + ); + + $current_player = isset($form_state['values'][$name . '_playe']) ? $form_state['values'][$name . '_playe'] : $form[$name][$name . '_playe']['#default_value']; + $form[$name][$name . '_player_settings'] = array( + '#markup' => empty($players[$current_player]['settings']) ? '' : t('Configure the player settings.', array('@url' => url('admin/structure/scald/' . $type->type . '/player/' . $name . '/' . $current_player))), + '#prefix' => '
    ', + '#suffix' => '
    ', + ); + + $context_config = scald_context_config_load($name); + $form[$name][$name . '_dimensions'] = array( + '#type' => 'fieldset', + '#title' => t('Dimensions'), + '#description' => t('Context width and height are used to hint the Scald rendering process to fit into the specified dimensions. While transcoder is about what to be displayed, the dimensions are about how large an atom is displayed. The unit could be omitted: "200px", "80%" or simply "150" etc.'), + ); + $form[$name][$name . '_dimensions'][$name . '_width'] = array( + '#type' => 'textfield', + '#title' => t('Width'), + '#size' => 20, + '#default_value' => isset($context_config->data['width']) ? $context_config->data['width'] : '', + ); + $form[$name][$name . '_dimensions'][$name . '_height'] = array( + '#type' => 'textfield', + '#title' => t('Height'), + '#size' => 20, + '#default_value' => isset($context_config->data['height']) ? $context_config->data['height'] : '', + ); + } + + $form['submit'] = array( + '#type' => 'submit', + '#value' => t('Save'), + ); + + return $form; +} + +/** + * Re-generates the player settings form. + */ +function scald_admin_contexts_player_ajax($form, $form_state) { + $context_name = _scald_parse_machine_name($form_state['triggering_element']['#name']); + return $form[$context_name][$context_name . '_player_settings']; +} + +/** + * Submit handler for Scald Contexts admin settings form. + * + * Updated values are written directly back to the database and then the Scald + * Configuration Object is rebuilt from the db. + */ +function scald_admin_contexts_form_submit($form, &$form_state) { + drupal_set_message(t('Context transcoders settings saved')); + $typename = $form_state['build_info']['args'][0]->type; + $players = scald_players(); + $contexts = scald_contexts(); + + foreach ($form_state['values'] as $key => $value) { + $context = _scald_parse_machine_name($key); + $setting = substr($key, strlen($context) + 1); + if (!isset($contexts[$context])) { + continue; + } + switch ($setting) { + // Handle transcoders submission. + case 'trans': + $transcoder = $value; + $context_config = scald_context_config_load($context); + $context_config->transcoder[$typename]['*'] = $transcoder; + scald_context_config_save($context_config); + break; + + // Handler players submission. + case 'playe': + $context_config = scald_context_config_load($context); + $context_config->player[$typename]['*'] = $value; + // Load and save default settings for the player. + if (empty($context_config->player[$typename]['settings']) && isset($players[$value]['settings'])) { + $context_config->player[$typename]['settings'] = $players[$value]['settings']; + } + scald_context_config_save($context_config); + break; + + case 'width': + $context_config = scald_context_config_load($context); + $context_config->data['width'] = $form_state['values'][$context . '_width']; + $context_config->data['height'] = $form_state['values'][$context . '_height']; + scald_context_config_save($context_config); + break; + } + } + + // The transcoders associated to the contexts might have change. In this case, + // all the output that we keep in the cache is invalid, which means that we'll + // need to regenerate it. + cache_clear_all('*', 'cache_scald', TRUE); +} + +/** + * Generates Scald admin settings form. + */ +function scald_settings_form() { + $form = array(); + $form['intro'] = array( + '#value' => t(" +

    Scald Settings

    +

    Below you'll find some general Scald settings. Beware that some of + them are very useful for debugging, but may completely kill performance. + Use with caution.

    + "), + ); + $form['scald_always_rebuild'] = array( + '#type' => 'checkbox', + '#default_value' => variable_get('scald_always_rebuild', FALSE), + '#title' => t('Always rebuild rendered content'), + '#description' => t("By default, Scald tries to agressively cache the atom's rendered content, by context and by actions available to the user viewing it. Checking this box, Scald will re-render the atom each time. This is a massive performance hit."), + ); + + // Scald tags vocabulary configuration. + $options = array(); + $vocabularies = taxonomy_get_vocabularies(); + foreach ($vocabularies as $vocabulary) { + $options[$vocabulary->machine_name] = $vocabulary->name; + } + $form['scald_tags_vocabulary'] = array( + '#type' => 'select', + '#title' => t('Vocabulary used for tags storing'), + '#description' => t('By default, Scald uses its own vocabulary to store atoms tags, you can override it here.'), + '#options' => $options, + '#default_value' => variable_get('scald_tags_vocabulary', 0), + ); + + // Add our custom submit handler. + $form['#submit'][] = 'scald_settings_form_submit'; + + return system_settings_form($form); +} + +/** + * Returns the machine name from element name. + * + * Element name is built on {machine name}_{setting name} where 'machine name' + * is either type, context machine name or anything else. Historically, the + * 'setting name' is limited to exactly 5 characters for easy parsing. + */ +function _scald_parse_machine_name($element_name) { + $position = strrpos($element_name, '_'); + return substr($element_name, 0, $position); +} + +/** + * Handles the admin settings form submission. + */ +function scald_settings_form_submit($form, &$form_state) { + // Fetch info on the scald_tags taxonomy reference field and changed + // the allowed vocabulary. + $field = field_info_field('scald_tags'); + $field['settings']['allowed_values'][0]['vocabulary'] = $form_state['values']['scald_tags_vocabulary']; + field_update_field($field); +} + +/** + * Player settings form. + */ +function scald_player_settings_form($form, $form_state, $type, $context, $player) { + $contexts = scald_contexts(); + $players = scald_players(); + + // If either the context or the player is missing (for example + // because the module providing it was disabled), return an + // empty form. + if (!isset($contexts[$context]) || !isset($players[$player])) { + return array(); + } + + // If the current player is not the same as the configure player, display a + // notice message. + if (($current_player = $contexts[$context]['player'][$type->type]['*']) != $player) { + drupal_set_message(t('You are configuring the player %player, which is not the current player %current_player.', array('%player' => $player, '%current_player' => $current_player)), 'warning'); + } + + $settings_form = array(); + $function = $players[$player]['provider'] . '_scald_player_settings_form'; + if (function_exists($function)) { + // Handle the default settings. + $player_settings = isset($contexts[$context]['player'][$type->type]['settings']) ? $contexts[$context]['player'][$type->type]['settings'] : array(); + if (isset($players[$player]['settings'])) { + $player_settings += $players[$player]['settings']; + } + + $form['#scald'] = array( + 'type' => $type, + 'context' => $context, + 'player' => $player, + 'player_settings' => $player_settings, + ); + + $settings_form = $function($form, $form_state); + } + + if ($settings_form) { + $form['settings'] = array( + '#type' => 'container', + 'settings' => $settings_form, + 'actions' => array( + '#type' => 'action', + 'save_settings' => array( + '#type' => 'submit', + '#value' => t('Update'), + '#op' => 'update', + ), + ), + ); + } + + return $form; +} + + +/** + * Player settings form submission. + */ +function scald_player_settings_form_submit($form, &$form_state) { + $op = $form_state['triggering_element']['#op']; + if ($op == 'update') { + $scald = $form['#scald']; + $config = scald_context_config_load($scald['context']); + + foreach ($scald['player_settings'] as $key => $value) { + $config->player[$scald['type']->type]['settings'][$key] = $form_state['values'][$key]; + } + scald_context_config_save($config); + cache_clear_all('*', 'cache_scald', TRUE); + + drupal_set_message(t('Your player settings has been updated.')); + } +} + +/** + * Switch to feature form. + */ +function scald_switch_to_feature_form() { + $form = array(); + + $form['text'] = array( + '#markup' => '

    ' . t('You can now export your contexts with Features. This will break existing exports and you will have to review your existing features containing scald contexts.') . '

    ', + ); + + $form['submit'] = array( + '#type' => 'submit', + '#value' => t('Switch to Features Export') + ); + + return $form; +} + + +/** + * Switch to feature form submission. + */ +function scald_switch_to_feature_form_submit($form, &$form_state) { + variable_set('scald_switch_feature_export', TRUE); + cache_clear_all(); + + $message = '

    ' . t('You are now using the new Features export. Please make sure you have checked and recreated the features involved. Cache clear is necessary.') . '

    '; + drupal_set_message($message, 'warning'); + + $form_state['redirect'] = 'admin/structure/scald'; +} diff --git a/docroot/sites/all/modules/contrib/scald/includes/scald.atom.inc b/docroot/sites/all/modules/contrib/scald/includes/scald.atom.inc new file mode 100644 index 00000000..c7f5f284 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/includes/scald.atom.inc @@ -0,0 +1,98 @@ +language; + } + + // Populate $atom->content with a render() array. + scald_atom_build_content($atom, $context, $langcode); + + $build = $atom->content; + // We don't need duplicate rendering info in atom->content. + unset($atom->content); + + $build += array( + '#theme' => 'scald_atom', + ); + + // Allow modules to modify the structured atom. + $type = 'scald_atom'; + drupal_alter(array('scald_atom_view', 'entity_view'), $build, $type); + + return $build; +} + +/** + * Builds a structured array representing the atom's content. + * + * @param ScaldAtom $atom + * Atom to build content. + * @param string $view_mode + * View mode. + * @param string $langcode + * (optional) A langcode to use for rendering. + */ +function scald_atom_build_content($atom, $view_mode = 'full', $langcode = NULL) { + if (!isset($langcode)) { + $langcode = $GLOBALS['language_content']->language; + } + + // Remove previously built content, if exists. + $atom->content = array(); + + // Allow modules to change the view mode. + $atom_by_view_mode = entity_view_mode_prepare('scald_atom', array($atom->sid => $atom), $view_mode, $langcode); + $view_mode = key($atom_by_view_mode); + + // Building content of atom. + field_attach_prepare_view('scald_atom', array($atom->sid => $atom), $view_mode, $langcode); + entity_prepare_view('scald_atom', array($atom->sid => $atom), $langcode); + $atom->content += field_attach_view('scald_atom', $atom, $view_mode, $langcode); + + // If the transcoder provider prepared a 'player', use it. Otherwise, build + // a default representation of the atom. + if (!empty($atom->rendered->player)) { + $atom->content['atom'] = is_array($atom->rendered->player) ? $atom->rendered->player : array('#markup' => $atom->rendered->player); + } + else { + $atom->content['atom'] = array( + '#type' => 'link', + '#href' => 'atom/' . $atom->sid, + '#title' => '', + '#options' => array('html' => TRUE), + ); + } + + // Allow modules to make their own additions to the atom. + module_invoke_all('scald_atom_view', $atom, $view_mode, $langcode); + module_invoke_all('entity_view', $atom, 'scald_atom', $view_mode, $langcode); + + $atom->content += array( + '#entity_type' => 'scald_atom', + '#entity' => $atom, + '#view_mode' => $view_mode, + '#language' => $langcode, + ); +} diff --git a/docroot/sites/all/modules/contrib/scald/includes/scald.constants.inc b/docroot/sites/all/modules/contrib/scald/includes/scald.constants.inc new file mode 100644 index 00000000..04181c7b --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/includes/scald.constants.inc @@ -0,0 +1,76 @@ +.*/sU'); + +// How many users to load and save at a time in order to rebuild Actions +// bitstrings. +define('SCALD_ADMIN_ACTIONS_BATCH_LIMIT', 1); + +// How many users to register as Authors at a time during hook_enable(). +define('SCALD_ENABLE_BATCH_LIMIT', 100); + +/** + * Modules should return this value from hook_scald_atom_access() to allow + * access to an atom. + */ +define('SCALD_ATOM_ACCESS_ALLOW', TRUE); + +/** + * Modules should return this value from hook_scald_atom_access() to deny access + * to an atom. + */ +define('SCALD_ATOM_ACCESS_DENY', FALSE); + +/** + * Modules should return this value from hook_scald_atom_access() to not affect + * atom access. + */ +define('SCALD_ATOM_ACCESS_IGNORE', NULL); + diff --git a/docroot/sites/all/modules/contrib/scald/includes/scald.pages.inc b/docroot/sites/all/modules/contrib/scald/includes/scald.pages.inc new file mode 100644 index 00000000..4ecb58cb --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/includes/scald.pages.inc @@ -0,0 +1,524 @@ +' . t('You have not installed any Scald providers yet. Go to the modules administration page to install a Scald provider.', array('@admin-modules' => url('admin/modules', array('fragment' => 'edit-modules-scald')))) . '

    '; + } + + $content = array(); + + foreach ($types as $name => $type) { + // Skip atom type the user isn't allowed to create. + if (!scald_action_permitted(new ScaldAtom($name), 'create')) { + continue; + } + $content[] = array( + 'title' => scald_type_property_translate($type), + 'href' => 'atom/add/' . $name, + 'localized_options' => array(), + 'description' => '', + 'page_arguments' => serialize(array($name)), + ); + } + return theme('node_add_list', array('content' => $content)); +} + +/** + * Atom add page callback. + */ +function scald_atom_add_page($js, $type, $step = NULL, $atom_id = NULL) { + if ($js) { + ctools_include('modal'); + ctools_include('ajax'); + } + + ctools_include('object-cache'); + ctools_include('wizard'); + + // If we are not currently edit an atom and there is a temporary saved atom, + // reopen it. + $cache = ctools_object_cache_get('scald_atom', 'edit:-1'); + if (!$atom_id && $cache && $cache['atoms'][0]->type === $type->type) { + $atom_id = -1; + $step = 'options'; + } + + $cache_id = isset($atom_id) ? 'edit:' . $atom_id : 'add'; + + // Start by getting the list of all the modules that said they can provide + // this atom type. + $providers = scald_atom_providers_opt(); + $sources = $providers[$type->type]; + $source = key($sources); + $provider = current($sources); + + // If there's more than one, provide a choice between them. Otherwise, skip + // a step and select the only provider upfront. + if (empty($step)) { + if (count($sources) < 2) { + if (!empty($provider['starting_step'])) { + $step = $provider['starting_step']; + } + else { + $step = 'add'; + } + } + else { + $step = 'source'; + } + ctools_object_cache_clear('scald_atom', $cache_id); + } + + $form_state = array( + 'ajax' => $js, + 'scald' => ctools_object_cache_get('scald_atom', $cache_id), + ); + + // Entity Translation workaround when the fix https://drupal.org/node/2027513 + // is not corporated in a stable release. + if (isset($form_state['scald']['atoms'][0])) { + $form_state['atom'] = $form_state['scald']['atoms'][0]; + } + + if (empty($form_state['scald'])) { + $form_state['scald'] = array( + 'type' => $type, + 'source' => isset($source) ? $source : NULL, + 'provider' => $provider, + ); + } + + $form_state['scald']['step'] = $step; + + $form_info = array( + 'id' => 'scald-atom-add', + 'path' => 'atom/add/' . $type->type . '/' . ($js ? 'ajax' : 'nojs') . '/%step', + 'show trail' => TRUE, + 'show back' => FALSE, + 'show cancel' => TRUE, + 'show return' => FALSE, + 'next callback' => 'scald_atom_add_wizard_next', + 'finish callback' => 'scald_atom_add_wizard_finish', + 'cancel callback' => 'scald_atom_add_wizard_cancel', + 'order' => array( + 'source' => t('Source'), + 'add' => t('Add'), + 'options' => t('Options'), + ), + 'forms' => array( + 'source' => array( + 'form id' => 'scald_atom_add_form_source', + ), + 'add' => array( + 'form id' => 'scald_atom_add_form_add', + ), + 'options' => array( + 'form id' => 'scald_atom_add_form_options', + ), + ), + ); + + // Send this all off to our form. This is like drupal_get_form only wizardy. + $form = ctools_wizard_multistep_form($form_info, $step, $form_state); + $output = drupal_render($form); + + // If $output is FALSE, there was no actual form. + if ($js) { + // If javascript is active, we have to use a render array. + $commands = array(); + if ($output === FALSE || !empty($form_state['complete'])) { + // Dismiss the modal. + $commands[] = array('command' => 'dnd_refresh'); + $commands[] = ctools_modal_command_dismiss(); + } + elseif (!empty($form_state['cancel'])) { + // If cancelling, return to the activity. + $commands[] = ctools_modal_command_dismiss(); + } + else { + $commands = ctools_modal_form_render($form_state, $output); + } + print ajax_render($commands); + exit; + } + else { + if ($output === FALSE || !empty($form_state['complete'])) { + $atom = $form_state['scald']['atoms'][0]; + drupal_goto('atom/' . $atom->sid); + } + elseif (!empty($form_state['cancel'])) { + drupal_goto('atom/add'); + } + else { + return $output; + } + } +} + +/** + * Source form. + */ +function scald_atom_add_form_source($form, &$form_state) { + $providers = scald_atom_providers(); + $sources = $providers[$form_state['scald']['type']->type]; + + // Localize the source names. Note that all the strings + // have been marked for extraction in their corresponding + // modules, so this call is safe. + $sources = array_map('t', $sources); + + $form_state['title'] = t('Source'); + $form['source'] = array( + '#title' => t('Source'), + '#type' => 'select', + '#options' => $sources, + '#description' => t('Please choose the source of your new atom'), + ); + + return $form; +} + +/** + * Handles the source step form submission. + */ +function scald_atom_add_form_source_submit(&$form, &$form_state) { + $source = $form_state['scald']['source'] = $form_state['values']['source']; + $type = $form_state['scald']['type']->type; + $providers = scald_atom_providers_opt(); + $provider = $providers[$type][$source]; + $form_state['scald']['provider'] = $provider; + if (isset($form_state['scald']['provider']['starting_step']) && $form_state['scald']['provider']['starting_step'] == 'options') { + $form_state['clicked_button']['#next'] = 'options'; + } +} + +/** + * Add form. + */ +function scald_atom_add_form_add($form, &$form_state) { + $scald = $form_state['scald']; + $function = $scald['source'] . '_scald_add_form'; + if (function_exists($function)) { + $function($form, $form_state); + } + else { + // TODO: Figure out what should be done here. + $form['error'] = array( + '#markup' => 'Import without form; does it makes sense ?', + ); + } + + return $form; +} + +/** + * Handles the add step form submission. + */ +function scald_atom_add_form_add_submit(&$form, &$form_state) { + $scald = $form_state['scald']; + + $count = 1; + $atom_count_implemented = FALSE; + // Allow the source provider to define how many atoms to create + // and handle differences between upload modules. + $function = $scald['source'] . '_scald_add_atom_count'; + if (function_exists($function)) { + $count = $function($form, $form_state); + $atom_count_implemented = TRUE; + } + + for ($delta = 0; $delta < $count; $delta++) { + $atoms[$delta] = new ScaldAtom($scald['type']->type, $scald['source']); + } + + // Allow the source provider to alter it, filling in defaults value. + $function = $scald['source'] . '_scald_add_form_fill'; + if (function_exists($function)) { + if ($atom_count_implemented) { + $function($atoms, $form, $form_state); + } + else { + $function($atoms[0], $form, $form_state); + } + + $context = array( + 'form' => $form, + 'form_state' => $form_state, + ); + drupal_alter('scald_add_form_fill', $atoms, $context); + } + + // And put it in the form_state. + $form_state['scald']['atoms'] = $atoms; +} + +/** + * Options form. + */ +function scald_atom_add_form_options($form, &$form_state) { + if (empty($form_state['scald']['atoms'])) { + scald_atom_add_form_add_submit($form, $form_state); + } + $atoms = $form_state['scald']['atoms']; + + $actions = scald_actions(); + + $form['#entity_type'] = 'scald_atom'; + + foreach ($atoms as $delta => $atom) { + $form['atom' . $delta] = array( + '#prefix' => '
    ', + '#suffix' => '
    ', + '#parents' => array('atom' . $delta), + ); + if (count($atoms) > 1) { + $title = 'atom' . $delta .' : '. $atom->title; + $form['atom' . $delta] += array( + '#title' => $title, + '#type' => 'fieldset', + '#collapsible' => TRUE, + '#collapsed' => FALSE, + ); + } + $form['atom' . $delta]['title'] = array( + '#type' => 'textfield', + '#title' => t('Title'), + '#required' => TRUE, + '#default_value' => $atom->title, + '#parents' => array('atom' . $delta, 'title'), + '#maxlength' => 255, + '#weight' => -10, + ); + $form['language'] = array( + '#type' => 'value', + '#value' => $atom->language, + ); + field_attach_form('scald_atom', $atom, $form['atom' . $delta], $form_state, entity_language('scald_atom', $atom)); + $instances = field_info_instances('scald_atom', $atom->type); + foreach ($instances as $instance) { + $field_name = $instance['field_name']; + $form['atom' . $delta][$field_name]['#parents'] = array('atom' . $delta, $field_name); + } + $options = array(); + $options_default = array(); + foreach ($actions as $name => $action) { + $options[$name] = $action['title']; + $options_default[$name] = $atom->actions & $action['bitmask'] ? $name : ''; + } + $form['atom' . $delta]['scald_actions'] = array( + '#type' => 'checkboxes', + '#title' => t('Openly available actions'), + '#group' => 'additional_settings', + '#options' => $options, + '#default_value' => $options_default, + '#parents' => array('atom' . $delta, 'scald_actions'), + '#access' => user_access('restrict atom access'), + ); + } + + $form['actions']['submit']['#value'] = t('Save'); + + return $form; +} + +/** + * Handles the final atom creation step form submission. + */ +function scald_atom_add_form_options_submit(&$form, &$form_state) { + if (!$atoms = $form_state['scald']['atoms']) { + return; + } + + foreach ($atoms as $delta => $atom) { + if (is_array($form_state['values']['atom' . $delta]['scald_actions'])) { + $bitstream = 0; + $actions = scald_actions(); + foreach ($actions as $name => $action) { + if (!empty($form_state['values']['atom' . $delta]['scald_actions'][$name])) { + $bitstream |= $action['bitmask']; + } + } + $form_state['values']['atom' . $delta]['actions'] = $bitstream; + } + + $op = empty($atom->sid) ? t('created') : t('updated'); + + // Let entity add its properties to the atom. + entity_form_submit_build_entity('scald_atom', $atom, $form['atom' . $delta], $form_state); + $atom->actions = $form_state['values']['atom' . $delta]['actions']; + + // Our form structure is different from standard Entity form because we + // support multiple entities in a single form, so we have to process special + // stuffs here. + // Except when comes the Title module, which is a field and it takes care of + // the sync in title_field_attach_submit() so we don't have to do anything. + if (!(module_exists('title') && title_field_replacement_enabled('scald_atom', $atom->type, 'title'))) { + $atom->title = $form_state['values']['atom' . $delta]['title']; + } + + // Then save it... + scald_atom_save($atom); + } + + // Add a message confirming the creation. + $type = scald_type_property_translate(scald_type_load($atoms[0]->type)); + if (count($atoms) == 1) { + drupal_set_message(t('Atom %title, of type %type has been @op.', array( + '%title' => $atoms[0]->title, + '%type' => $type, + '@op' => $op, + ))); + } + else { + drupal_set_message(t('%count atoms of type %type have been @op.', array( + '%count' => count($atoms), + '%type' => $type, + '@op' => $op, + ))); + } +} + +/** + * Handle the 'next' click on the add/edit pane form wizard. + */ +function scald_atom_add_wizard_next(&$form_state) { + $cache_id = isset($form_state['scald']['atoms'][0]->sid) ? 'edit:' . $form_state['scald']['atoms'][0]->sid : 'add'; + ctools_object_cache_set('scald_atom', $cache_id, $form_state['scald']); +} + +/** + * Handle the 'finish' click on the add/edit pane form wizard. + */ +function scald_atom_add_wizard_finish(&$form_state) { + $form_state['complete'] = TRUE; +} + +/** + * Handle the 'cancel' click on the add/edit pane form wizard. + */ +function scald_atom_add_wizard_cancel(&$form_state) { + $form_state['cancel'] = TRUE; +} + +/** + * Page callback for the view of an atom. + */ +function scald_atom_page_view($atom) { + return scald_render($atom, 'full'); +} + +/** + * Atom edit page callback. + */ +function scald_atom_edit_page($js, $atom) { + // The edit page is nothing else other than the add page, at the Options step. + // We prepare data for this step then send back to the add page. The only + // useful information at this step is the atom itself. + $scald = array( + 'atoms' => array($atom), + ); + $types = scald_types(); + ctools_include('object-cache'); + ctools_object_cache_set('scald_atom', 'edit:' . $atom->sid, $scald); + return scald_atom_add_page($js, $types[$atom->type], 'options', $atom->sid); +} + +/** + * Handles the deletion of an existing atom. + */ +function scald_atom_delete_confirm($form, &$form_state, $atom) { + // Always provide entity id in the same form key as in the entity edit form. + $form['sid'] = array('#type' => 'value', '#value' => $atom->sid); + return confirm_form($form, + t('Are you sure you want to delete %title?', array('%title' => $atom->title)), + 'admin/content/atoms', + t('

    Note that unchecking the Fetch checkbox in the "Openly available actions" field of this atom edit form makes the atom disappear for everyone but Scald administrators, and is usually a better idea.

    This action cannot be undone.

    ', array('!url' => url("atom/{$atom->sid}/edit"))), + t('Delete'), + t('Cancel') + ); +} + +/** + * Handles the deletion of an existing atom in ctools modal. + */ +function scald_atom_delete_confirm_ajax($js, $atom) { + $form = drupal_get_form('scald_atom_delete_confirm', $atom); + if ($js) { + ctools_include('modal'); + ctools_include('ajax'); + $form_state = array(); + $form['actions']['cancel']['#attributes']['class'][] = 'ctools-close-modal'; + $commands = ctools_modal_form_render($form_state, $form); + print ajax_render($commands); + exit; + } + else { + return $form; + } +} + +/** + * Execute atom deletion. + */ +function scald_atom_delete_confirm_submit($form, &$form_state) { + if ($form_state['values']['confirm']) { + $atom = scald_atom_load($form_state['values']['sid']); + scald_atom_delete($atom->sid); + watchdog('scald_atom', '@type: deleted %title.', array('@type' => $atom->type, '%title' => $atom->title)); + $types = scald_types(); + $type = scald_type_property_translate($types[$atom->type]); + drupal_set_message(t('@type %title has been deleted.', array('@type' => $type, '%title' => $atom->title))); + } + if (!empty($form_state['input']['js'])) { + ctools_include('modal'); + ctools_include('ajax'); + $commands = array(); + $commands[] = array('command' => 'dnd_refresh'); + $commands[] = ctools_modal_command_dismiss(); + print ajax_render($commands); + exit(); + } + else { + $form_state['redirect'] = 'admin/content/atoms'; + } +} +/** + * Fetch atoms and return in JSON format. + * + * @param string $sids + * Comma separated list of atom ids. + * + * Other parameters, such as context, could also be passed via the querystring. + */ +function scald_atom_fetch_atoms($sids) { + $output = array(); + $atoms = scald_atom_load_multiple(explode(',', $sids)); + + // Context can be passed via the querystring. + $context = isset($_GET['context']) && array_key_exists($_GET['context'], scald_contexts_public()) ? $_GET['context'] : ''; + + foreach ($atoms as $sid => $atom) { + $output[$sid] = array( + 'sid' => $sid, + 'contexts' => $context ? array($context => scald_render($atom, $context)) : array(), + 'meta' => array( + 'title' => $atom->title, + 'type' => $atom->type, + 'data' => !empty($atom->data) ? $atom->data : array(), + ), + 'actions' => array_keys(scald_atom_actions_available($atom)), + ); + } + drupal_json_output($output); +} diff --git a/docroot/sites/all/modules/contrib/scald/includes/scald.plupload.inc b/docroot/sites/all/modules/contrib/scald/includes/scald.plupload.inc new file mode 100644 index 00000000..28448249 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/includes/scald.plupload.inc @@ -0,0 +1,22 @@ +filemime = file_get_mimetype($target); + $tmp->status = 0; + $destination = dirname($target); + if (!file_prepare_directory($destination, FILE_CREATE_DIRECTORY)) { + watchdog('file', 'The upload directory %directory could not be created or is not accessible.', array('%directory' => $destination)); + return FALSE; + } + return file_move($tmp, $target, FILE_EXISTS_RENAME); +} + diff --git a/docroot/sites/all/modules/contrib/scald/includes/scald.translation_handler.inc b/docroot/sites/all/modules/contrib/scald/includes/scald.translation_handler.inc new file mode 100644 index 00000000..5dc70617 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/includes/scald.translation_handler.inc @@ -0,0 +1,50 @@ +entity, array('fetch', 'view')); + } + + /** + * Changes the editPath when necessary. + */ + public function getEditPath($langcode = NULL) { + $edit_path = parent::getEditPath($langcode); + return str_replace('/%ctools_js', '/nojs', $edit_path); + } + + /** + * Tweaks the product form to support multilingual elements. + */ + public function entityForm(&$form, &$form_state) { + parent::entityForm($form, $form_state); + $translations = $this->getTranslations(); + $is_translation = $this->isTranslationForm(); + $form_langcode = $this->getFormLanguage(); + $new_translation = !isset($translations->data[$form_langcode]); + if ($is_translation && !$new_translation) { + $form['actions']['delete_translation'] = array( + '#type' => 'submit', + '#value' => t('Delete translation'), + '#weight' => 50, + '#submit' => array('entity_translation_entity_form_delete_translation_submit'), + ); + } + } +} diff --git a/docroot/sites/all/modules/contrib/scald/includes/scald.views.inc b/docroot/sites/all/modules/contrib/scald/includes/scald.views.inc new file mode 100644 index 00000000..de8c2db4 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/includes/scald.views.inc @@ -0,0 +1,214 @@ + 'sid', + 'title' => t('Atoms'), + 'help' => t("Views related to Scald Atoms."), + ); + + $data['scald_atoms']['table']['entity type'] = 'scald_atom'; + + $data['scald_atoms']['sid'] = array( + 'title' => t('Scald ID'), + 'help' => t("The atom's unique identifier"), + 'field' => array( + 'handler' => 'views_handler_field', + 'click sortable' => TRUE, + ), + 'sort' => array( + 'handler' => 'views_handler_sort', + ), + 'filter' => array( + 'handler' => 'views_handler_filter_numeric', + ), + 'argument' => array( + 'handler' => 'views_handler_argument_numeric', + ), + ); + + $data['scald_atoms']['representation'] = array( + 'title' => t('Representation'), + 'real field' => 'sid', + 'help' => t("The atom's representation, in a specific context"), + 'field' => array( + 'handler' => 'scald_views_handler_field_representation', + 'click sortable' => FALSE, + ), + ); + + $data['scald_atoms']['provider'] = array( + 'title' => t('Provider'), + 'help' => t('The module responsible of this atom'), + 'field' => array( + 'handler' => 'views_handler_field', + 'click sortable' => TRUE, + ), + 'sort' => array( + 'handler' => 'views_handler_sort', + ), + 'filter' => array( + 'handler' => 'scald_views_handler_filter_atom_provider', + ), + 'argument' => array( + 'handler' => 'views_handler_argument_string', + ), + ); + + $data['scald_atoms']['type'] = array( + 'title' => t('Type'), + 'help' => t('The type of the atom, such as "image", "audio" ...'), + 'field' => array( + 'handler' => 'views_handler_field', + 'click sortable' => TRUE, + ), + 'sort' => array( + 'handler' => 'views_handler_sort', + ), + 'filter' => array( + 'handler' => 'scald_views_handler_filter_atom_type', + ), + 'argument' => array( + 'handler' => 'views_handler_argument_string', + ), + ); + + $data['scald_atoms']['base_id'] = array( + 'title' => t('Base ID'), + 'help' => t('The base id, used by the providing module. For example, for atoms based on node, this could be the nid.'), + 'field' => array( + 'handler' => 'views_handler_field', + 'click sortable' => TRUE, + ), + 'sort' => array( + 'handler' => 'views_handler_sort', + ), + 'filter' => array( + 'handler' => 'views_handler_filter_string', + ), + 'argument' => array( + 'handler' => 'views_handler_argument_string', + ), + ); + + $data['scald_atoms']['publisher'] = array( + 'title' => t('Publisher'), + 'help' => t('Relate an atom to the user who published it.'), + 'relationship' => array( + 'handler' => 'views_handler_relationship', + 'base' => 'users', + 'base field' => 'uid', + 'label' => t('User'), + ), + ); + + $data['scald_atoms']['title'] = array( + 'title' => t('Title'), + 'help' => t("The atom's title"), + 'field' => array( + 'handler' => 'views_handler_field', + 'click sortable' => TRUE, + ), + 'sort' => array( + 'handler' => 'views_handler_sort', + ), + 'filter' => array( + 'handler' => 'views_handler_filter_string', + ), + 'argument' => array( + 'handler' => 'views_handler_argument_string', + ), + ); + + $data['scald_atoms']['actions'] = array( + 'title' => t('Actions'), + 'help' => t("Possible interactions with this atom"), + 'field' => array( + 'handler' => 'scald_views_handler_field_actions', + 'click sortable' => FALSE, + ), + 'filter' => array( + 'handler' => 'scald_views_handler_filter_actions', + ), + ); + + $data['scald_atoms']['data'] = array( + 'title' => t('Data'), + 'help' => t("Free-form data associated to this atom. The content will be atom and provider specific."), + 'field' => array( + 'handler' => 'scald_views_handler_field_data', + 'click sortable' => FALSE, + ), + ); + + $data['scald_atoms']['created'] = array( + 'title' => t('Created date'), + 'help' => t('The date the Atom was created.'), + 'field' => array( + 'handler' => 'views_handler_field_date', + 'click sortable' => TRUE, + ), + 'sort' => array( + 'handler' => 'views_handler_sort_date', + ), + 'filter' => array( + 'handler' => 'views_handler_filter_date', + ), + ); + + $data['scald_atoms']['changed'] = array( + 'title' => t('Updated date'), + 'help' => t('The date the Atom was last updated.'), + 'field' => array( + 'handler' => 'views_handler_field_date', + 'click sortable' => TRUE, + ), + 'sort' => array( + 'handler' => 'views_handler_sort_date', + ), + 'filter' => array( + 'handler' => 'views_handler_filter_date', + ), + ); + + return $data; +} + +/** + * Implements hook_views_handlers(). + */ +function scald_views_handlers() { + return array( + 'info' => array( + 'path' => drupal_get_path('module', 'scald') . '/includes', + ), + 'handlers' => array( + 'scald_views_handler_filter_atom_type' => array( + 'parent' => 'views_handler_filter_in_operator', + ), + 'scald_views_handler_filter_atom_provider' => array( + 'parent' => 'views_handler_filter_in_operator', + ), + 'scald_views_handler_filter_actions' => array( + 'parent' => 'views_handler_filter', + ), + 'scald_views_handler_field_representation' => array( + 'parent' => 'views_handler_field', + ), + 'scald_views_handler_field_actions' => array( + 'parent' => 'views_handler_field', + ), + ), + ); +} diff --git a/docroot/sites/all/modules/contrib/scald/includes/scald.views_default.inc b/docroot/sites/all/modules/contrib/scald/includes/scald.views_default.inc new file mode 100644 index 00000000..628b5640 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/includes/scald.views_default.inc @@ -0,0 +1,304 @@ +name = 'scald_atoms'; + $view->description = 'Atoms listing view provided by Scald to access atoms.'; + $view->tag = ''; + $view->base_table = 'scald_atoms'; + $view->human_name = ''; + $view->core = 0; + $view->api_version = '3.0'; + $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */ + + /* Display: Master */ + $handler = $view->new_display('default', 'Master', 'default'); + $handler->display->display_options['title'] = 'Atoms Library'; + $handler->display->display_options['use_ajax'] = TRUE; + $handler->display->display_options['use_more_always'] = FALSE; + $handler->display->display_options['access']['type'] = 'perm'; + $handler->display->display_options['access']['perm'] = 'administer scald atoms'; + $handler->display->display_options['cache']['type'] = 'none'; + $handler->display->display_options['query']['type'] = 'views_query'; + $handler->display->display_options['query']['options']['query_comment'] = FALSE; + $handler->display->display_options['exposed_form']['type'] = 'basic'; + $handler->display->display_options['pager']['type'] = 'mini'; + $handler->display->display_options['style_plugin'] = 'table'; + $handler->display->display_options['style_options']['columns'] = array( + 'sid' => 'sid', + 'type' => 'type', + 'provider' => 'provider', + 'base_id' => 'base_id', + 'title' => 'title', + 'name' => 'name', + 'representation' => 'representation', + ); + $handler->display->display_options['style_options']['default'] = '-1'; + $handler->display->display_options['style_options']['info'] = array( + 'sid' => array( + 'sortable' => 1, + 'default_sort_order' => 'asc', + 'align' => '', + 'separator' => '', + 'empty_column' => 0, + ), + 'type' => array( + 'sortable' => 1, + 'default_sort_order' => 'asc', + 'align' => '', + 'separator' => '', + 'empty_column' => 0, + ), + 'provider' => array( + 'sortable' => 1, + 'default_sort_order' => 'asc', + 'align' => '', + 'separator' => '', + 'empty_column' => 0, + ), + 'base_id' => array( + 'sortable' => 1, + 'default_sort_order' => 'asc', + 'align' => '', + 'separator' => '', + 'empty_column' => 0, + ), + 'title' => array( + 'sortable' => 1, + 'default_sort_order' => 'asc', + 'align' => '', + 'separator' => '', + 'empty_column' => 0, + ), + 'name' => array( + 'sortable' => 1, + 'default_sort_order' => 'asc', + 'align' => '', + 'separator' => '', + 'empty_column' => 0, + ), + 'representation' => array( + 'align' => '', + 'separator' => '', + 'empty_column' => 0, + ), + ); + /* No results behavior: Global: Text area */ + $handler->display->display_options['empty']['text']['id'] = 'text'; + $handler->display->display_options['empty']['text']['table'] = 'views'; + $handler->display->display_options['empty']['text']['field'] = 'area'; + $handler->display->display_options['empty']['text']['content'] = 'No atom found.'; + $handler->display->display_options['empty']['text']['format'] = 'plain_text'; + /* Relationship: Atom: Publisher */ + $handler->display->display_options['relationships']['publisher']['id'] = 'publisher'; + $handler->display->display_options['relationships']['publisher']['table'] = 'scald_atoms'; + $handler->display->display_options['relationships']['publisher']['field'] = 'publisher'; + $handler->display->display_options['relationships']['publisher']['label'] = 'Publisher'; + /* Field: Atom: Scald ID */ + $handler->display->display_options['fields']['sid']['id'] = 'sid'; + $handler->display->display_options['fields']['sid']['table'] = 'scald_atoms'; + $handler->display->display_options['fields']['sid']['field'] = 'sid'; + $handler->display->display_options['fields']['sid']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['sid']['separator'] = ''; + /* Field: Atom: Type */ + $handler->display->display_options['fields']['type']['id'] = 'type'; + $handler->display->display_options['fields']['type']['table'] = 'scald_atoms'; + $handler->display->display_options['fields']['type']['field'] = 'type'; + $handler->display->display_options['fields']['type']['element_label_colon'] = FALSE; + /* Field: Atom: Provider */ + $handler->display->display_options['fields']['provider']['id'] = 'provider'; + $handler->display->display_options['fields']['provider']['table'] = 'scald_atoms'; + $handler->display->display_options['fields']['provider']['field'] = 'provider'; + $handler->display->display_options['fields']['provider']['element_label_colon'] = FALSE; + /* Field: Atom: Base ID */ + $handler->display->display_options['fields']['base_id']['id'] = 'base_id'; + $handler->display->display_options['fields']['base_id']['table'] = 'scald_atoms'; + $handler->display->display_options['fields']['base_id']['field'] = 'base_id'; + $handler->display->display_options['fields']['base_id']['element_label_colon'] = FALSE; + /* Field: Atom: Title */ + $handler->display->display_options['fields']['title']['id'] = 'title'; + $handler->display->display_options['fields']['title']['table'] = 'scald_atoms'; + $handler->display->display_options['fields']['title']['field'] = 'title'; + $handler->display->display_options['fields']['title']['element_label_colon'] = FALSE; + /* Field: User: Name */ + $handler->display->display_options['fields']['name']['id'] = 'name'; + $handler->display->display_options['fields']['name']['table'] = 'users'; + $handler->display->display_options['fields']['name']['field'] = 'name'; + $handler->display->display_options['fields']['name']['relationship'] = 'publisher'; + $handler->display->display_options['fields']['name']['label'] = 'Publisher'; + $handler->display->display_options['fields']['name']['element_label_colon'] = FALSE; + /* Field: Atom: Representation */ + $handler->display->display_options['fields']['representation']['id'] = 'representation'; + $handler->display->display_options['fields']['representation']['table'] = 'scald_atoms'; + $handler->display->display_options['fields']['representation']['field'] = 'representation'; + $handler->display->display_options['fields']['representation']['element_label_colon'] = FALSE; + /* Sort criterion: Atom: Scald ID */ + $handler->display->display_options['sorts']['sid']['id'] = 'sid'; + $handler->display->display_options['sorts']['sid']['table'] = 'scald_atoms'; + $handler->display->display_options['sorts']['sid']['field'] = 'sid'; + $handler->display->display_options['sorts']['sid']['order'] = 'DESC'; + /* Filter criterion: Atom: Title */ + $handler->display->display_options['filters']['title']['id'] = 'title'; + $handler->display->display_options['filters']['title']['table'] = 'scald_atoms'; + $handler->display->display_options['filters']['title']['field'] = 'title'; + $handler->display->display_options['filters']['title']['operator'] = 'contains'; + $handler->display->display_options['filters']['title']['group'] = 1; + $handler->display->display_options['filters']['title']['exposed'] = TRUE; + $handler->display->display_options['filters']['title']['expose']['operator_id'] = 'title_op'; + $handler->display->display_options['filters']['title']['expose']['label'] = 'Title'; + $handler->display->display_options['filters']['title']['expose']['operator'] = 'title_op'; + $handler->display->display_options['filters']['title']['expose']['identifier'] = 'title'; + $handler->display->display_options['filters']['title']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + ); + $handler->display->display_options['filters']['title']['group_info']['label'] = 'Title'; + $handler->display->display_options['filters']['title']['group_info']['identifier'] = 'title'; + $handler->display->display_options['filters']['title']['group_info']['remember'] = FALSE; + $handler->display->display_options['filters']['title']['group_info']['group_items'] = array( + 1 => array(), + 2 => array(), + 3 => array(), + ); + /* Filter criterion: User: Name */ + $handler->display->display_options['filters']['uid']['id'] = 'uid'; + $handler->display->display_options['filters']['uid']['table'] = 'users'; + $handler->display->display_options['filters']['uid']['field'] = 'uid'; + $handler->display->display_options['filters']['uid']['relationship'] = 'publisher'; + $handler->display->display_options['filters']['uid']['value'] = ''; + $handler->display->display_options['filters']['uid']['group'] = 1; + $handler->display->display_options['filters']['uid']['exposed'] = TRUE; + $handler->display->display_options['filters']['uid']['expose']['operator_id'] = 'uid_op'; + $handler->display->display_options['filters']['uid']['expose']['label'] = 'Publishers'; + $handler->display->display_options['filters']['uid']['expose']['operator'] = 'uid_op'; + $handler->display->display_options['filters']['uid']['expose']['identifier'] = 'uid'; + $handler->display->display_options['filters']['uid']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + ); + /* Filter criterion: Atoms: Authors (scald_authors) */ + $handler->display->display_options['filters']['scald_authors_tid']['id'] = 'scald_authors_tid'; + $handler->display->display_options['filters']['scald_authors_tid']['table'] = 'field_data_scald_authors'; + $handler->display->display_options['filters']['scald_authors_tid']['field'] = 'scald_authors_tid'; + $handler->display->display_options['filters']['scald_authors_tid']['value'] = ''; + $handler->display->display_options['filters']['scald_authors_tid']['group'] = 1; + $handler->display->display_options['filters']['scald_authors_tid']['exposed'] = TRUE; + $handler->display->display_options['filters']['scald_authors_tid']['expose']['operator_id'] = 'scald_authors_tid_op'; + $handler->display->display_options['filters']['scald_authors_tid']['expose']['label'] = 'Authors'; + $handler->display->display_options['filters']['scald_authors_tid']['expose']['operator'] = 'scald_authors_tid_op'; + $handler->display->display_options['filters']['scald_authors_tid']['expose']['identifier'] = 'scald_authors_tid'; + $handler->display->display_options['filters']['scald_authors_tid']['vocabulary'] = 'scald_authors'; + /* Filter criterion: Atom: Type */ + $handler->display->display_options['filters']['type']['id'] = 'type'; + $handler->display->display_options['filters']['type']['table'] = 'scald_atoms'; + $handler->display->display_options['filters']['type']['field'] = 'type'; + $handler->display->display_options['filters']['type']['group'] = 1; + $handler->display->display_options['filters']['type']['exposed'] = TRUE; + $handler->display->display_options['filters']['type']['expose']['operator_id'] = 'type_op'; + $handler->display->display_options['filters']['type']['expose']['label'] = 'Types'; + $handler->display->display_options['filters']['type']['expose']['operator'] = 'type_op'; + $handler->display->display_options['filters']['type']['expose']['identifier'] = 'type'; + $handler->display->display_options['filters']['type']['expose']['multiple'] = TRUE; + $handler->display->display_options['filters']['type']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + ); + /* Filter criterion: Atom: Provider */ + $handler->display->display_options['filters']['provider']['id'] = 'provider'; + $handler->display->display_options['filters']['provider']['table'] = 'scald_atoms'; + $handler->display->display_options['filters']['provider']['field'] = 'provider'; + $handler->display->display_options['filters']['provider']['group'] = 1; + $handler->display->display_options['filters']['provider']['exposed'] = TRUE; + $handler->display->display_options['filters']['provider']['expose']['operator_id'] = 'provider_op'; + $handler->display->display_options['filters']['provider']['expose']['label'] = 'Providers'; + $handler->display->display_options['filters']['provider']['expose']['operator'] = 'provider_op'; + $handler->display->display_options['filters']['provider']['expose']['identifier'] = 'provider'; + $handler->display->display_options['filters']['provider']['expose']['multiple'] = TRUE; + $handler->display->display_options['filters']['provider']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + ); + /* Filter criterion: Atoms: Tags (scald_tags) */ + $handler->display->display_options['filters']['scald_tags_tid']['id'] = 'scald_tags_tid'; + $handler->display->display_options['filters']['scald_tags_tid']['table'] = 'field_data_scald_tags'; + $handler->display->display_options['filters']['scald_tags_tid']['field'] = 'scald_tags_tid'; + $handler->display->display_options['filters']['scald_tags_tid']['value'] = ''; + $handler->display->display_options['filters']['scald_tags_tid']['group'] = 1; + $handler->display->display_options['filters']['scald_tags_tid']['exposed'] = TRUE; + $handler->display->display_options['filters']['scald_tags_tid']['expose']['operator_id'] = 'scald_tags_tid_op'; + $handler->display->display_options['filters']['scald_tags_tid']['expose']['label'] = 'Tags'; + $handler->display->display_options['filters']['scald_tags_tid']['expose']['operator'] = 'scald_tags_tid_op'; + $handler->display->display_options['filters']['scald_tags_tid']['expose']['identifier'] = 'scald_tags_tid'; + $handler->display->display_options['filters']['scald_tags_tid']['vocabulary'] = 'scald_tags'; + /* Filter criterion: Atom: Actions */ + $handler->display->display_options['filters']['actions']['id'] = 'actions'; + $handler->display->display_options['filters']['actions']['table'] = 'scald_atoms'; + $handler->display->display_options['filters']['actions']['field'] = 'actions'; + $handler->display->display_options['filters']['actions']['operator'] = '&'; + $handler->display->display_options['filters']['actions']['value'] = array( + 'fetch' => 'fetch', + 'view' => 'view', + ); + $handler->display->display_options['filters']['actions']['group'] = 1; + $handler->display->display_options['filters']['actions']['expose']['operator'] = FALSE; + + /* Display: Page */ + $handler = $view->new_display('page', 'Page', 'page_1'); + $handler->display->display_options['defaults']['header'] = FALSE; + /* Header: Global: Text area */ + $handler->display->display_options['header']['area']['id'] = 'area'; + $handler->display->display_options['header']['area']['table'] = 'views'; + $handler->display->display_options['header']['area']['field'] = 'area'; + $handler->display->display_options['header']['area']['empty'] = TRUE; + $handler->display->display_options['header']['area']['content'] = ''; + $handler->display->display_options['header']['area']['format'] = 'filtered_html'; + $handler->display->display_options['path'] = 'admin/content/atoms'; + $handler->display->display_options['menu']['type'] = 'tab'; + $handler->display->display_options['menu']['title'] = 'Atoms'; + $handler->display->display_options['menu']['weight'] = '-60'; + $translatables['scald_atoms'] = array( + t('Master'), + t('Atoms Library'), + t('more'), + t('Apply'), + t('Reset'), + t('Sort by'), + t('Asc'), + t('Desc'), + t('Items per page'), + t('- All -'), + t('Offset'), + t('« first'), + t('‹ previous'), + t('next ›'), + t('last »'), + t('No atom found.'), + t('Publisher'), + t('Scald ID'), + t('Type'), + t('Provider'), + t('Base ID'), + t('Title'), + t('Representation'), + t('Publishers'), + t('Authors'), + t('Types'), + t('Providers'), + t('Tags'), + t('Page'), + t('Add atom'), + ); + + $views[$view->name] = $view; + return $views; +} diff --git a/docroot/sites/all/modules/contrib/scald/includes/scald_views_handler_field_actions.inc b/docroot/sites/all/modules/contrib/scald/includes/scald_views_handler_field_actions.inc new file mode 100644 index 00000000..beebc60e --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/includes/scald_views_handler_field_actions.inc @@ -0,0 +1,47 @@ + TRUE); + return $options; + } + + function options_form(&$form, &$form_state) { + parent::options_form($form, $form_state); + + $form['end_user_links'] = array( + '#type' => 'checkbox', + '#title' => t('Display links for end users'), + '#description' => t('If this is checked, a list of action links targeted towards end users is shown. If this is unchecked, then the raw labels of the actions checked on the atom will be displayed instead.'), + '#default_value' => $this->options['end_user_links'], + ); + } + + /** + * Renders the atom according in the context specified in the option form. + */ + function render($values) { + $atom = scald_fetch($values->sid); + if ($this->options['end_user_links']) { + $links = scald_atom_user_build_actions_links($atom, drupal_get_destination()); + } + else { + $links = array(); + foreach (scald_actions() as $action) { + if ($atom->actions & $action['bitmask']) { + $links[] = array('title' => $action['title']); + } + } + } + $content = array( + '#theme' => 'links', + '#links' => $links, + '#attributes' => array('class' => array('links', 'inline')), + ); + return $content; + } +} diff --git a/docroot/sites/all/modules/contrib/scald/includes/scald_views_handler_field_data.inc b/docroot/sites/all/modules/contrib/scald/includes/scald_views_handler_field_data.inc new file mode 100644 index 00000000..936f7008 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/includes/scald_views_handler_field_data.inc @@ -0,0 +1,54 @@ + ''); + $options['plain'] = array('default' => TRUE); + + return $options; + } + + /** + * Overrides views_handler_field::options_form(). + */ + public function options_form(&$form, &$form_state) { + $form['data_key'] = array( + '#type' => 'textfield', + '#title' => t('Data key'), + '#default_value' => $this->options['data_key'], + '#description' => t('Specify the key of the data that should be displayed. This is atom type and provider specific.'), + ); + + $form['plain'] = array( + '#type' => 'checkbox', + '#title' => t('Sanitize output'), + '#default_value' => $this->options['plain'], + '#description' => t('Specify if the output should be sanitized to prevent injection.'), + ); + + parent::options_form($form, $form_state); + } + + /** + * Overrides views_handler_field::render(). + */ + function render($values) { + $data = unserialize($values->{$this->field_alias}); + $content = NULL; + if (!empty($data[$this->options['data_key']])) { + $output = (string) $data[$this->options['data_key']]; + $content = array( + '#markup' => $this->options['plain'] ? check_plain($output) : $output, + ); + } + return $content; + } +} diff --git a/docroot/sites/all/modules/contrib/scald/includes/scald_views_handler_field_representation.inc b/docroot/sites/all/modules/contrib/scald/includes/scald_views_handler_field_representation.inc new file mode 100644 index 00000000..fc763d3b --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/includes/scald_views_handler_field_representation.inc @@ -0,0 +1,44 @@ +{$this->field_alias}; + return scald_render($sid, $this->options['context']); + } + + /** + * Add a default context to the option definition. + */ + function option_definition() { + $options = parent::option_definition(); + $options['context'] = array('default' => 'sdl_library_item'); + return $options; + } + + /** + * Allow to choose in which context the atom should be rendered. + */ + function options_form(&$form, &$form_state) { + parent::options_form($form, $form_state); + + $options = array(); + $contexts = scald_contexts_public(); + foreach ($contexts as $name => $context) { + $options[$name] = $context['title']; + } + $form['context'] = array( + '#type' => 'select', + '#title' => t('Context'), + '#default_value' => $this->options['context'], + '#description' => t('The context in which the atom should be rendered.'), + '#options' => $options, + ); + } +} diff --git a/docroot/sites/all/modules/contrib/scald/includes/scald_views_handler_filter_actions.inc b/docroot/sites/all/modules/contrib/scald/includes/scald_views_handler_filter_actions.inc new file mode 100644 index 00000000..12a0bf81 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/includes/scald_views_handler_filter_actions.inc @@ -0,0 +1,122 @@ + array( + 'title' => t('Is all of'), + 'short' => t('is'), + ), + 'in' => array( + 'title' => t('Is one of'), + 'short' => t('in'), + ), + 'not in' => array( + 'title' => t('Is not one of'), + 'short' => t('not in'), + ), + ); + + return $operators; + } + + function operator_options($which = 'title') { + $options = array(); + foreach ($this->operators() as $id => $info) { + $options[$id] = $info[$which]; + } + + return $options; + } + + /** + * Overrides value_form. + * + * Provides checkboxes for the defined actions. + */ + public function value_form(&$form, &$form_state) { + $old_default = !is_array($this->options['value']); + $defaults = $old_default ? array() : $this->options['value']; + foreach (scald_actions() as $slug => $action) { + $options[$slug] = $action['title']; + if ($old_default) { + $defaults[$slug] = ($this->options['value'] & $action['bitmask']) ? $slug : ''; + } + } + // And now, we just need to add our select item with the values + // we've prepared above. + $form['value'] = array( + '#title' => t('Actions'), + '#type' => 'checkboxes', + '#options' => $options, + '#default_value' => $defaults, + ); + } + + /** + * Overrides query. + * + * Change the operator before querying. + */ + public function query() { + if (is_array($this->value)) { + $values = drupal_map_assoc($this->value); + $bitmask = 0; + $actions = scald_actions(); + foreach ($actions as $name => $action) { + if (!empty($values[$name])) { + $bitmask |= $action['bitmask']; + } + } + } + else { + $bitmask = $this->value; + } + + switch ($this->operator) { + case '&': + $this->operator = ' & ' . $bitmask . ' = '; + $this->value = $bitmask; + break; + case 'in': + $this->operator = ' & ' . $bitmask . ' >'; + $this->value = 0; + break; + case 'not in': + $this->operator = ' & ' . $bitmask . ' = '; + $this->value = 0; + break; + } + + parent::query(); + } + + /** + * Overrides admin_summary. + * + * Display user friendly label. + */ + public function admin_summary() { + $actions = scald_actions(); + $names = array(); + foreach ($actions as $name => $action) { + if (!empty($this->options['value'][$name])) { + $names[] = $action['title']; + } + } + return implode(',', $names); + } +} diff --git a/docroot/sites/all/modules/contrib/scald/includes/scald_views_handler_filter_atom_provider.inc b/docroot/sites/all/modules/contrib/scald/includes/scald_views_handler_filter_atom_provider.inc new file mode 100644 index 00000000..ea72e7e2 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/includes/scald_views_handler_filter_atom_provider.inc @@ -0,0 +1,23 @@ +value_options)) { + $this->value_title = t('Atom provider'); + $providers = array(); + $types = scald_atom_providers(); + foreach ($types as $type_name => $type_providers) { + $providers = array_merge($providers, $type_providers); + } + + $this->value_options = $providers; + } + } +} diff --git a/docroot/sites/all/modules/contrib/scald/includes/scald_views_handler_filter_atom_type.inc b/docroot/sites/all/modules/contrib/scald/includes/scald_views_handler_filter_atom_type.inc new file mode 100644 index 00000000..605d9cd3 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/includes/scald_views_handler_filter_atom_type.inc @@ -0,0 +1,22 @@ +value_options)) { + $this->value_title = t('Atom type'); + $types = scald_types(); + $options = array(); + foreach ($types as $type => $info) { + $options[$type] = t($info->title); + } + $this->value_options = $options; + } + } +} diff --git a/docroot/sites/all/modules/contrib/scald/modules/fields/atom_reference/atom_reference.css b/docroot/sites/all/modules/contrib/scald/modules/fields/atom_reference/atom_reference.css new file mode 100644 index 00000000..90242757 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/fields/atom_reference/atom_reference.css @@ -0,0 +1,14 @@ +/** + * @file + * Provides some basic style to make the drag & drop more usable. + */ + +.atom_reference_drop_zone { + border: #ccc 2px dashed; + padding: 2px; +} + +.atom_reference_operations .buttons ul { + margin: 0; + padding: 0; +} diff --git a/docroot/sites/all/modules/contrib/scald/modules/fields/atom_reference/atom_reference.info b/docroot/sites/all/modules/contrib/scald/modules/fields/atom_reference/atom_reference.info new file mode 100644 index 00000000..7c8e17ea --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/fields/atom_reference/atom_reference.info @@ -0,0 +1,19 @@ +name = Atom Reference +package = Scald +core = 7.x + +dependencies[] = field +dependencies[] = scald +dependencies[] = dnd + +files[] = atom_reference.test +; Migrate handler +files[] = atom_reference.migrate.inc + + +; Information added by Drupal.org packaging script on 2016-04-15 +version = "7.x-1.8" +core = "7.x" +project = "scald" +datestamp = "1460730556" + diff --git a/docroot/sites/all/modules/contrib/scald/modules/fields/atom_reference/atom_reference.install b/docroot/sites/all/modules/contrib/scald/modules/fields/atom_reference/atom_reference.install new file mode 100644 index 00000000..fd460656 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/fields/atom_reference/atom_reference.install @@ -0,0 +1,65 @@ + array( + 'sid' => array( + 'type' => 'int', + 'unsigned' => TRUE, + 'not null' => FALSE, + ), + 'options' => array( + 'description' => 'An options set for rendering the referenced atom.', + 'type' => 'blob', + 'length' => 'big', + 'not null' => FALSE, + 'serialize' => TRUE, + 'object default' => array(), + 'initial' => serialize(array()), + ), + ), + 'indexes' => array( + 'sid' => array('sid'), + ), + ); +} + +/** + * Add the {atom_reference}.options column. + * + */ +function atom_reference_update_7001() { + $new_field = array( + 'description' => 'An options set for rendering the referenced atom.', + 'type' => 'blob', + 'length' => 'big', + 'not null' => FALSE, + 'serialize' => TRUE, + 'object default' => array(), + 'initial' => serialize(array()), + ); + + $fields = field_read_fields(array( + 'module' => 'atom_reference', + 'deleted' => 0, + )); + + foreach ($fields as $field) { + $tables = array( + _field_sql_storage_tablename($field), + _field_sql_storage_revision_tablename($field), + ); + foreach ($tables as $table) { + if (!db_field_exists($table, $field['field_name'] . '_options')) { + db_add_field($table, $field['field_name'] . '_options', $new_field); + } + } + } +} diff --git a/docroot/sites/all/modules/contrib/scald/modules/fields/atom_reference/atom_reference.js b/docroot/sites/all/modules/contrib/scald/modules/fields/atom_reference/atom_reference.js new file mode 100644 index 00000000..cd30a9ab --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/fields/atom_reference/atom_reference.js @@ -0,0 +1,246 @@ +/** + * @file + * Provides the JavaScript behaviors for the Atom Reference field. + */ +(function($) { + + var $edit_link_model = $('') + .html(Drupal.t('Edit')) + .addClass('ctools-use-modal ctools-modal-custom-style atom-reference-edit'); + var $view_link_model = $('') + .html(Drupal.t('View')) + .addClass('atom-reference-view'); + +Drupal.behaviors.atom_reference = { + attach: function(context, settings) { + var this_behavior_attach = this; + + // Record if the edit target link modal frame is updated + $('.ctools-modal-content form', context).bind('formUpdated', function() { + this_behavior_attach['update_atom_reference_drop_zone'] = true; + }); + + // Update drop zone (especially when returning from the edit modal frame). + if (typeof(this.update_atom_reference_drop_zone) !== 'undefined') { + this.update_atom_reference_drop_zone = undefined; + $('div.atom_reference_drop_zone.atom_reference_processed', context).each(function() { + var $this = $(this); + var rendering_context = $this.attr('data-rendering-context'); + var match_atom_id = //g.exec($this.html()); + if (match_atom_id) { + var atom_id = match_atom_id[1]; + delete Drupal.dnd.Atoms[atom_id].contexts[rendering_context]; // to force reload + Drupal.dnd.fetchAtom(rendering_context, atom_id, function() { + Drupal.detachBehaviors($this); + $this + .empty() + .append(Drupal.dnd.Atoms[atom_id].contexts[rendering_context]); + Drupal.attachBehaviors($this); + }); + } + }); + } + + $("div.atom_reference_drop_zone:not(.atom_reference_processed)", context).each(function() { + var $this = $(this); + var $context = $this.closest('div.form-item').parent().find('.context-select').closest('div.form-item'); + + // Build operations (remove reference, edit and view) structure. + var $operation_wrapper = $('
    '); + var $operation_buttons = $('
    ') + .append('') + .append('
    ') + .prependTo($operation_wrapper); + + // Add the remove link + $('') + .html(Drupal.t('Remove')) + .click(function(e) { + e.preventDefault(); + var $formItem = $operation_buttons.closest('div.form-item'); + $formItem + .find('input:text') + .val('') + .change(); + var $dropZone = $formItem.find('div.atom_reference_drop_zone'); + Drupal.detachBehaviors($dropZone.children()); + $dropZone + .empty() + .append(Drupal.t('Drop a resource from Scald media library here.')); + $formItem.find('div.atom_reference_operations') + .hide(); + atomReferenceSetContext($context, 0); + }) + .appendTo($operation_buttons.find('li.remove')); + + var match_atom_id = //g.exec($this.html()); + if (match_atom_id) { + var atom_id = match_atom_id[1]; + + Drupal.dnd.fetchAtom('', atom_id, function() { + + // Add the edit link + if ($.grep(Drupal.dnd.Atoms[atom_id].actions, function(e){ return e == 'edit'; }).length > 0) { + // Permission granted for edit + + $edit_link_model.clone() + .attr('href', settings.basePath + settings.pathPrefix + 'atom/' + atom_id + '/edit/nojs') + .appendTo($operation_buttons.find('li.edit')); + Drupal.behaviors.ZZCToolsModal.attach($operation_buttons); + $operation_buttons.addClass('ctools-dropbutton'); + } + + // Add the view link + if ($.grep(Drupal.dnd.Atoms[atom_id].actions, function(e){ return e == 'view'; }).length > 0) { + // Permission granted for view + + $view_link_model.clone() + .attr('href', settings.basePath + settings.pathPrefix + 'atom/' + atom_id) + .appendTo($operation_buttons.find('li.view')); + $operation_buttons.addClass('ctools-dropbutton'); + } + + Drupal.attachBehaviors($operation_buttons); + atomReferenceSetContext($context, atom_id); + }); + } + else { + atomReferenceSetContext($context, 0); + } + + // If the element doesn't have a value yet, hide the operations wrapper + // by default + if (!$this.closest('div.form-item').find('input:text').val()) { + $operation_wrapper.css('display', 'none'); + } + $this + .addClass('atom_reference_processed') + .bind('dragover', function(e) {e.preventDefault();}) + .bind('dragenter', function(e) {e.preventDefault();}) + .bind('drop', function(e) { + if (!Drupal.dnd.currentAtom) { + // Not an atom drop. + return; + } + var resource_id = Drupal.dnd.sas2array(Drupal.dnd.currentAtom).sid; + var ret = Drupal.atom_reference.droppable(resource_id, this); + var $this = $(this); + + if (ret.found && ret.keepgoing) { + var rendering_context = $this.attr('data-rendering-context'); + + // Display and set id of dropped atom + Drupal.dnd.fetchAtom(rendering_context, resource_id, function() { + $this + .empty() + .append(Drupal.dnd.Atoms[resource_id].contexts[rendering_context]) + .closest('div.form-item') + .find('input:text') + .val(resource_id) + .change() + .end() + .find('.atom_reference_operations') + .show(); + + // Process atom's operation links (edit and view) rendering + var $operation_buttons = $this.closest('.form-item') + .find('.atom_reference_operations').show() + .find('.buttons'); + $operation_buttons + .removeClass('ctools-dropbutton') + .removeClass('ctools-dropbutton-processed') + .removeClass('ctools-button-processed') + .find('li.edit, li.view').empty(); + + // Process Edit link + if ($.grep(Drupal.dnd.Atoms[resource_id].actions, function(e){ return e == 'edit'; }).length > 0) { + // Permission granted for edit + + var atom_edit_link = settings.basePath + settings.pathPrefix + 'atom/' + resource_id + '/edit/nojs'; + $edit_link_model.clone() + .attr('href', atom_edit_link) + .appendTo($operation_buttons.find('li.edit')); + Drupal.behaviors.ZZCToolsModal.attach($operation_buttons); + $operation_buttons.addClass('ctools-dropbutton'); + } + + // Process View link + if ($.grep(Drupal.dnd.Atoms[resource_id].actions, function(e){ return e == 'view'; }).length > 0) { + // Permission granted for view + + var atom_view_link = settings.basePath + settings.pathPrefix + 'atom/' + resource_id; + $view_link_model.clone() + .attr('href', atom_view_link) + .appendTo($operation_buttons.find('li.view')); + $operation_buttons.addClass('ctools-dropbutton') + } + atomReferenceSetContext($context, resource_id); + Drupal.attachBehaviors($this); + }); + } + else { + var placeholder = Drupal.t("You can't drop a resource of type %type in this field", {'%type': ret.type}); + $this.empty().append(placeholder); + } + e.stopPropagation(); + e.preventDefault(); + + return false; + }) + .closest('div.form-item') + .find('input') + .css('display', 'none') + .end() + .append($operation_wrapper); + }); + } +}; + +function atomReferenceSetContext($context, sid) { + if ($context.length == 0) { + return false; + } + if ( typeof Drupal.dnd.Atoms[sid] !== "undefined" && Drupal.dnd.Atoms[sid]) { + $context.show(); + + var atom_type = Drupal.dnd.Atoms[sid].meta.type; + + if (typeof Drupal.settings.dnd.contexts[atom_type] !== "undefined" && Drupal.settings.dnd.contexts[atom_type]) { + var scald_context = $context.find('select.context-select').val(); + + $context.find('select.context-select').find('option[value!="use_the_default"]').remove(); + + $.each( Drupal.settings.dnd.contexts[atom_type], function( key, value ) { + $context.find('select.context-select').append( + new Option(value, key) + ); + }); + + // Triggering chosen:updated in case chosen is used on this list. + $context.find('select.context-select').val(scald_context).change().trigger('chosen:updated'); + } + } + else { + $context.hide(); + } +} + +if (!Drupal.atom_reference) { + Drupal.atom_reference = {}; + Drupal.atom_reference.droppable = function(resource_id, field) { + var retVal = {'keepgoing': true, 'found': true}; + if (Drupal.dnd.Atoms[resource_id]) { + var type = Drupal.dnd.Atoms[resource_id].meta.type; + var accept = $(field).closest('div.form-item').find('input:text').data('types').split(','); + if (jQuery.inArray(type, accept) == -1) { + retVal.keepgoing = false; + } + retVal.type = type; + } + else { + retVal.found = false; + } + return retVal; + } +} +})(jQuery); diff --git a/docroot/sites/all/modules/contrib/scald/modules/fields/atom_reference/atom_reference.migrate.inc b/docroot/sites/all/modules/contrib/scald/modules/fields/atom_reference/atom_reference.migrate.inc new file mode 100644 index 00000000..e0d25b37 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/fields/atom_reference/atom_reference.migrate.inc @@ -0,0 +1,30 @@ + 2, + 'field handlers' => array('MigrateAtomReferenceFieldHandler'), + ); +} + +class MigrateAtomReferenceFieldHandler extends MigrateSimpleFieldHandler { + /** + * Constructor. + */ + public function __construct() { + parent::__construct(array( + 'value_key' => 'sid', + 'skip_empty' => TRUE, + )); + + $this->registerTypes(array('atom_reference')); + } +} diff --git a/docroot/sites/all/modules/contrib/scald/modules/fields/atom_reference/atom_reference.module b/docroot/sites/all/modules/contrib/scald/modules/fields/atom_reference/atom_reference.module new file mode 100644 index 00000000..c3b9601e --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/fields/atom_reference/atom_reference.module @@ -0,0 +1,518 @@ + 'Atom reference library', + 'website' => 'http://drupal.org/project/scald', + 'version' => '1.x', + 'js' => array( + $path . '/atom_reference.js' => array(), + drupal_get_path('module', 'ctools') . '/js/dropbutton.js' => array(), + ), + 'css' => array( + $path . '/atom_reference.css' => array(), + drupal_get_path('module', 'ctools') . '/css/dropbutton.css' => array(), + drupal_get_path('module', 'ctools') . '/css/button.css' => array(), + ), + ); + + return $libraries; +} + +/** + * Implements hook_field_info(). + */ +function atom_reference_field_info() { + return array( + 'atom_reference' => array( + 'label' => t('Atom Reference'), + 'description' => t('This field stores the ID of a related atom as an integer value.'), + 'instance_settings' => array( + 'referencable_types' => array(), + ), + 'default_widget' => 'atom_reference_textfield', + 'default_formatter' => 'title', + 'property_type' => 'scald_atom', + ) + ); +} + +/** + * Implements hook_field_instance_settings_form(). + */ +function atom_reference_field_instance_settings_form($field, $instance) { + $options = array(); + foreach(scald_types() as $name => $type) { + $options[$name] = $type->title; + } + + $form = array(); + $form['referencable_types'] = array( + '#type' => 'checkboxes', + '#title' => t('Atom types that can be referenced'), + '#multiple' => TRUE, + '#options' => $options, + '#default_value' => $instance['settings']['referencable_types'], + ); + + $allow_override = isset($instance['settings']['allow_override']) ? $instance['settings']['allow_override'] : FALSE; + $form['allow_override'] = array( + '#type' => 'checkbox', + '#title' => t('Allow context override'), + '#default_value' => $allow_override, + ); + + return $form; +} + +/** + * Implements hook_field_views_data(). + */ +function atom_reference_field_views_data($field) { + $data = field_views_field_default_views_data($field); + $current_table = _field_sql_storage_tablename($field); + $revision_table = _field_sql_storage_revision_tablename($field); + $column = _field_sql_storage_columnname($field['field_name'], 'sid'); + + // Relationship: add a relationship for related atom. + $data[$current_table][$column]['relationship'] = array( + 'base' => 'scald_atoms', + 'field' => $column, + 'handler' => 'views_handler_relationship', + 'label' => $data[$current_table][$field['field_name']]['title'], + 'field_name' => $field['field_name'], + ); + + // Relationship: add a relationship for revisions. + $data[$revision_table][$column]['relationship'] = array( + 'base' => 'scald_atoms', + 'field' => $column, + 'handler' => 'views_handler_relationship', + 'label' => t('Atom reference item revision from !field_name', array('!field_name' => $field['field_name'])), + 'field_name' => $field['field_name'], + ); + + return $data; +} + +/** + * Implements hook_field_validate(). + */ +function atom_reference_field_validate($entity_type, $entity, $field, $instance, $langcode, $items, &$errors) { + // Ensure that the types of the referenced atoms match the one of those + // that were defined in the field configuration. + $types = atom_reference_field_referenceable_types($instance); + foreach ($items as $delta => $item) { + if (empty($item['sid'])) { + continue; + } + $atom = scald_fetch($item['sid']); + if (!isset($types[$atom->type]) || empty($types[$atom->type])) { + $errors[$field['field_name']][$langcode][$delta][] = array( + 'error' => 'atom_reference_bad_type', + 'message' => t("Atom %title is of type %type, which can't be referenced in field %field", array('%title' => $atom->title, '%type' => $atom->type, '%field' => $instance['label'])) + ); + } + } +} + +/** + * Implements hook_field_presave(). + */ +function atom_reference_field_presave($entity_type, $entity, $field, $instance, $langcode, &$items) { + foreach ($items as $delta => $item) { + if (empty($item['sid'])) { + continue; + } + + $options = array(); + if (!empty($item['options'])) { + $options = unserialize($item['options']); + } + + foreach($item as $name => $option) { + if ($name == 'sid' || $name == 'options') { + continue; + } + if (!empty($item[$name])) { + $options[$name] = $option; + } + else { + unset($options[$name]); + } + } + $items[$delta]['options'] = serialize($options); + } +} + +/** + * Implements hook_field_is_empty(). + */ +function atom_reference_field_is_empty($item, $field) { + return empty($item['sid']); +} + +/** + * Implements hook_field_formatter_info(). + */ +function atom_reference_field_formatter_info() { + // Expose all the Scald Contexts as formatters for the Atom Reference field. + $formatters = array(); + $contexts = scald_contexts_public(); + foreach ($contexts as $name => $context) { + $formatters[$name] = array( + 'label' => $context['title'], + 'field types' => array('atom_reference'), + 'settings' => array('link' => 0, 'override' => 0), + ); + } + + return $formatters; +} + +/** + * Implements hook_field_formatter_settings_form(). + */ +function atom_reference_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) { + $display = $instance['display'][$view_mode]; + $settings = $display['settings']; + $element = array(); + + $element['link'] = array( + '#title' => t('Link to content'), + '#type' => 'select', + '#default_value' => $settings['link'], + '#options' => array('no', 'yes'), + ); + + if (isset($instance['settings']['allow_override']) && $instance['settings']['allow_override']) { + $element['override'] = array( + '#title' => t('Allow context override'), + '#type' => 'checkbox', + '#default_value' => $settings['override'], + ); + } + + return $element; +} + +/** + * Implements hook_field_formatter_settings_summary(). + */ +function atom_reference_field_formatter_settings_summary($field, $instance, $view_mode) { + $display = $instance['display'][$view_mode]; + $settings = $display['settings']; + + $link = empty($settings['link']) ? t('No') : t('Yes'); + $summary = t('Link to content: @choice', array('@choice' => $link)); + + return $summary; +} + +/** + * Implements hook_field_formatter_view. + */ +function atom_reference_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) { + $render_context = $display['type']; + $contexts = scald_contexts(); + $element = array(); + + $uri = false; + + // Check if the formatter involves a link. + if ($display['settings']['link']) { + $uri = entity_uri($entity_type, $entity); + } + + if (!empty($contexts[$render_context])) { + foreach ($items as $delta => $item) { + $options = array(); + if (!empty($item['options'])) { + $options += unserialize($item['options']); + } + $context = $render_context; + if (isset($display['settings']['override']) && $display['settings']['override'] + && !empty($options['context']) && $options['context'] !== 'use_the_default') { + $context = $options['context']; + } + $sid = $item['sid']; + if ($uri) { + $options['link'] = $uri['path']; + } + $element[$delta] = array('#markup' => scald_render($sid, $context, drupal_json_encode($options))); + } + } + + return $element; +} + +/** + * Implements hook_field_widget_info. + */ +function atom_reference_field_widget_info() { + return array( + 'atom_reference_textfield' => array( + 'label' => t('Drop box'), + 'field types' => array('atom_reference'), + 'settings' => array( + 'context' => 'sdl_editor_representation', + ), + ) + ); +} + +/** + * Implements hook_field_widget_settings_form. + */ +function atom_reference_field_widget_settings_form($field, $instance) { + $preview_context = isset($instance['widget']['settings']['context']) + ? $instance['widget']['settings']['context'] : variable_get('dnd_context_default', 'sdl_editor_representation'); + $form['context'] = array( + '#type' => 'select', + '#title' => t('Preview context'), + '#options' => array(), + '#default_value' => $preview_context, + '#description' => t('Scald preview context to be displayed in the edit form.'), + ); + + $contexts = scald_contexts_public(); + foreach ($contexts as $name => $context) { + // TODO: Atom reference shouldn't need the context to be parsable, there's + // nothing converting back and forth between the SAS and the rendered + // representation. + if (!empty($context['parseable'])) { + $form['context']['#options'][$name] = $context['title']; + } + } + + return $form; +} + +/** + * Implements hook_field_widget_form. + */ +function atom_reference_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) { + $all = scald_types(); + $options = array(); + $types = atom_reference_field_referenceable_types($instance); + + foreach ($types as $name => $value) { + if ($value && isset($all[$name])) { + $options[$name] = $all[$name]->title; + } + } + + $help = format_plural( + count($options), + 'Allowed resource format: %types', + 'Allowed resource formats: %types', + array('%types' => implode(', ', $options)) + ); + + $preview_context = $instance['widget']['settings']['context']; + $element['#description'] .= ' ' . $help; + $element['#type'] = 'textfield'; + $element['#attributes'] = array('data-types' => implode(',', array_keys($options)), 'data-dnd-context' => $preview_context); + $element['#default_value'] = isset($items[$delta]) ? $items[$delta]['sid'] : ''; + $element['#preview_context'] = $preview_context; + $element['#process'][] = 'atom_reference_field_widget_form_process'; + $element['#attached'] = array('library' => array(array('atom_reference', 'library'))); + + $options = array(); + if (!empty($items[$delta]['options'])) { + $options = unserialize($items[$delta]['options']); + } + + $return = array('sid' => $element); + + if (isset($instance['settings']['allow_override']) && $instance['settings']['allow_override']) { + $rendering_context = 'use_the_default'; + if (!empty($options['context'])) { + $rendering_context = $options['context']; + } + $context_element = array( + '#type' => 'select', + '#title' => t('Representation context'), + '#attributes' => array('class' => array('context-select')), + '#options' => array(), + '#default_value' => $rendering_context, + '#description' => t('Scald rendering context used in field display.'), + ); + $context_element['#weight'] = 20; + + $contexts = scald_contexts_public(); + $context_element['#options']['use_the_default'] = t('Use the default'); + foreach ($contexts as $name => $context) { + if ($name !== 'sdl_library_item') { + $context_element['#options'][$name] = $context['title']; + } + } + $return['context'] = $context_element; + } + + return $return; +} + +/** + * Atom types that are allowed to be referenced in that field instance. + */ +function atom_reference_field_referenceable_types($instance) { + $types = $instance['settings']['referencable_types']; + $all = scald_types(); + + // All types are allowed if no type is explicitely selected (default setting). + if (!array_filter($types)) { + $types = array_fill_keys(array_keys($all), '1'); + } + + return $types; +} + +/** + * Process the Atom Reference widget element. + * + * Add either the atom reference representation or the placeholder + * on the fly, depending on the field being filled. + */ +function atom_reference_field_widget_form_process(&$element) { + // Get the default value, rendering context and format the placeholder accordingly. + $preview_context = variable_get('dnd_context_default', 'sdl_editor_representation'); + if (isset($element['#preview_context'])) { + $preview_context = $element['#preview_context']; + } + + $default = $element['#value']; + if ($default) { + $prefix = '
    ' . scald_render($default, $preview_context) . '
    '; + } + else { + $placeholder = t('Drop a resource from Scald media library here.'); + $prefix = '
    ' . $placeholder . '
    '; + } + $element['#field_prefix'] = $prefix; + + if (isset($element['#entity_type']) && module_exists('i18n_field')) { + $instance = field_info_instance($element['#entity_type'], $element['#field_name'], $element['#bundle']); + $translated_label = i18n_field_translate_property($instance, 'label'); + $element['#title'] = $translated_label; + } + + return $element; +} + +/** + * Implements hook_field_widget_error. + */ +function atom_reference_field_widget_error($element, $error, $form, &$form_state) { + $name = implode('][', $element['sid']['#array_parents']); + form_set_error($name, $error['message']); +} + +/** + * Provide default field comparison options. + */ +function atom_reference_field_diff_default_options($field_type) { + return array( + 'show_id' => 0, + 'show_type' => 1, + 'entity_title' => 'Atom', + ); +} + +/** + * Provide a form for setting the field comparison options. + */ +function atom_reference_field_diff_options_form($field_type, $settings) { + $options_form = array(); + $options_form['show_id'] = array( + '#type' => 'checkbox', + '#title' => t('Show atom id'), + '#default_value' => $settings['show_id'], + ); + + $options_form['show_type'] = array( + '#type' => 'checkbox', + '#title' => t('Show atom type'), + '#default_value' => $settings['show_type'], + ); + + $options_form['entity_title'] = array( + '#type' => 'textfield', + '#title' => t('The title to use for the atom entity'), + '#default_value' => $settings['entity_title'], + '#description' => t('This can be useful if you call Atoms differently on your website, such as Resources.') + ); + + return $options_form; +} + +/** + * Diff field callback for preloading the scald atom entities. + */ +function atom_reference_field_diff_view_prepare(&$old_items, &$new_items, $context) { + $sids = array(); + foreach (array_merge_recursive($old_items, $new_items) as $info) { + $sids[$info['sid']] = $info['sid']; + } + $atoms = scald_atom_load_multiple($sids); + + foreach ($old_items as $delta => $info) { + $old_items[$delta]['atom'] = isset($atoms[$info['sid']]) ? $atoms[$info['sid']] : NULL; + } + foreach ($new_items as $delta => $info) { + $new_items[$delta]['atom'] = isset($atoms[$info['sid']]) ? $atoms[$info['sid']] : NULL; + } +} + +/** + * Diff field callback for parsing atom_reference field comparative values. + */ +function atom_reference_field_diff_view($items, $context) { + $instance = $context['instance']; + $settings = $context['settings']; + + $diff_items = array(); + foreach ($items as $delta => $item) { + if (!isset($item['atom'])) { + continue; + } + + $diff_items[$delta] = $item['atom']->title; + + if ($settings['show_id'] || $settings['show_type']) { + $diff_items[$delta] .= ' ('; + } + + if ($settings['show_type']) { + $diff_items[$delta] .= t('!type', array('!type' => ucfirst($item['atom']->type))); + } + + if ($settings['show_id']) { + if ($settings['show_type']) { + $diff_items[$delta] .= ', '; + } + $diff_items[$delta] .= t( + '@entity_name ID: !id', + array( + '@entity_name' => $settings['entity_title'], + '!id' => $item['atom']->sid + ) + ); + } + + if ($settings['show_id'] || $settings['show_type']) { + $diff_items[$delta] .= ')'; + } + } + + return $diff_items; +} diff --git a/docroot/sites/all/modules/contrib/scald/modules/fields/atom_reference/atom_reference.test b/docroot/sites/all/modules/contrib/scald/modules/fields/atom_reference/atom_reference.test new file mode 100644 index 00000000..97485838 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/fields/atom_reference/atom_reference.test @@ -0,0 +1,88 @@ + 'Atom Reference', + 'description' => 'Test the Atom Reference functionality.', + 'group' => 'Scald', + ); + } + + /** + * {@inheritdoc} + */ + protected function setup() { + parent::setUp(array('atom_reference', 'field_ui', 'scald_dnd_library')); + } + + /** + * Test Scald YouTube atom creation via UI. + */ + function testAtomReferenceField() { + $web_user = $this->drupalCreateUser(array( + 'administer content types', + 'administer site configuration', + 'administer scald', + 'view any atom', + 'create atom of any type', + )); + $this->drupalLogin($web_user); + + $atom = $this->createAtom(); + + $edit = array( + 'fields[_add_new_field][label]' => 'Media', + 'fields[_add_new_field][field_name]' => 'media', + 'fields[_add_new_field][type]' => 'atom_reference', + 'fields[_add_new_field][widget_type]' => 'atom_reference_textfield', + ); + $this->drupalPost('admin/structure/types/manage/article/fields', $edit, t('Save')); + + $this->drupalGet('admin/structure/types/manage/article/display'); + $edit = array( + 'fields[field_media][type]' => 'sdl_editor_representation', + ); + // Submit an image button is quite complex and it is required to send extr + // post data, which are the submission coordinates. + $this->drupalPost(NULL, $edit, '', array(), array(), NULL, '&field_media_formatter_settings_edit.x=20&field_media_formatter_settings_edit.y=10'); + $this->assertFieldByName('fields[field_media][settings_edit_form][settings][link]', 0); + + $edit = array( + 'fields[field_media][settings_edit_form][settings][link]' => 1, + ); + $this->drupalPost(NULL, $edit, t('Update')); + $this->assertText('Link to content: Yes'); + $this->drupalPost(NULL, array(), t('Save')); + + $node = $this->drupalCreateNode(array( + 'type' => 'article', + 'field_media' => array(LANGUAGE_NONE => array(array('sid' => $atom->sid))), + )); + + $this->drupalGet('node/' . $node->nid); + $this->assertText($node->title); + // Confirm that the referenced atom is rendered with a link. + $xpath = $this->buildXPathQuery( + '//div[contains(@class, :field)]//a/img[@alt=:alt]', + array( + ':field' => 'field-name-field-media', + ':alt' => $atom->title, + ) + ); + $this->assertTrue($this->xpath($xpath), 'Referenced atom is rendered with link.'); + } + +} + diff --git a/docroot/sites/all/modules/contrib/scald/modules/fields/mee/css/editor-global.css b/docroot/sites/all/modules/contrib/scald/modules/fields/mee/css/editor-global.css new file mode 100644 index 00000000..c9c2d9cc --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/fields/mee/css/editor-global.css @@ -0,0 +1,34 @@ +/** + * @file + * Stylesheet used to provide align and wrap functionality for atoms + * + * It is automatically included when the DnD plugin is used. + */ + +.atom-align-right { + float: right; +} + +.atom-align-left { + float: left; +} + +.atom-align-center { + margin: 0 auto; + display: table; +} + +/** + * The following rules make legend look nice with responsive images. + */ +.dnd-atom-wrapper { + display: table; +} +.dnd-drop-wrapper img { + max-width: 100%; + height: auto; +} +.dnd-legend-wrapper { + display: table-caption; + caption-side: bottom; +} diff --git a/docroot/sites/all/modules/contrib/scald/modules/fields/mee/css/editor.css b/docroot/sites/all/modules/contrib/scald/modules/fields/mee/css/editor.css new file mode 100644 index 00000000..dc2e5443 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/fields/mee/css/editor.css @@ -0,0 +1,19 @@ +/** + * @file + * Stylesheet used by richtext editors. + * + * Include this file into your editor CSS so that Atom wrappers have a better + * visualisation. + * + * It is automatically included when the DnD plugin is used. + */ + +.dnd-atom-wrapper, +.dnd-widget-wrapper{ + padding: 5px; +} +.dnd-atom-wrapper:hover { + outline: 2px #ccc solid; + background-color: #ddd; +} + diff --git a/docroot/sites/all/modules/contrib/scald/modules/fields/mee/mee.info b/docroot/sites/all/modules/contrib/scald/modules/fields/mee/mee.info new file mode 100644 index 00000000..a67a5f0c --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/fields/mee/mee.info @@ -0,0 +1,17 @@ +name = Multimedia Editorial Element +package = Scald +description = Allows users to define metadata on atoms that are embedded in text fields +dependencies[] = field +dependencies[] = text +dependencies[] = dnd +dependencies[] = scald +core = 7.x + +stylesheets[all][] = css/editor-global.css + +; Information added by Drupal.org packaging script on 2016-04-15 +version = "7.x-1.8" +core = "7.x" +project = "scald" +datestamp = "1460730556" + diff --git a/docroot/sites/all/modules/contrib/scald/modules/fields/mee/mee.install b/docroot/sites/all/modules/contrib/scald/modules/fields/mee/mee.install new file mode 100644 index 00000000..3dde5d56 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/fields/mee/mee.install @@ -0,0 +1,207 @@ + array( + 'entity_type' => array( + 'type' => 'varchar', + 'length' => 128, + 'not null' => TRUE, + 'default' => '', + ), + 'entity_id' => array( + 'type' => 'int', + 'unsigned' => TRUE, + 'not null' => TRUE, + 'default' => 0, + ), + 'revision_id' => array( + 'type' => 'int', + 'unsigned' => TRUE, + 'not null' => TRUE, + 'default' => 0, + ), + 'atom_sid' => array( + 'type' => 'int', + 'unsigned' => TRUE, + 'not null' => TRUE, + 'default' => 0, + ), + 'field' => array( + 'type' => 'varchar', + 'length' => 31, + 'not null' => TRUE, + 'default' => '', + ), + 'delta' => array( + 'type' => 'int', + 'unsigned' => TRUE, + 'not null' => TRUE, + 'default' => 0, + ), + 'weight' => array( + 'type' => 'int', + 'not null' => TRUE, + 'default' => 0, + ), + 'required' => array( + 'type' => 'int', + 'not null' => TRUE, + 'default' => 0, + ), + 'copyright' => array('type' => 'text'), + ), + 'primary key' => array( + 'entity_type', + 'entity_id', + 'revision_id', + 'atom_sid', + 'field', + 'delta', + ), + ); + + return $schema; +} + +/** + * Implements hook_install(). + */ +function mee_install() { + // default mee storage format to 'embed_div' - see mee_update_7002 + variable_set('mee_store_format', 'embed_div'); +} + +/** + * Upgrade MEE module to 7.x. + */ +function mee_update_7000() { + db_rename_table('mee_ressources', 'mee_resource'); + + // @todo Migrate MEE CCK fields to text_with_summary +} + +/** + * Change the mee_ressource schema to support all entity types. + */ +function mee_update_7001(&$sandbox) { + if (!isset($sandbox['progress'])) { + db_drop_primary_key('mee_resource'); + db_add_field('mee_resource', 'entity_type', array( + 'type' => 'varchar', + 'length' => 128, + 'not null' => TRUE, + 'default' => '', + )); + db_add_field('mee_resource', 'revision_id', array( + 'type' => 'int', + 'unsigned' => TRUE, + 'not null' => FALSE, + )); + db_change_field('mee_resource', 'content_nid', 'entity_id', array( + 'type' => 'int', + 'unsigned' => TRUE, + 'not null' => TRUE, + 'default' => 0, + )); + db_add_field('mee_resource', 'delta', array( + 'type' => 'int', + 'unsigned' => TRUE, + 'not null' => TRUE, + 'default' => 0, + )); + + $sandbox['progress'] = 0; + $sandbox['current_nid'] = 0; + $sandbox['max'] = db_query("SELECT COUNT(DISTINCT entity_id) FROM {mee_resource}")->fetchField(); + } + + $query = db_select('mee_resource', 'm'); + + $query + ->leftJoin('node', 'n', 'm.entity_id=n.nid'); + + $ids = $query + ->fields('m', array('entity_id')) + ->fields('n', array('vid')) + ->condition('m.entity_id', $sandbox['current_nid'], '>') + ->orderBy('m.entity_id', 'ASC') + ->distinct() + ->range(0, 50) + ->execute() + ->fetchAllKeyed(0, 1); + + foreach ($ids as $nid => $vid) { + db_update('mee_resource') + ->fields(array( + 'entity_type' => 'node', + 'revision_id' => $vid, + )) + ->condition('entity_id', $nid) + ->execute(); + + $sandbox['progress']++; + $sandbox['current_nid'] = $nid; + } + + $finished = empty($sandbox['max']) ? TRUE : ($sandbox['progress'] == $sandbox['max']); + + if ($finished) { + db_add_primary_key('mee_resource', array( + 'entity_type', + 'entity_id', + 'revision_id', + 'atom_sid', + 'field', + 'delta', + )); + } + + $sandbox['#finished'] = $finished; +} + +/** + * Explicitly default mee storage format to 'sas' for existing sites. + */ +function mee_update_7002() { + if (variable_get('mee_store_format', 'undefined') == 'undefined') { + variable_set('mee_store_format', 'sas'); + } +} + +/** + * Update plugins paths in CKEditor profiles. + */ +function mee_update_7003() { + if(module_exists('ckeditor')) { + module_load_include('inc', 'ckeditor', 'includes/ckeditor.lib'); + $profiles_list = ckeditor_profile_input_formats(); + $plugins_list = ckeditor_load_plugins(); + foreach ($profiles_list AS $_profile => $_inputs) { + $changed = FALSE; + $profile = ckeditor_profile_load($_profile); + if (!isset($profile->settings['loadPlugins'])) continue; + foreach (array_keys((array) $profile->settings['loadPlugins']) as $plugin_name) { + if (in_array($plugin_name, array('dnd', 'dndck4'))) { + $profile->settings['loadPlugins'][$plugin_name] = $plugins_list[$plugin_name]; + $changed = TRUE; + } + } + if ($changed === TRUE) { + db_update('ckeditor_settings') + ->fields(array( + 'settings' => serialize($profile->settings) + )) + ->condition('name', $profile->name, '=') + ->execute(); + } + } + } +} diff --git a/docroot/sites/all/modules/contrib/scald/modules/fields/mee/mee.js b/docroot/sites/all/modules/contrib/scald/modules/fields/mee/mee.js new file mode 100644 index 00000000..08862673 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/fields/mee/mee.js @@ -0,0 +1,120 @@ +(function($) { + +Drupal.behaviors.mee = { + attach: function(context, settings) { + for (editor in settings.dndDropAreas) { + $('#' + editor, context).each(function() { + var $this = $(this); + // I currently don't know how to effectively detect changes in + // textareas. So monitor theirs contents and periodically compare to the + // old values. + settings.mee.editors[$this.attr('id')] = ''; + setInterval(function() { + Drupal.mee.update($this); + }, 1000); + }); + } + } +} + +Drupal.mee = { + update: function(obj) { + var id = obj.attr('id'), text, mee_rm_id; + + // Update the real form element with value in the RTE. We don't use wysiwyg + // API because this kind of action is not handled. Currently only the two + // most popular RTE are supported. + if (typeof(tinymce) !== 'undefined' && tinymce.get(id)) { + tinymce.get(id).save(); + } + else if (typeof(CKEDITOR) !== 'undefined' && CKEDITOR.instances[id]) { + CKEDITOR.instances[id].updateElement(); + } + + text = obj.val(); + + if (text === Drupal.settings.mee.editors[id]) { + return; + } + + Drupal.settings.mee.editors[id] = text; + // @todo check the selector + mee_rm_id = obj.parents('.text-format-wrapper').find('.mee-resource-manager').attr('id'); + + // 1. Check if there are known atoms. + // Known atoms are ones actually in the current library view and available + // for drag and drop. If library is unavailable, detection happens on the + // server side. + for (atom in Drupal.dnd.Atoms) { + if (this.atom_exists(text, atom)) { + Drupal.mee.generate(atom, mee_rm_id); + } + } + + // 2. Scan the resource manager table to clean up removed atoms. + $('#' + mee_rm_id).find('tbody tr').each(function(i) { + // Get the atom id from the weight select's name + var atom_id = $(this).find('.mee-rm-weight').attr('name').replace(/^.*\[(\d+)\]\[weight\]$/, '$1'); + + if (atom_id > 0 && !Drupal.mee.atom_exists(text, atom_id)) { + $(this).remove(); + } + }); + }, + + /** + * Searchs if an atom is present in the text. + * + * Theoretically we can search for Drupal.dnd.Atoms[atom].editor in the text, + * but we can, because RTE reformat the HTML source (eg. change class='image' + * into class="image" etc.). + */ + atom_exists: function(text, atom_id) { + return (text.indexOf('(.*)/sU'); + +/** + * Implements hook_menu(). + */ +function mee_menu() { + // AJAX callback used to render atoms in the widget-based plugin for + // CKEditor4. + $items['atom/ajax-widget-expand/%scald_atom_fallback'] = array( + 'page callback' => 'mee_ajax_widget_expand', + 'page arguments' => array(2), + 'access callback' => TRUE, + 'delivery callback' => 'ajax_deliver', + 'theme callback' => 'ajax_base_page_theme', + ); + + return $items; +} + +/** + * Implements hook_theme(). + */ +function mee_theme($existing, $type, $theme, $path) { + return array( + 'mee_resource_manager' => array( + 'render element' => 'resource_manager', + ), + 'mee_widget_embed' => array( + 'variables' => array('atom' => NULL, 'context' => NULL, 'options' => NULL, 'align' => NULL, 'caption' => NULL, 'content' => NULL, 'wysiwyg' => FALSE), + ), + ); +} + +/** + * Implements hook_library(). + */ +function mee_library() { + $path = drupal_get_path('module', 'mee'); + $libraries['library'] = array( + 'title' => 'MEE Library', + 'website' => 'http://drupal.org/project/scald', + 'version' => '1.x', + 'js' => array( + $path . '/mee.js' => array(), + array( + 'type' => 'setting', + 'data' => array( + 'mee' => array( + 'sas' => (mee_store_format() == 'sas'), + 'editors' => array(), + ), + ), + ), + ), + 'css' => array( + $path . '/css/mee.css' => array(), + ), + ); + + // This file is included automatically if the CKEditor plugin is enabled. + // However we need to load it directly in Drupal so that strings can be + // translated. + $plugin = mee_store_format() !== 'embed_div' ? 'ckeditor' : 'dndck4'; + $libraries['library']['js'][$path . '/plugins/' . $plugin . '/lang/en.js'] = array(); + + return $libraries; +} + +/** + * Implements hook_wywiwyg_plugin(). + */ +function mee_wysiwyg_plugin($editor, $version) { + $plugins = array(); + $mee_store_format = mee_store_format(); + switch ($editor) { + case 'ckeditor': + if ($mee_store_format == 'sas') { + $plugins['dnd'] = array( + 'path' => drupal_get_path('module', 'mee') . '/plugins/ckeditor', + 'filename' => 'plugin.js', + 'buttons' => array( + 'dnd' => t('Scald DnD integration'), + ), + 'load' => TRUE, + ); + } + elseif ($mee_store_format == 'embed_div') { + $plugins['dndck4'] = array( + 'path' => drupal_get_path('module', 'mee') . '/plugins/dndck4', + 'filename' => 'plugin.js', + 'buttons' => array( + 'dndck4' => t('Scald DnD integration - CKEditor 4 widgets'), + ), + 'load' => TRUE, + ); + } + break; + } + + return $plugins; +} + +/** + * Implements hook_ckeditor_plugin(). + */ +function mee_ckeditor_plugin() { + $plugins = array(); + $mee_store_format = mee_store_format(); + if ($mee_store_format == 'sas') { + $plugins['dnd'] = array( + 'name' => 'dnd', + 'desc' => t('Scald Drag and Drop integration'), + 'path' => drupal_get_path('module', 'mee') . '/plugins/ckeditor/', + 'buttons' => array( + 'ScaldAtom' => array( + 'icon' => 'icons/atom.png', + 'label' => t('Edit atom properties'), + ), + ), + ); + } + elseif ($mee_store_format == 'embed_div' && version_compare(ckeditor_get_version(), '4.3.0') >= 0) { + $plugins['dndck4'] = array( + 'name' => 'dndck4', + 'desc' => t('Scald Drag and Drop integration - CKEditor 4 widgets'), + 'path' => drupal_get_path('module', 'mee') . '/plugins/dndck4/', + 'buttons' => array( + 'ScaldAtom' => array( + 'icon' => 'icons/atom.png', + 'label' => t('Edit atom properties'), + ), + ), + ); + } + + return $plugins; +} + +/** + * Implements hook_views_api(). + */ +function mee_views_api($module = NULL, $api = NULL) { + return array("api" => "3.0"); +} + +/** + * Implements hook_field_info_alter(). + */ +function mee_field_info_alter(&$info) { + foreach (mee_field_types() as $name) { + $info[$name]['instance_settings']['dnd_enabled'] = 0; + $info[$name]['instance_settings']['mee_enabled'] = 0; + $info[$name]['instance_settings']['context'] = ''; + } +} + +/** + * Returns the current storage format for embedded atoms. + * + * @return string + * - 'sas' when using the legacy CKEditor plugin, + * - 'embed_div' when using the CKEditor 4 widget plugin. + */ +function mee_store_format() { + return variable_get('mee_store_format', 'embed_div'); +} + +/** + * Implements hook_form_alter(). + * + * Normally this should go in a hook_field_instance_settings_form() if the field + * belongs to the module. But it is not the case, so we implement in a form + * alter. + */ +function mee_form_alter(&$form, &$form_state, $form_id) { + // Verify if we are in the instance settings form. + if ($form_id !== 'field_ui_field_edit_form' || !in_array($form['#field']['type'], mee_field_types())) { + return; + } + + $settings = $form['#instance']['settings']; + + $context_options = array(); + foreach (scald_contexts_public() as $name => $context) { + $context_options[$name] = $context['title']; + } + + $form['instance']['settings']['dnd_enabled'] = array( + '#type' => 'checkbox', + '#title' => t('Drag\'n\'Drop Enabled'), + '#description' => t('Enable DnD for this field will show the Atom library and will allow you to drag and drop atoms to this field.'), + '#default_value' => $settings['dnd_enabled'], + ); + $form['instance']['settings']['mee_enabled'] = array( + '#type' => 'checkbox', + '#title' => t('MEE Enabled'), + '#description' => t('Enable MEE for this field to get access to an advance resource management interface. MEE will automatically detect the resources embedded in this field, and allow you to define a few metadata properties on them, e.g. choose if the node should be unpublished if at some point in the future the resource became unavailable.'), + '#default_value' => $settings['mee_enabled'], + ); + $form['instance']['settings']['context_default'] = array( + '#type' => 'select', + '#title' => t('Scald default context'), + '#description' => t('You can customize field level default context for drag and drop atoms.'), + '#default_value' => isset($settings['context_default']) ? $settings['context_default'] : variable_get('dnd_context_default', 'sdl_editor_representation'), + '#options' => $context_options, + ); + $form['instance']['settings']['context'] = array( + '#type' => 'select', + '#title' => t('Scald fallback context'), + '#description' => t('The fallback context is only used when the specified context for embedded atom is not available (e.g. deleted).'), + '#default_value' => $settings['context'], + '#options' => $context_options, + ); +} + +/** + * Implements hook_field_presave() on behalf of Text module. + * + * @todo Find a better approach to avoid possible collision with other "tricky" + * modules. However we should be safe with Drupal 7 core. + */ +function text_field_presave($entity_type, $entity, $field, $instance, $langcode, &$items) { + // Convert rendered atom back to SAS for on the fly render if required. + if (mee_store_format() != 'sas') { + return; + } + + foreach ($items as $delta => &$item) { + if (!empty($item['value'])) { + $item['value'] = scald_rendered_to_sas($item['value']); + } + } +} + +/** + * Implements hook_field_insert() on behalf of Text module. + * + * @see text_field_presave() + */ +function text_field_insert($entity_type, $entity, $field, $instance, $langcode, &$items) { + if (!_mee_field_instance_enabled($instance, 'mee')) { + return; + } + + list($id, $revision_id) = _mee_extract_id($entity_type, $entity); + + foreach ($items as $delta => $item) { + list($sids, $copyrights) = _mee_process_item_value($item, $entity_type, $entity, $field, $delta); + + // Normalize the weight, putting our separator at 0. + $separator = $item['mee']['resource_manager'][0]['weight']; + + foreach ($sids as $sid) { + $resource = $item['mee']['resource_manager'][$sid]; + db_insert('mee_resource') + ->fields(array( + 'entity_type' => $entity_type, + 'entity_id' => $id, + 'revision_id' => $revision_id, + 'atom_sid' => $sid, + 'field' => $field['field_name'], + 'delta' => $delta, + 'weight' => $resource['weight'] - $separator, + 'required' => (int) $resource['required'], + 'copyright' => isset($copyrights[$sid]) ? $copyrights[$sid] : '', + )) + ->execute(); + } + } +} + +/** + * Implements hook_field_update() on behalf of Text module. + * + * @see text_field_presave() + */ +function text_field_update($entity_type, $entity, $field, $instance, $langcode, &$items) { + if (!_mee_field_instance_enabled($instance, 'mee')) { + return; + } + + list($id, $revision_id) = _mee_extract_id($entity_type, $entity); + + foreach ($items as $delta => $item) { + list($sids, $copyrights) = _mee_process_item_value($item, $entity_type, $entity, $field, $delta); + + // In fact, we'll delete all the associations and recreate afterwards + // the needed one, to be sure that new resources are correctly + // registered, and that no longer used one are removed. + db_delete('mee_resource') + ->condition('entity_type', $entity_type) + ->condition('entity_id', $id) + ->condition('revision_id', $revision_id) + ->condition('field', $field['field_name']) + ->condition('delta', $delta) + ->execute(); + + // Normalize the weight, putting our separator at 0. + $separator = $item['mee']['resource_manager'][0]['weight']; + + foreach ($sids as $sid) { + $resource = $item['mee']['resource_manager'][$sid]; + db_insert('mee_resource') + ->fields(array( + 'entity_type' => $entity_type, + 'entity_id' => $id, + 'revision_id' => $revision_id, + 'atom_sid' => $sid, + 'field' => $field['field_name'], + 'delta' => $delta, + 'weight' => $resource['weight'] - $separator, + 'required' => isset($resource['required']) ? (int) $resource['required'] : 0, + 'copyright' => isset($copyrights[$sid]) ? $copyrights[$sid] : '', + )) + ->execute(); + } + } +} + +/** + * Implements hook_field_delete() on behalf of Text module. + * + * @see text_field_presave() + */ +function text_field_delete($entity_type, $entity, $field, $instance, $langcode, &$items) { + if (!_mee_field_instance_enabled($instance, 'mee')) { + return; + } + + list($id, ) = _mee_extract_id($entity_type, $entity); + + // Delete all resource associations for this field. + db_delete('mee_resource') + ->condition('entity_type', $entity_type) + ->condition('entity_id', $id) + ->condition('field', $field['field_name']) + ->execute(); +} + +/** + * Implements hook_field_attach_view_alter. + * + * Converts the SAS representation to the rendered representation. + */ +function mee_field_attach_view_alter(&$output, $context) { + $store_format = mee_store_format(); + if ($store_format == 'sas' || $store_format == 'embed_div') { + list($id, $revision_id, $bundle) = entity_extract_ids($context['entity_type'], $context['entity']); + $fields = field_info_instances($context['entity_type'], $bundle); + foreach ($fields as $name => $field) { + if (!empty($field['settings']['dnd_enabled']) && isset($output[$name])) { + foreach (element_children($output[$name]) as $key) { + if ($store_format == 'embed_div') { + $input_format = $output[$name]['#items'][$key]['format']; + $list = filter_list_format($input_format); + if (empty($list['mee_scald_widgets']) || $list['mee_scald_widgets']->status != 1) { + $output[$name][$key]['#markup'] = mee_filter_process($output[$name][$key]['#markup']); + } + } + $output[$name][$key]['#markup'] = scald_sas_to_rendered($output[$name][$key]['#markup'], $field['settings']['context'], FALSE, dnd_scald_wysiwyg_context_slugs()); + } + } + } + } +} + +/** + * Implements hook_panels_pane_content_alter(). + * + * Converts the SAS representation to the rendered representation + * in custom content panes. + */ +function mee_panels_pane_content_alter($content, $pane, $args, $context) { + if ($pane->type === 'custom' && $pane->subtype === 'custom' + && $content->type === 'custom' && is_string($content->content)) { + $store_format = mee_store_format(); + if ($store_format == 'embed_div') { + $input_format = $pane->configuration['format']; + $list = filter_list_format($input_format); + if (empty($list['mee_scald_widgets']) || $list['mee_scald_widgets']->status != 1) { + $content->content = mee_filter_process($content->content); + } + } + $content->content = scald_sas_to_rendered($content->content, NULL, FALSE, dnd_scald_wysiwyg_context_slugs()); + } +} + +/** + * Implements hook_form_FORM_ID_alter(). + * + * Add dnd for ALL panels 'custom content' ctools forms. + */ +function mee_form_ctools_custom_content_type_edit_form_alter(&$form, &$form_state) { + $form['body']['#attached']['library'] = array(array('dnd', 'library')); +} + +/** + * Implements hook_field_widget_form_alter(). + */ +function mee_field_widget_form_alter(&$element, &$form_state, $context) { + $enables = _mee_field_instance_enabled($context['instance']); + + // In any case, convert SAS into rendered for format textarea. + if (in_array($context['field']['type'], mee_field_types()) && isset($element['#default_value'])) { + if (mee_store_format() == 'sas') { + $element['#default_value'] = scald_sas_to_rendered($element['#default_value'], $context['instance']['settings']['context'], FALSE, dnd_scald_wysiwyg_context_slugs()); + } + } + + // Activate DnD Library for this element if enabled. + if (!empty($enables['dnd'])) { + $settings = $context['instance']['settings']; + $context_default = isset($settings['context_default']) ? + $settings['context_default'] : + variable_get('dnd_context_default', 'sdl_editor_representation'); + $element['#attributes']['data-dnd-context'][] = $context_default; + $element['#attached']['library'][] = array('dnd', 'library'); + if (isset($element['summary'])) { + $element['summary']['#attributes']['data-dnd-context'][] = $context_default; + } + } + + // Add our custom form element into MEE enabled textarea only. + if (empty($enables['mee'])) { + return; + } + + $element['mee'] = array( + '#prefix' => '
    ', + '#suffix' => '
    ', + '#attached' => array( + 'library' => array(array('mee', 'library')), + ), + '#element_validate' => array('mee_field_text_validate'), + '#weight' => 0.5, + 'resource_manager' => array( + '#theme' => 'mee_resource_manager', + ), + ); + + $resource_manager = array(); + // 'input' is used instead of 'values' because we need extra items inserted + // using JavaScript on the client side. + if (isset($form_state['input'][$context['field']['field_name']][$context['langcode']])) { + $resource_manager = $form_state['input'][$context['field']['field_name']][$context['langcode']][$context['delta']]['mee']['resource_manager']; + } + elseif (isset($element['#entity'])) { + $item = array(); + _mee_load_resources($element['#entity_type'], $element['#entity'], $context['field'], $context['delta'], $item); + $resource_manager = $item['mee']['resource_manager']; + } + + foreach ($resource_manager as $sid => $item) { + $atom = scald_fetch($sid); + if (!is_object($atom)) { + continue; + } + + // Render the atom to get sanitized values. + $title = scald_render($atom, 'title'); + + $element['mee']['resource_manager'][$sid] = array( + 'title' => array( + '#markup' => $title, + ), + 'required' => array( + '#type' => 'select', + '#options' => array(t('Optional'), t('Required')), + '#default_value' => $item['required'], + ), + 'weight' => array( + '#type' => 'weight', + '#default_value' => $item['weight'], + ), + '#weight' => $item['weight'], + ); + } + + // And now we add the separator. + $element['mee']['resource_manager'][0] = array( + 'title' => array( + '#markup' => t('< Primary / Secondary >'), + ), + 'required' => array( + '#markup' => '-', + ), + 'weight' => array( + '#type' => 'weight', + '#prefix' => '
    ', + '#suffix' => '
    ', + ), + '#weight' => isset($resource_manager[0]['weight']) ? $resource_manager[0]['weight'] : 0, + ); +} + +/** + * Validate callback for mee_field_widget_form. + */ +function mee_field_text_validate($element, &$form_state) { + foreach ($form_state['field'] as $field_name => $values) { + foreach ($values as $langcode => $data) { + if (isset($form_state['values'][$field_name][$langcode]) && is_array($form_state['values'][$field_name][$langcode]) && isset($form_state['values'][$field_name][$langcode][0]['mee']) && isset($form_state['input'][$field_name][$langcode][0]['mee'])) { + $form_state['values'][$field_name][$langcode][0]['mee'] = $form_state['input'][$field_name][$langcode][0]['mee']; + } + } + } +} + +/** + * Helper function to return a list of supported field. + * + * Note that only fields defined in the core Text module (text, text_long, + * text_with_summary) are eligible due to the actual implementation. + */ +function mee_field_types() { + return variable_get('mee_field_types', array('text', 'text_long', 'text_with_summary')); +} + +/** + * Implements hook_scald_atom_delete(). + */ +function mee_scald_atom_delete($atom) { + // @todo Verify if the deleted atom is required for some nodes, they will be + // unpublished. + + // Then delete all links in the Resource manager. + db_delete('mee_resource') + ->condition('atom_sid', $atom->sid) + ->execute(); +} + +/** + * Implements hook_node_revision_delete(). + */ +function mee_node_revision_delete($revision) { + // Delete all resource associations for this revision + db_delete('mee_resource') + ->condition('entity_type', 'node') + ->condition('entity_id', $revision->nid) + ->condition('revision_id', $revision->vid) + ->execute(); +} + +/** + * Implements hook_ckeditor_filter_xss_allowed_tags(). + */ +function mee_ckeditor_filter_xss_allowed_tags() { + // The comment "tag" is used to mark parseable atom. It is currently required + // for the dnd plugin to work. Add it to the CKEditor XSS allowed tags. + return array('!--'); +} + +/** + * Returns HTML for the MEE resource list. + * + * @param $variables + * An associative array containing: + * - resource_manager: A render element representing the MEE resource list. + */ +function theme_mee_resource_manager($variables) { + $form = $variables['resource_manager']; + static $count = 0; + $id = 'mee-resource-manager-' . $count; + drupal_add_tabledrag($id, 'order', 'sibling', 'mee-rm-weight'); + + $count++; + $header = array(t('Title'), t('Required'), t('Weight')); + $rows = array(); + foreach (element_children($form) as $key) { + $form[$key]['weight']['#attributes']['class'] = array('mee-rm-weight'); + $row = array(); + $row[] = drupal_render($form[$key]['title']); + $row[] = drupal_render($form[$key]['required']); + $row[] = drupal_render($form[$key]['weight']); + $rows[] = array('data' => $row, 'class' => array('draggable')); + } + + $output = theme('table', array( + 'header' => $header, + 'rows' => $rows, + 'attributes' => array( + 'id' => $id, + 'class' => array('mee-resource-manager'), + ), + 'caption' => t('Resource Manager'), + )); + $output .= drupal_render_children($form); + + return $output; +} + +/** + * Returns the HTML for an atom embedded through the CK widget plugin. + * + * This is used by the mee_scald_widgets filter, and leaves a placeholder SAS + * code for later rendering of the atom. + * + * @param $vars + * An array with the following key/value pairs: + * - atom: the atom, + * - context: the rendering context, + * - options: the options as a JSON string, + * - align: the alignment (left, right, center, none), + * - caption: the caption HTML, + * - content: the atom content. Note: to account for filter cache, the + * 'mee_scald_widgets' filter only passes a SAS code here, that gets + * replaced with the HTML for the rendered atom in + * mee_field_attach_view_alter(). + * - wysiwyg: TRUE when the atom is displayed within a CKEditor. Defaults to + * FALSE. + * + * @return string + * The HTML for the atom embed. + */ +function theme_mee_widget_embed($vars) { + $options = array(); + if (isset($vars['options'])) { + $options = drupal_json_decode($vars['options']); + } + $classes = array('dnd-widget-wrapper', 'context-' . $vars['context'], 'type-' . $vars['atom']->type); + if ($vars['align'] != 'none') { + $classes[] = 'atom-align-' . $vars['align']; + } + if (!empty($options['additionalClasses'])) { + foreach (explode(' ', $options['additionalClasses']) as $class) { + $classes[] = $class; + } + } + $output = '
    '; + + $output .= '
    ' . $vars['content'] . '
    '; + + // When displaying a widget within a CKEditor, always include a container div + // for the editable. Otherwise, only display the caption container if there + // is a caption. + if (!empty($vars['caption']) || $vars['wysiwyg']) { + // Note: The 'dnd-caption-wrapper' class is used by the CKEditor plugin to + // identify the editable zone and should not be modified by theme overrides. + $output .= '
    ' . $vars['caption'] . '
    '; + } + + $output .= '
    '; + + return $output; +} + +/** + * Ajax callback: returns the expanded HTML atom widget. + * + * This URL is used by the "CKEditor 4" widget plugin. + * + * @param $atom + * The atom. + * + * Other parameters, such as context, could also be passed via the querystring. + */ +function mee_ajax_widget_expand($atom) { + $context = (isset($_GET['context']) && in_array($_GET['context'], dnd_scald_wysiwyg_context_slugs())) ? $_GET['context'] : NULL; + if ($atom->type == 'scald_atom_fallback') { + $context = 'invalid-id'; + } + $options = isset($_GET['options']) ? urldecode($_GET['options']) : ''; + $align = (isset($_GET['align']) && in_array($_GET['align'], array('left', 'right', 'center'))) ? $_GET['align'] : 'none'; + + // The legend call needs at least the basic atom meta-data + // to be pre-rendered, so ensure they are present by doing + // an early render, eventually in the lightweight 'title' + // context if no explicit context is given. + $output = $context ? scald_render($atom, $context, $options) : scald_render($atom, 'title'); + + if (empty($atom->omit_legend)) { + $legend = theme('sdl_editor_legend', array('atom' => $atom)); + } + else { + $legend = ''; + } + + $commands = array(); + + $commands[] = array( + 'command' => 'dndck4_cache_atom_metadatadata', + 'data' => array( + 'sid' => $atom->sid, + 'meta' => array( + 'title' => $atom->title, + 'type' => $atom->type, + 'data' => !empty($atom->data) ? $atom->data : array(), + 'provider' => $atom->provider, + 'legend' => $legend, + ), + 'actions' => array_keys(scald_atom_actions_available($atom)), + ), + ); + + + if ($context) { + $commands[] = array( + 'command' => 'dndck4_expand_widget', + 'data' => theme('mee_widget_embed', array( + 'atom' => $atom, + 'context' => $context, + 'options' => $options, + 'align' => $align, + 'content' => $output, + 'wysiwyg' => TRUE, + )), + ); + } + + return array( + '#type' => 'ajax', + '#commands' => $commands, + ); +} + +/** + * Tests if MEE is supported and enabled for this field instance. + */ +function _mee_field_instance_enabled($instance, $key = NULL) { + $enables = array('mee' => FALSE, 'dnd' => FALSE); + + if (!empty($instance['settings']['mee_enabled'])) { + $enables['mee'] = TRUE; + } + if (!empty($instance['settings']['dnd_enabled'])) { + $enables['dnd'] = TRUE; + } + + return $key ? $enables[$key] : $enables; +} + +/** + * Extract entity id, sanitizing revision_id if necessary. + */ +function _mee_extract_id($entity_type, $entity) { + list($entity_id, $revision_id, $bundle) = entity_extract_ids($entity_type, $entity); + + // The revision_id is part of the primary key, and thus + // can't be NULL in some databases. Follow Field SQL Storage + // pattern and use the entity_id as a revision_id. + if (!isset($revision_id)) { + $revision_id = $entity_id; + } + + return array($entity_id, $revision_id); +} + +/** + * Extracts sids and copyright from $item. Updates $item if necessary. + */ +function _mee_process_item_value(&$item, $entity_type, $entity, $field, $delta) { + if (mee_store_format() == 'embed_div') { + $sids = array(); + $copyrights = array(); + // Collect the emebed data. + foreach (_mee_extract_widget_embed_info(filter_dom_load($item['value'])) as $info) { + $sids[] = $info['sid']; + $copyrights[$info['sid']] = $info['caption']; + } + if (!empty($item['summary'])) { + foreach (_mee_extract_widget_embed_info(filter_dom_load($item['summary'])) as $info) { + $sids[] = $info['sid']; + $copyrights[$info['sid']] = $info['caption']; + } + } + $sids = array_unique($sids); + } + else { + // $sids contains the list of atom sid actually used in the item. + $sas = scald_rendered_to_sas($item['value']); + $scald_included = scald_included($sas); + $sids = array_unique($scald_included); + + // Parse copyright informations. + $copyrights = mee_extract_copyrights($item['value']); + } + + // If $item['mee'] does not hold anything, load default data into it. + if (empty($item['mee']) || !is_array($item['mee']['resource_manager'])) { + _mee_load_resources($entity_type, $entity, $field, $delta, $item); + } + + // Finally, if there was unknown client-side problem, we might not have new + // inserted resources. We set default value for them. + foreach ($sids as $sid) { + if (!isset($item['mee']['resource_manager'][$sid])) { + $item['mee']['resource_manager'][$sid] = array('required' => FALSE, 'weight' => 0); + } + } + + return array($sids, $copyrights); +} + +/** + * Load used resource in an entity into an array. + * + * @param $item renderable array to render the field + */ +function _mee_load_resources($entity_type, $entity, $field, $delta, &$item) { + list($id, $revision_id) = _mee_extract_id($entity_type, $entity); + $result = db_select('mee_resource', 'r') + ->fields('r', array('atom_sid', 'weight', 'required')) + ->condition('entity_type', $entity_type) + ->condition('entity_id', $id) + ->condition('revision_id', $revision_id) + ->condition('field', $field['field_name']) + ->condition('delta', $delta) + ->execute(); + $item['mee']['resource_manager'] = array(); + $item['mee']['resource_manager'] = $result->fetchAllAssoc('atom_sid', PDO::FETCH_ASSOC); + $item['mee']['resource_manager'][0] = array('weight' => 0, 'required' => FALSE); +} + +/** + * Extract all copyright informations from a string. + */ +function mee_extract_copyrights($string) { + $copyrights = array(); + if (preg_match_all(MEE_RENDERED_COPYRIGHT_PATTERN, $string, $matches)) { + foreach ($matches[1] as $key => $sid) { + $copyrights[$sid] = $matches[2][$key]; + } + } + return $copyrights; +} + +/** + * Implements hook_wysiwyg_include_directory(). + */ +function mee_wysiwyg_include_directory($type) { + switch ($type) { + case 'plugins': + return $type; + } +} + +/** + * Implements hook_filter_info(). + */ +function mee_filter_info() { + $filters['mee_scald_widgets'] = array( + 'title' => t('Embedded atoms'), + 'description' => t('This is only needed when using the Scald plugin for CKEditor 4'), + 'process callback' => 'mee_filter_process', + ); + return $filters; +} + +/** + * Process callback for the 'mee_scald_widgets' filter. + * + * This expends the embed marker into the themed "atom embed" markup. The atom + * itself is not rendered yet, since that is not cacheable. Instead, a + * placeholder SAS code is left, that will be replaced in + * mee_field_attach_view_alter(). + * + * @param string $text + * The text to process. + * + * @return string + * The processed text. + */ +function mee_filter_process($text) { + // Work on the string as a DOM structure. + $dom = filter_dom_load($text); + + // Collect the DOM nodes and the corresponding embed data. + if ($embed_info = _mee_extract_widget_embed_info($dom)) { + // Collect the corresponding atom ids and load them upfront to benefit from + // multiple-loading. + $sids = array(); + foreach ($embed_info as $info) { + $sids[] = $info['sid']; + } + $atoms = scald_atom_load_multiple(array_unique($sids)); + + // Replace each DOM node with the themed embed. + foreach ($embed_info as $info) { + $html = ''; + if ($atoms[$info['sid']]) { + $html = theme('mee_widget_embed', array( + 'atom' => $atoms[$info['sid']], + 'context' => $info['context'], + 'options' => $info['options'], + 'align' => $info['align'], + 'caption' => $info['caption'], + // Only store a SAS code in the filter cache, that will get replaced + // with the HTML for the rendered atom in + // mee_field_attach_view_alter(). + 'content' => '[scald=' . $info['sid'] . ':' . $info['context'] . ($info['options'] ? ' ' . $info['options'] : '') . ']', + )); + } + + $node = $info['node']; + $fragment = $dom->createDocumentFragment(); + $fragment->appendXML($html); + $node->parentNode->replaceChild($fragment, $node); + } + + $text = filter_dom_serialize($dom); + } + + return $text; +} + +/** + * Extract information about atom embeds found in a DOMDocument. + * + * @param DOMDocument $dom + * The DOMDocument. + * + * @return array + * Information about atom embeds found in $dom. Each value is an array with + * the following key/value pairs: + * - node: the DOMNode containing the embed. + * - sid: the atom id. + * - align: the embed alignment (left, right, center, none). + * - context: the atom render context. + * - options: the atom render options. + * - caption: the embed caption. + */ +function _mee_extract_widget_embed_info($dom) { + $embed_info = array(); + + // Collect the DOM nodes and the corresponding embed data. + $xpath = new DOMXPath($dom); + $nodes = $xpath->query("//div[@class='dnd-atom-wrapper']|//figure[@class='dnd-atom-wrapper']|//span[@class='dnd-atom-wrapper']"); + foreach ($nodes as $node) { + $info = array( + 'node' => $node, + 'sid' => $node->getAttribute('data-scald-sid'), + 'align' => $node->getAttribute('data-scald-align'), + 'context' => $node->getAttribute('data-scald-context'), + 'options' => urldecode($node->getAttribute('data-scald-options')), + 'caption' => '', + ); + // Extract the caption if present. + $result = $xpath->query("div[@class='dnd-caption-wrapper']|figcaption[@class='dnd-caption-wrapper']", $node); + if ($result->length) { + foreach ($result->item(0)->childNodes as $child) { + $info['caption'] .= $dom->saveXML($child); + } + } + $embed_info[] = $info; + } + + return $embed_info; +} diff --git a/docroot/sites/all/modules/contrib/scald/modules/fields/mee/mee.views.inc b/docroot/sites/all/modules/contrib/scald/modules/fields/mee/mee.views.inc new file mode 100644 index 00000000..93514f86 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/fields/mee/mee.views.inc @@ -0,0 +1,112 @@ + 'atom_sid', // This is the identifier field for the view. + 'title' => t('Resource Manager'), + 'help' => t('Contains embedded atoms and can be related to nodes.'), + 'weight' => -10, + ); + + $data['mee_resource']['table']['join'] = array( + 'scald_atoms' => array( + 'left_field' => 'sid', + 'field' => 'atom_sid', + ), + 'node' => array( + 'left_field' => 'nid', + 'field' => 'entity_id', + ), + ); + + $data['mee_resource']['entity_id'] = array( + 'title' => t('Content ID'), + 'help' => t('Relate content with an atom element.'), + 'relationship' => array( + 'handler' => 'views_handler_relationship', + 'base' => 'node', + 'base field' => 'nid', + 'label' => t('node id'), + 'skip base' => 'node', + ), + ); + + $data['mee_resource']['revision_id'] = array( + 'title' => t('Content Revision ID'), + 'help' => t('Relate content revision with an atom element.'), + 'relationship' => array( + 'handler' => 'views_handler_relationship', + 'base' => 'node', + 'base field' => 'vid', + 'label' => t('node rev id'), + 'skip base' => 'node', + ), + ); + + $data['mee_resource']['atom_sid'] = array( + 'title' => t('Atom ID'), + 'help' => t('Relate atom with the atom element.'), + 'field' => array( + 'handler' => 'views_handler_field', + 'click sortable' => TRUE, + ), + 'sort' => array( + 'handler' => 'views_handler_sort', + ), + 'filter' => array( + 'handler' => 'views_handler_filter_string', + ), + 'argument' => array( + 'handler' => 'views_handler_argument_string', + ), + 'relationship' => array( + 'handler' => 'views_handler_relationship', + 'base' => 'scald_atoms', + 'base field' => 'sid', + 'label' => t('atom'), + 'skip base' => 'scald_atoms', + ), + ); + + $data['mee_resource']['field'] = array( + 'title' => t('Embedding field'), + 'help' => t('Embedding text field id.'), + 'field' => array( + 'handler' => 'views_handler_field', + 'click sortable' => TRUE, + ), + 'sort' => array( + 'handler' => 'views_handler_sort', + ), + 'filter' => array( + 'handler' => 'views_handler_filter_string', + ), + 'argument' => array( + 'handler' => 'views_handler_argument_string', + ), + ); + + $data['mee_resource']['copyright'] = array( + 'title' => t('Caption'), + 'help' => t('Atom caption.'), + 'field' => array( + 'handler' => 'views_handler_field_markup', + 'format' => 'full_html', + ), + ); + + return $data; +} diff --git a/docroot/sites/all/modules/contrib/scald/modules/fields/mee/plugins/ckeditor/dialogs/dnd.js b/docroot/sites/all/modules/contrib/scald/modules/fields/mee/plugins/ckeditor/dialogs/dnd.js new file mode 100644 index 00000000..7c6fec08 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/fields/mee/plugins/ckeditor/dialogs/dnd.js @@ -0,0 +1,144 @@ +(function($) { +CKEDITOR.dialog.add('atomProperties', function(editor) { + var lang = editor.lang.dnd, atom; + + return { + title: lang.atom_properties, + minWidth: 420, + minHeight: 360, + onShow: function() { + if (!Drupal.dnd.atomCurrent) { + this.hide(); + // If the library is hidden, show it + var library_wrapper = $('.dnd-library-wrapper'); + if (library_wrapper.length && !library_wrapper.hasClass('library-on')) { + $('.scald-anchor', library_wrapper).click(); + } + else { + alert(lang.atom_none); + } + return; + } + var elm, data, sid, context, options, legend; + elm = $(Drupal.dnd.atomCurrent.$); + // Get the data directly from the comment markup. + data = Drupal.dnd.atomCurrent.getChild(0).getHtml() + .replace(/.*/, function(match, data) { + return decodeURIComponent(data); + }) + .replace(/^[\s\S]*$/, '$1'); + legend = Drupal.dnd.atomCurrent.getChild(1); + legend = legend ? legend.getHtml().replace( //g, function(match, data) { + return decodeURIComponent(data); + }).trim() : false; + + sid = data.split(':', 1)[0]; + context = data.substr(sid.length + 1).split(' ', 1)[0]; + options = (data.length > sid.length + context.length + 2) ? JSON.parse(data.substr(sid.length + context.length + 2)) : {link: ''}; + + atom = { + sid: sid, + context: context, + options: options, + legend: legend, + align: elm.hasClass('atom-align-left') ? 'left' : elm.hasClass('atom-align-right') ? 'right' : elm.hasClass('atom-align-center') ? 'center' : 'none' + }; + Drupal.dnd.fetchAtom(context, sid, function() { + var type = Drupal.dnd.Atoms[atom.sid].meta.type; + var me = CKEDITOR.dialog.getCurrent(); + var cmbContext = me.getContentElement('info', 'cmbContext'); + cmbContext.clear(); + for (var context in Drupal.settings.dnd.contexts[type]) { + cmbContext.add(Drupal.settings.dnd.contexts[type][context], context); + } + me.setupContent(atom); + }); + }, + onOk: function() { + Drupal.dnd.Atoms[atom.sid] = Drupal.dnd.Atoms[atom.sid] || {sid: atom.sid, contexts:{}, meta: {}}; + Drupal.dnd.Atoms[atom.sid].meta.legend = this.getValueOf('info', 'txtLegend'); + Drupal.dnd.Atoms[atom.sid].meta.align = this.getValueOf('info', 'cmbAlign'); + var context = this.getValueOf('info', 'cmbContext'); + atom.options.link = this.getValueOf('info', 'txtLink'); + atom.options.linkTarget = this.getValueOf('info', 'cmbLinkTarget'); + Drupal.dnd.fetchAtom(context, atom.sid, function() { + var html = Drupal.theme('scaldEmbed', Drupal.dnd.Atoms[atom.sid], context, atom.options); + CKEDITOR.dom.element.createFromHtml(html).replace(Drupal.dnd.atomCurrent); + Drupal.dnd.protectAtom($(editor.document.$).find('.dnd-atom-wrapper')); + }); + }, + contents: [ + { + id: 'info', + label: '', + title: '', + expand: true, + padding: 0, + elements: [ + { + id: 'txtLegend', + type: 'textarea', + rows: 5, + label: lang.properties_legend, + setup: function(atom) { + this.setValue(atom.legend); + } + }, + { + id: 'cmbContext', + type: 'select', + label: lang.properties_context, + items: [], + setup: function(atom) { + this.setValue(atom.context); + } + }, + { + id: 'cmbAlign', + type: 'select', + label: lang.properties_alignment, + items: [[lang.alignment_none, 'none'], [lang.alignment_left, 'left'], [lang.alignment_right, 'right'], [lang.alignment_center, 'center']], + setup: function(atom) { + this.setValue(atom.align); + } + }, + // @todo Expose a hook to remove this hardcoded option. + { + id: 'txtLink', + type: 'text', + label: lang.properties_link, + setup: function(atom) { + if (Drupal.dnd.Atoms[atom.sid].meta.type === 'image') { + this.setValue(atom.options.link); + this.enable(); + this.getElement().show(); + } + else { + this.disable(); + this.getElement().hide(); + } + } + }, + { + id: 'cmbLinkTarget', + type: 'select', + label: lang.properties_link_target, + items: [[lang.link_target_none, '_self'], [lang.link_target_blank, '_blank'], [lang.link_target_parent, '_parent']], + setup: function (atom) { + if (Drupal.dnd.Atoms[atom.sid].meta.type === 'image') { + this.setValue(atom.options.linkTarget); + this.enable(); + this.getElement().show(); + } + else { + this.disable(); + this.getElement().hide(); + } + } + } + ] + } + ] + }; +}); +})(jQuery); diff --git a/docroot/sites/all/modules/contrib/scald/modules/fields/mee/plugins/ckeditor/icons/atom.png b/docroot/sites/all/modules/contrib/scald/modules/fields/mee/plugins/ckeditor/icons/atom.png new file mode 100644 index 00000000..b47c4a19 Binary files /dev/null and b/docroot/sites/all/modules/contrib/scald/modules/fields/mee/plugins/ckeditor/icons/atom.png differ diff --git a/docroot/sites/all/modules/contrib/scald/modules/fields/mee/plugins/ckeditor/lang/en.js b/docroot/sites/all/modules/contrib/scald/modules/fields/mee/plugins/ckeditor/lang/en.js new file mode 100644 index 00000000..6eae395f --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/fields/mee/plugins/ckeditor/lang/en.js @@ -0,0 +1,27 @@ +// This file can be loaded very soon by Drupal because it has to prepare +// translated strings. If it is loaded before CKEditor, make sure that it does +// not throw an error. +if (typeof CKEDITOR !== 'undefined' && typeof CKEDITOR.plugins !== 'undefined') { + CKEDITOR.plugins.setLang('dnd', 'en', { + atom_properties: Drupal.t('Edit atom properties'), + atom_view: Drupal.t('View'), + atom_edit: Drupal.t('Edit'), + atom_cut: Drupal.t('Cut'), + atom_paste: Drupal.t('Paste'), + atom_delete: Drupal.t('Delete'), + atom_none: Drupal.t('Please select an atom first'), + properties_legend: Drupal.t('Legend'), + properties_context: Drupal.t('Context'), + properties_alignment: Drupal.t('Alignment'), + properties_link: Drupal.t('Link'), + properties_link_target: Drupal.t('Link Target'), + alignment_none: Drupal.t('None'), + alignment_left: Drupal.t('Left'), + alignment_right: Drupal.t('Right'), + alignment_center: Drupal.t('Center'), + link_target_none: Drupal.t('None'), + link_target_blank: Drupal.t('Blank'), + link_target_parent: Drupal.t('Parent'), + link_image_only: Drupal.t('This option is currently available for Image Atoms only.') + }); +} diff --git a/docroot/sites/all/modules/contrib/scald/modules/fields/mee/plugins/ckeditor/plugin.js b/docroot/sites/all/modules/contrib/scald/modules/fields/mee/plugins/ckeditor/plugin.js new file mode 100644 index 00000000..63c6ef49 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/fields/mee/plugins/ckeditor/plugin.js @@ -0,0 +1,246 @@ +(function ($, dnd) { +if (typeof dnd === 'undefined') { + CKEDITOR.plugins.add('dnd', {}); + return; +} + +dnd.atomCut = null; +dnd.atomCurrent = null; + +/** + * Prevents atom from being edited inside the editor. + */ +dnd.protectAtom = function(element) { + element + .attr('contentEditable', false) + // Allows atom legend to be edited inside the editor. + .find('.dnd-legend-wrapper').attr('contentEditable', true) + .trigger('onAtomProtect'); +} + +dnd.getWrapperElement = function(element) { + while (element && !(element.type === CKEDITOR.NODE_ELEMENT && element.hasClass('dnd-atom-wrapper'))) { + element = element.getParent(); + } + if (element) { + this.protectAtom($(element.$)); + this.atomCurrent = element; + } + return element; +}; + +CKEDITOR.plugins.add('dnd', { + lang: 'en', + requires: 'dialog,menu,htmlwriter', + + onLoad: function() { + }, + + init: function (editor) { + + // Assign the "insert atom into editor" method to be used for this editor. + editor.dndInsertAtom = function(sid) { + var atom = Drupal.dnd.sas2array(Drupal.dnd.Atoms[sid].sas); + var markup = Drupal.theme('scaldEmbed', Drupal.dnd.Atoms[sid], atom.context, atom.options); + editor.insertElement(CKEDITOR.dom.element.createFromHtml(markup)); + }; + + var path = this.path; + editor.on('mode', function (evt) { + var editor = evt.editor; + if (editor.mode == 'wysiwyg') { + editor.document.appendStyleSheet(path + '../../css/editor.css'); + editor.document.appendStyleSheet(path + '../../css/editor-global.css'); + dnd.protectAtom($(editor.document.$).find('.dnd-atom-wrapper')); + + if (editor && editor.element && editor.element.$ && editor.element.$.attributes['data-dnd-context']) { + var context = editor.element.$.attributes['data-dnd-context'].value; + Drupal.settings.dnd.contextDefault = context; + } + } + }); + + CKEDITOR.dialog.add('atomProperties', this.path + 'dialogs/dnd.js' ); + + editor.addCommand('atomProperties', new CKEDITOR.dialogCommand('atomProperties', { + allowedContent: 'div[*](*);iframe[*];img(*);object[*];param[*]' + })); + + editor.addCommand('atomDelete', { + exec: function (editor) { + dnd.atomCurrent.remove(); + }, + canUndo: false, + editorFocus: CKEDITOR.env.ie || CKEDITOR.env.webkit + }); + + editor.addCommand('atomCut', { + exec: function (editor) { + dnd.atomCut = dnd.atomCurrent; + dnd.atomCurrent.remove(); + }, + canUndo: false, + editorFocus: CKEDITOR.env.ie || CKEDITOR.env.webkit + }); + + editor.addCommand('atomPaste', { + exec: function (editor) { + editor.insertElement(dnd.atomCut); + dnd.atomCut = null; + }, + canUndo: false, + editorFocus: CKEDITOR.env.ie || CKEDITOR.env.webkit + }); + + editor.addCommand('atomView', { + exec: function (editor) { + var data = Drupal.dnd.atomCurrent.getChild(0).getHtml() + .replace(/.*/, function(match, data) { + return decodeURIComponent(data); + }) + .replace(/^[\s\S]*$/, '$1'); + var sid = data.split(':', 1)[0]; + window.open(Drupal.settings.basePath + Drupal.settings.pathPrefix + 'atom/' + sid); + } + }); + + editor.addCommand('atomEdit', { + exec: function (editor) { + var data = Drupal.dnd.atomCurrent.getChild(0).getHtml() + .replace(/.*/, function(match, data) { + return decodeURIComponent(data); + }) + .replace(/^[\s\S]*$/, '$1'); + var sid = data.split(':', 1)[0]; + var $wrapper = $("
    ", { + 'class' : 'wysiwyg-atom-edit-wrapper' + }); + var $link = $("
    ", { + 'target' : '_blank', + 'href' : Drupal.settings.basePath + Drupal.settings.pathPrefix + 'atom/' + sid + '/edit/nojs', + 'class' : 'ctools-use-modal ctools-modal-custom-style' + }).appendTo($wrapper); + Drupal.behaviors.ZZCToolsModal.attach($wrapper); + $link.click(); + } + }); + + // Register the toolbar button. + editor.ui.addButton && editor.ui.addButton('ScaldAtom', { + label: editor.lang.dnd.atom_properties, + command: 'atomProperties', + icon: this.path + 'icons/atom.png' + }); + + editor.on('contentDom', function (evt) { + editor.document.on('drop', function (evt) { + var atom = Drupal.dnd.sas2array(evt.data.$.dataTransfer.getData('Text')); + if (atom && Drupal.dnd.Atoms[atom.sid]) { + var context = editor.element.$.attributes['data-dnd-context'].value; + Drupal.dnd.fetchAtom(context, atom.sid, function() { + var markup = Drupal.theme('scaldEmbed', Drupal.dnd.Atoms[atom.sid], context, atom.options); + editor.insertElement(CKEDITOR.dom.element.createFromHtml(markup)); + }); + evt.data.preventDefault(); + } + dnd.protectAtom($(editor.document.$).find('.dnd-atom-wrapper')); + }); + + // Prevent paste, so the new clipboard plugin will not double insert the Atom. + editor.on('paste', function (evt) { + if (typeof evt.data.dataTransfer !== 'undefined' && Drupal.dnd.sas2array(evt.data.dataTransfer.getData('Text'))) { + return false; + } + }); + + editor.document.on('click', function (evt) { + var element = dnd.getWrapperElement(evt.data.getTarget()); + if (element) { + } + }); + + editor.document.on('mousedown', function (evt) { + var element = evt.data.getTarget(); + if (element.is('img')) { + element = dnd.getWrapperElement(element); + if (element) { + evt.cancel(); + //evt.data.preventDefault(true); + } + } + }); + }); + + editor.addMenuGroup('dnd'); + editor.addMenuItems({ + atomproperties: { + label: editor.lang.dnd.atom_properties, + command: 'atomProperties', + group: 'dnd' + }, + atomview : { + label: editor.lang.dnd.atom_view, + command: 'atomView', + group: 'dnd' + }, + atomedit : { + label: editor.lang.dnd.atom_edit, + command: 'atomEdit', + group: 'dnd' + }, + atomdelete: { + label: editor.lang.dnd.atom_delete, + command: 'atomDelete', + group: 'dnd' + }, + atomcut: { + label: editor.lang.dnd.atom_cut, + command: 'atomCut', + icon: 'cut', + group: 'dnd' + }, + atompaste: { + label: editor.lang.dnd.atom_paste, + command: 'atomPaste', + icon: 'paste', + group: 'dnd' + } + }); + + editor.contextMenu.addListener(function (element, selection) { + var menu = {}; + element = dnd.getWrapperElement(element); + if (element) { + menu.atomproperties = CKEDITOR.TRISTATE_OFF; + menu.atomview = CKEDITOR.TRISTATE_OFF; + menu.atomedit = CKEDITOR.TRISTATE_OFF; + menu.atomdelete = CKEDITOR.TRISTATE_OFF; + menu.atomcut = CKEDITOR.TRISTATE_OFF; + editor.contextMenu.items = []; + } + else if (dnd.atomCut) { + menu.atompaste = CKEDITOR.TRISTATE_OFF; + for (var index in editor.contextMenu.items) { + if (editor.contextMenu.items[index].name == 'paste') { + editor.contextMenu.items.splice(index, 1); + } + } + } + return menu; + }); + + editor.on('doubleclick', function(evt) { + var element = dnd.getWrapperElement(evt.data.element); + if (element) { + evt.data.dialog = 'atomProperties'; + } + }); + + editor.on('paste', function (evt) { + }); + }, + + afterInit: function (editor) { + } +}); +})(jQuery, Drupal.dnd); diff --git a/docroot/sites/all/modules/contrib/scald/modules/fields/mee/plugins/dndck4/dialogs/atomProperties.js b/docroot/sites/all/modules/contrib/scald/modules/fields/mee/plugins/dndck4/dialogs/atomProperties.js new file mode 100644 index 00000000..61ec4a19 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/fields/mee/plugins/dndck4/dialogs/atomProperties.js @@ -0,0 +1,117 @@ +(function($) { + +CKEDITOR.dialog.add('atomProperties', function(editor) { + var lang = editor.lang.dndck4; + + function showHideOptions(ctx) { + var dialog = ctx.getDialog(), + context = ctx.getValue(), + config = Drupal.settings.dnd.contexts_config[context], + widget = editor.widgets.focused, + atom = Drupal.dnd.Atoms[widget.data.sid], + type = atom.meta.type, + provider = atom.meta.provider; + + $.each(Drupal.dndck4.registeredOptions, function(){ + if ((this.mode == 'atom' && this.name == provider) || + (this.mode == 'player' && this.type == type && this.name == config.player[type]['*']) || + (this.mode == 'context' && this.type == type && this.name == context)) { + dialog.getContentElement('info', this.id).getElement().show(); + } + else { + dialog.getContentElement('info', this.id).getElement().hide(); + } + }); + } + + return { + title: lang.atom_properties, + minWidth: 420, + minHeight: 360, + contents: [ + { + id: 'info', + label: lang.tab_info, + title: '', + expand: true, + padding: 0, + elements: [ + { + id: 'cmbContext', + type: 'select', + label: lang.properties_context, + items: [], + setup: function(widget) { + // Populate the available context options for the atom type. + this.clear(); + var type = Drupal.dnd.Atoms[widget.data.sid].meta.type; + for (var context in Drupal.settings.dnd.contexts[type]) { + this.add(Drupal.settings.dnd.contexts[type][context], context); + } + this.setValue(widget.data.context); + }, + onChange: function(ev){ + showHideOptions(this); + }, + commit: function(widget) { + widget.setData('context', this.getValue()); + } + }, + { + id: 'cmbAlign', + type: 'select', + label: lang.properties_alignment, + items: [ [lang.alignment_none, 'none'], + [lang.alignment_left, 'left'], + [lang.alignment_right, 'right'], + [lang.alignment_center, 'center'] ], + setup: function(widget) { + this.setValue(widget.data.align); + }, + commit: function(widget) { + widget.setData('align', this.getValue()); + } + }, + { + id: 'chkCaption', + type: 'checkbox', + label: lang.properties_has_caption, + setup: function(widget) { + this.setValue(widget.data.usesCaption); + }, + commit: function(widget) { + widget.setData('usesCaption', this.getValue()); + } + } + ] + }, + { + id: 'advanced', + label: lang.tab_advanced, + title: '', + expand: true, + padding: 0, + elements: [ + { + id: 'txtClasses', + type: 'text', + label: lang.properties_classes, + setup: function(widget) { + var options = JSON.parse(widget.data.options); + if (options.additionalClasses) { + this.setValue(options.additionalClasses); + } + }, + commit: function(widget) { + var options = JSON.parse(widget.data.options); + options.additionalClasses = this.getValue(); + widget.setData('options', JSON.stringify(options)); + } + } + ] + } + ] + }; +}); + +})(jQuery); diff --git a/docroot/sites/all/modules/contrib/scald/modules/fields/mee/plugins/dndck4/icons/atom.png b/docroot/sites/all/modules/contrib/scald/modules/fields/mee/plugins/dndck4/icons/atom.png new file mode 100644 index 00000000..b47c4a19 Binary files /dev/null and b/docroot/sites/all/modules/contrib/scald/modules/fields/mee/plugins/dndck4/icons/atom.png differ diff --git a/docroot/sites/all/modules/contrib/scald/modules/fields/mee/plugins/dndck4/lang/en.js b/docroot/sites/all/modules/contrib/scald/modules/fields/mee/plugins/dndck4/lang/en.js new file mode 100644 index 00000000..6e6dd413 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/fields/mee/plugins/dndck4/lang/en.js @@ -0,0 +1,27 @@ +// This file can be loaded very soon by Drupal because it has to prepare +// translated strings. If it is loaded before CKEditor, make sure that it does +// not throw an error. +if (typeof CKEDITOR !== 'undefined' && typeof CKEDITOR.plugins !== 'undefined') { + CKEDITOR.plugins.setLang('dndck4', 'en', { + atom_properties: Drupal.t('Edit atom properties'), + atom_view: Drupal.t('View'), + atom_edit: Drupal.t('Edit'), + atom_refresh: Drupal.t('Refresh'), + atom_copy: Drupal.t('Copy'), + atom_cut: Drupal.t('Cut'), + atom_paste: Drupal.t('Paste'), + atom_delete: Drupal.t('Delete'), + atom_none: Drupal.t('Please select an atom first'), + properties_has_caption: Drupal.t('Add a caption'), + properties_classes: Drupal.t('CSS Classes'), + properties_context: Drupal.t('Context'), + properties_alignment: Drupal.t('Alignment'), + tab_advanced: Drupal.t('Advanced'), + tab_info: Drupal.t('Atom Properties'), + alignment_none: Drupal.t('None'), + alignment_left: Drupal.t('Left'), + alignment_right: Drupal.t('Right'), + alignment_center: Drupal.t('Center'), + link_image_only: Drupal.t('This option is currently available for Image Atoms only.') + }); +} diff --git a/docroot/sites/all/modules/contrib/scald/modules/fields/mee/plugins/dndck4/plugin.js b/docroot/sites/all/modules/contrib/scald/modules/fields/mee/plugins/dndck4/plugin.js new file mode 100644 index 00000000..40c90c23 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/fields/mee/plugins/dndck4/plugin.js @@ -0,0 +1,831 @@ +(function ($) { +// Drop out if for some reason Drupal.dnd is not available. +if (typeof Drupal.dnd === 'undefined') { + CKEDITOR.plugins.add('dndck4', {}); + return; +} + +CKEDITOR.plugins.add('dndck4', { + lang: 'en', + requires: 'widget', + + init: function (editor) { + var lang = editor.lang.dndck4; + + var path = this.path; + editor.on('mode', function (evt) { + if (editor.mode == 'wysiwyg') { + editor.document.appendStyleSheet(path + '../../css/editor.css'); + // editor-global.css is included in all pages, and already applies + // (possibly overriden by the theme) if we are in divarea mode, so we do + // not want to re-include it in this case. + if (!editor.editable().isInline()) { + editor.document.appendStyleSheet(path + '../../css/editor-global.css'); + } + } + }); + + editor.widgets.add('dndck4', { + dialog: 'atomProperties', + pathName: 'atom', + editables: { + caption: { + selector: '.dnd-caption-wrapper', + pathName: 'caption', + allowedContent: 'a[href]; strong; em' + } + }, + requiredContent: 'div span figure[data-scald-sid](dnd-atom-wrapper)', + allowedContent: {}, + + /** + * Turns the marker tag into the actual rendered widget. + */ + upcast: function(el, data) { + // Convert atoms embedded with the legacy plugin if needed. + el = Drupal.dndck4.convertLegacyEmbed(el); + + if (el.name == 'div' && el.hasClass('dnd-atom-wrapper')) { + // Initialize the widget data from the attributes, and remove the + // attributes from the element, as they would not stay up to date. + $.extend(data, Drupal.dndck4.dataFromAttributes(el.attributes)); + el.attributes = {class: el.attributes.class}; + // If we find caption content, set the data accordingly. + if (el.children[0] && el.children[0].type == CKEDITOR.NODE_ELEMENT && el.children[0].hasClass('dnd-caption-wrapper')) { + $.extend(data, {usesCaption: true}); + } + // We're done. The HTML for the expanded widget is fetched using AJAX + // in the data() callback. + return el; + } + }, + + /** + * Turns the rendered widget back into the marker tag. + */ + downcast: function(el) { + var caption = ''; + if (this.data.usesCaption) { + caption = this.editables.caption.getHtml(); + } + var html = Drupal.dndck4.downcastedHtml(this.data, caption); + return CKEDITOR.htmlParser.fragment.fromHtml(html); + }, + + /** + * Do stuff after the widget has been initialized. + */ + init: function() { + // Add a shortcut method so that the widget can update the atom render + // itself. + this.refreshAtom = function() { + Drupal.dndck4.fetchExpandedContent(this); + }; + }, + + /** + * Updates the widget markup when the data changes (also runs after + * initial creation or upcast). + */ + data: function() { + // Don't refresh dragged atom until it's actually dropped. + if (this.element.$.parentNode.parentNode) { + this.refreshAtom(); + } + } + }); + + // Assign the "insert atom into editor" method to be used by the Library on + // this editor. + editor.dndInsertAtom = function(sid) { + var range = editor.getSelection().getRanges()[0]; + var data = Drupal.dndck4.getDefaultInsertData(editor, Drupal.dnd.Atoms[sid]); + var caption = Drupal.dnd.Atoms[sid].meta.legend || ''; + Drupal.dndck4.insertNewWidget(editor, range, data, caption); + }; + + editor.on('instanceReady', function (evt) { + // Listen to atom drags from the Library. Namespace the event so that we + // can unbind it when the editor is disabled. + $(document).bind('dragstart.dndck4_' + editor.name, function (evt) { + var editable = editor.editable(); + if (Drupal.dnd.currentAtom && $(editable.$).is(':visible')) { + var dragInfo = Drupal.dnd.sas2array(Drupal.dnd.currentAtom); + var atomInfo = Drupal.dnd.Atoms[dragInfo.sid]; + var data = Drupal.dndck4.getDefaultInsertData(editor, atomInfo); + var caption = atomInfo.meta.legend || ''; + var widget = Drupal.dndck4.createNewWidget(editor, data, caption); + Drupal.dndck4.onLibraryAtomDrag.call(widget, atomInfo); + } + }); + }); + + editor.on('destroy', function (evt) { + // Remove the drag listener so that it can be safely re-added if the + // editor is re-created. + $(document).unbind('dragstart.dndck4_' + editor.name); + }); + + // Setup the "atom properties" dialog. + CKEDITOR.dialog.add('atomProperties', this.path + 'dialogs/atomProperties.js' ); + editor.ui.addButton('ScaldAtom', { + label: lang.atom_properties, + command: 'atomProperties', + icon: this.path + 'icons/atom.png' + }); + editor.addCommand('atomProperties', { + allowedContent: 'div span figure figcaption[data-scald-sid,data-scald-align,data-scald-context,data-scald-options,data-scald-type](dnd-atom-wrapper,dnd-caption-wrapper)', + exec: function (editor) { + var widget = editor.widgets.focused; + if (widget && widget.name == 'dndck4') { + widget.edit(); + } + else { + // If the library is hidden, show it + var library_wrapper = $('.dnd-library-wrapper'); + if (library_wrapper.length && !library_wrapper.hasClass('library-on')) { + $('.scald-anchor', library_wrapper).click(); + } + else { + alert(lang.atom_none); + } + } + } + }); + + editor.addCommand('atomView', { + exec: function (editor) { + var widget = editor.widgets.focused; + window.open(Drupal.settings.basePath + Drupal.settings.pathPrefix + 'atom/' + widget.data.sid); + } + }); + + editor.addCommand('atomEdit', { + exec: function (editor) { + var widget = editor.widgets.focused; + var $wrapper = $("
    ", { + 'class' : 'wysiwyg-atom-edit-wrapper' + }); + var $link = $("", { + 'target' : '_blank', + 'href' : Drupal.settings.basePath + Drupal.settings.pathPrefix + 'atom/' + widget.data.sid + '/edit/nojs', + 'class' : 'ctools-use-modal ctools-modal-custom-style' + }).appendTo($wrapper); + Drupal.behaviors.ZZCToolsModal.attach($wrapper); + $link.click(); + $(document).one("CToolsDetachBehaviors", function() { + widget.refreshAtom(); + }); + } + }); + + editor.addCommand('atomRefresh', { + exec: function (editor) { + var widget = editor.widgets.focused; + widget.refreshAtom(); + } + }); + + // Setup right-click menu items. + editor.addMenuGroup('dnd', -100); + editor.addMenuItems({ + atomproperties: { + label: lang.atom_properties, + command: 'atomProperties', + group: 'dnd' + }, + atomview : { + label: lang.atom_view, + command: 'atomView', + group: 'dnd' + }, + atomedit : { + label: lang.atom_edit, + command: 'atomEdit', + group: 'dnd' + }, + atomrefresh : { + label: lang.atom_refresh, + command: 'atomRefresh', + group: 'dnd' + }, + atomdelete: { + label: lang.atom_delete, + command: 'atomDelete', + group: 'dnd' + }, + atomcopy: { + label: lang.atom_copy, + command: 'atomCopy', + icon: 'copy', + group: 'dnd' + }, + atomcut: { + label: lang.atom_cut, + command: 'atomCut', + icon: 'cut', + group: 'dnd' + }, + atompaste: { + label: lang.atom_paste, + command: 'atomPaste', + icon: 'paste', + group: 'dnd' + } + }); + editor.contextMenu.addListener(function (element, selection) { + var menu = {}; + var widget = editor.widgets.getByElement(element); + if (widget && widget.name == 'dndck4') { + menu.atomproperties = CKEDITOR.TRISTATE_OFF; + menu.atomview = CKEDITOR.TRISTATE_OFF; + menu.atomedit = CKEDITOR.TRISTATE_OFF; + menu.atomrefresh = CKEDITOR.TRISTATE_OFF; + menu.atomcopy = CKEDITOR.TRISTATE_OFF; + menu.atomcut = CKEDITOR.TRISTATE_OFF; + menu.atomdelete = CKEDITOR.TRISTATE_OFF; + editor.contextMenu.items = []; + } + else if (Drupal.dndck4.atomPaste) { + menu.atompaste = CKEDITOR.TRISTATE_OFF; + for (var index in editor.contextMenu.items) { + if (editor.contextMenu.items[index].name == 'paste') { + editor.contextMenu.items.splice(index, 1); + } + } + } + return menu; + }); + editor.addCommand('atomDelete', { + exec: function (editor) { + editor.fire('saveSnapshot'); + editor.fire('lockSnapshot', {dontUpdate: 1}); + + var widget = editor.widgets.focused; + Drupal.detachBehaviors(widget.element.$); + widget.wrapper.remove(); + widget.destroy(true); + + editor.fire('unlockSnapshot'); + editor.fire('saveSnapshot'); + }, + canUndo: false, + editorFocus: CKEDITOR.env.ie || CKEDITOR.env.webkit + }); + editor.addCommand('atomCut', { + exec: function (editor) { + editor.fire('saveSnapshot'); + editor.fire('lockSnapshot', {dontUpdate: 1}); + + var widget = editor.widgets.focused; + Drupal.dndck4.atomPaste = { + data: widget.data, + caption: widget.editables.caption.getHtml() + }; + Drupal.detachBehaviors(widget.element.$); + widget.wrapper.remove(); + widget.destroy(true); + + editor.fire('unlockSnapshot'); + editor.fire('saveSnapshot'); + }, + canUndo: false, + editorFocus: CKEDITOR.env.ie || CKEDITOR.env.webkit + }); + editor.addCommand('atomCopy', { + exec: function (editor) { + var widget = editor.widgets.focused; + Drupal.dndck4.atomPaste = { + data: widget.data, + caption: widget.editables.caption.getHtml() + }; + }, + canUndo: false, + editorFocus: CKEDITOR.env.ie || CKEDITOR.env.webkit + }); + editor.addCommand('atomPaste', { + exec: function (editor) { + if (Drupal.dndck4.atomPaste) { + var range = editor.getSelection().getRanges()[0]; + // insertNewWidget already handles snapshot. + Drupal.dndck4.insertNewWidget(editor, range, Drupal.dndck4.atomPaste.data, Drupal.dndck4.atomPaste.caption); + } + }, + canUndo: false, + editorFocus: CKEDITOR.env.ie || CKEDITOR.env.webkit + }); + + }, + + afterInit: function (editor) { + function setupAlignCommand(value) { + var command = editor.getCommand('justify' + value); + if (command) { + if (value in {right: 1, left: 1, center: 1}) { + command.on('exec', function (event) { + var widget = editor.widgets.focused; + if (widget && widget.name === 'dndck4') { + widget.setData({align: value}); + } + }); + } + + command.on('refresh', function (event) { + var widget = editor.widgets.focused, + allowed = { left: 1, center: 1, right: 1 }, + align; + + if (widget && widget.name === 'dndck4') { + align = widget.data.align; + + this.setState( + (align === value) ? CKEDITOR.TRISTATE_ON : (value in allowed) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED); + + event.cancel(); + } + }); + } + } + + // Customize the behavior of the alignment commands. + setupAlignCommand('left'); + setupAlignCommand('right'); + setupAlignCommand('center'); + } + +}); + +/** + * Helper methods and properties. + */ +Drupal.dndck4 = { + + registeredCallbacks: [], + + registerCallback: function (hook, callback) { + Drupal.dndck4.registeredCallbacks.push({hook: hook, callback: callback}); + }, + + unRegisterCallback: function (hook) { + Drupal.dndck4.registeredCallbacks = $.map(Drupal.dndck4.registeredCallbacks, function(item, index) { + if (item.hook == hook || item.hook.lastIndexOf(hook + '.', 0) === 0) { + return null; + } + return item; + }); + }, + + invokeCallbacks: function(hook, param) { + $.each(Drupal.dndck4.registeredCallbacks, function(i) { + var name = this.hook.split('.')[0]; + if (name == hook) { + if (typeof this.callback === 'function') { + this.callback(param); + } + } + }); + }, + + registeredOptions: [], + + registerOptions: function(id, type, mode, name) { + var found = false; + $.each(Drupal.dndck4.registeredOptions, function() { + if (found = (this.id == id && this.type == type && this.mode == mode && this.name == name)) { + return false; + } + }); + if (!found) { + var item = {id: id, type: type, mode: mode, name: name}; + Drupal.dndck4.registeredOptions.push(item); + } + }, + + addOption: function(id, type, mode, name, callback) { + $('body').once(id, function() { + if (typeof CKEDITOR === 'undefined') { + // CKEditor is not available yet, lets try a little bit later. + setTimeout(function() { + // If It's still not available, stop trying. + if (typeof CKEDITOR !== 'undefined') { + Drupal.dndck4.processOption(id, type, mode, name, callback); + } + }, 1000); + } + else { + Drupal.dndck4.processOption(id, type, mode, name, callback); + } + }); + }, + + processOption: function(id, type, mode, name, callback) { + CKEDITOR.on('dialogDefinition', function(ev) { + if (typeof Drupal.dndck4 !== 'undefined') { + if (ev.data.name == 'atomProperties') { + var dialogDefinition = ev.data.definition; + var infoTab = dialogDefinition.getContents('info'); + callback.call(this, infoTab, dialogDefinition); + Drupal.dndck4.registerOptions(id, type, mode, name); + } + } + }); + }, + + dataFromAttributes: function (attributes) { + return { + sid : attributes['data-scald-sid'], + type : attributes['data-scald-type'], + context : attributes['data-scald-context'], + // 'options' is kept as a JSON string, so that widget.setData() correctly + // detects value changes. + options : attributes['data-scald-options'] ? decodeURIComponent(attributes['data-scald-options']) : '{}', + align : attributes['data-scald-align'], + usesCaption : false + } + }, + + attributesFromData: function (data) { + return { + 'data-scald-sid' : data.sid, + 'data-scald-type' : data.type, + 'data-scald-context' : data.context, + 'data-scald-options' : (data.options == '{}') ? '' : encodeURIComponent(data.options), + 'data-scald-align' : data.align + // Note : we don't include "usesCaption", that is derived from the actual + // presence of a caption in the downcasted HTML. + } + }, + + implodeAttributes: function (attributes) { + var parts = []; + $.each(attributes, function(key, value) { + parts.push(key + "='" + value + "'"); + }); + return parts.join(' '); + }, + + getDefaultInsertData: function (editor, atomInfo) { + var sasData = Drupal.dnd.sas2array(atomInfo.sas), data; + data = { + sid : atomInfo.sid, + type: atomInfo.meta.type, + // The default context for newly embedded atoms is a setting of the text + // field, and is placed in the 'data-dnd-context' attribute on the + // textarea. + context : (editor.element.$.attributes['data-dnd-context']) ? + editor.element.$.attributes['data-dnd-context'].value : + Drupal.settings.dnd.contextDefault, + // Modules can use hook_scald_dnd_library_item_alter() to add default + // options in the sas code for the atom. + options : sasData.options || '{}', + align : 'none', + usesCaption : Drupal.settings.dnd.usesCaptionDefault + }; + + Drupal.dndck4.invokeCallbacks('GetDefaultInsertData', data); + + return data; + }, + + createNewWidget: function(editor, data, caption) { + // Generate the downcasted HTML for the widget, and run upcast() on it. + var html = Drupal.dndck4.downcastedHtml(data, caption); + var element = CKEDITOR.htmlParser.fragment.fromHtml(html).children[0]; + element = editor.widgets.registered.dndck4.upcast(element); + // Turn it into a proper DOM element, and insert it. + element = CKEDITOR.dom.element.createFromHtml(element.getOuterHtml()); + // Promote it to a widget. This runs the init() / data() methods, which + // fetches the expanded HTML for the atom embed. + return editor.widgets.initOn(element, 'dndck4', data); + }, + + insertWidget: function(widget, editor, range) { + // Group all following operations in one snapshot. + editor.fire('saveSnapshot'); + editor.fire('lockSnapshot', {dontUpdate: 1}); + + editor.editable().insertElementIntoRange(widget.wrapper, range); + + widget.ready = true; + widget.fire('ready'); + widget.focus(); + + // Unlock snapshot and save new one, which will contain all changes done + // in this method. + editor.fire('unlockSnapshot'); + editor.fire('saveSnapshot'); + }, + + insertNewWidget: function(editor, range, data, caption) { + var widget = Drupal.dndck4.createNewWidget(editor, data, caption); + Drupal.dndck4.insertWidget(widget, editor, range); + widget.refreshAtom(); + }, + + // Heavily inspired from CKE widget plugin's onBlockWidgetDrag(). + onLibraryAtomDrag: function (atomInfo) { + var widget = this, + finder = widget.repository.finder, + locator = widget.repository.locator, + liner = widget.repository.liner, + editor = widget.editor, + editable = editor.editable(), + listeners = [], + sorted = [], + dropRange = null; + var relations, locations, y; + + // Mark dragged widget for repository#finder. + this.repository._.draggedWidget = widget; + + // Dropping into an empty CKEditor requires special logic. + var editableHasContent = (editable.getFirst() != null); + + // Determine candidate drop locations. + if (editableHasContent) { + // Use the finder to harvest all possible drop locations. + relations = finder.greedySearch(); + } + else { + // If no content yet, hardcode one single drop location, which is the + // editable itself. + var element = new CKEDITOR.dom.element(editable.$); + relations = {0: { + element: element, + elementRect: element.getClientRect(), + type: CKEDITOR.LINEUTILS_BEFORE + }} + } + + var eventBuffer = CKEDITOR.tools.eventsBuffer(50, function () { + locations = locator.locate(relations); + // There's only a single line displayed for D&D. + sorted = locator.sort(y, 1); + if (sorted.length) { + liner.prepare(relations, locations); + liner.placeLine(sorted[0]); + liner.cleanup(); + } + dropRange = finder.getRange(sorted[0]); + }); + + // Let's have the "dragging cursor" over entire editable. + editable.addClass('cke_widget_dragging'); + + // Cache mouse position so it is re-used in events buffer. + listeners.push(editable.on('dragover', function (evt) { + y = evt.data.$.clientY; + eventBuffer.input(); + })); + + // Listen to the 'drop' event: + // - on the editable div if the CKEditor is in "divarea" mode, + // - on the iframe document if the CKEditor is in "iframe" mode. + var dropElement = editable.isInline() ? editable : editor.document; + // On Chrome, the 'drop' event on the iframe document does not catches drops + // made outside the body content, which might be smaller than the iframe. + // Temporarily extend its height so that the whole editor is a drop area. + if (!editable.isInline()) { + var previousMinHeight = editable.getStyle('min-height'); + var documentHeight = $(editor.document.$).height() + 'px'; + var bodyMargin = '(' + $(editable.$).css('marginTop') + ' + ' + $(editable.$).css('marginBottom') + ')'; + var height = 'calc( ' + documentHeight + ' - ' + bodyMargin + ' )'; + editable.setStyle('min-height', height); + } + // On drop, insert the atom and cleanup the events. + listeners.push(dropElement.on('drop', function (evt) { + evt.data.preventDefault(); + var range; + if (dropRange && editableHasContent && !CKEDITOR.tools.isEmpty(liner.visible)) { + range = dropRange; + } + else { + // If no liner position was determined, insert at the end of the + // editable. + range = editor.createRange(); + range.moveToElementEditablePosition(editable, true); + } + Drupal.dndck4.insertWidget(widget, editor, range); + widget.refreshAtom(); + cleanupDrag(true); + })); + + // Prevent paste, so the new clipboard plugin will not double insert the Atom. + listeners.push(editor.on('paste', function (evt) { + return false; + })); + + // On dragend (without drop), cleanup the events. + listeners.push(CKEDITOR.document.on('dragend', function (evt) { + cleanupDrag(); + })); + + // On dragleave, hide the liner. + // @todo doesn't work, dragleave doesn't have a reliable implementation + // across browsers... +// listeners.push(editable.on('dragleave', function (evt) { +// liner.hideVisible(); +// console.log('dragleave'); +// })); + + function cleanupDrag(dropped) { + // Stop observing events. + eventBuffer.reset(); + var l; + while (l = listeners.pop()) { + l.removeListener(); + } + // Clean-up unused widget. + if (!dropped) { + widget.repository._.draggedWidget = null; + widget.repository.destroy(widget, true); + } + // Clean-up all remaining lines. + liner.hideVisible(); + // Clean-up custom cursor for editable. + editable.removeClass('cke_widget_dragging'); + // Reset the min-height. + if (!editable.isInline()) { + editable.setStyle('min-height', previousMinHeight); + } + } + }, + + fetchExpandedContent: function (widget) { + var data = widget.data; + // Use a throwaway Drupal.ajax object to fetch the HTML. Using Drupal's Ajax + // framework lets us retrieve out-of-band assets (JS, CSS) and attach + // behaviors. + var ajax = new Drupal.ajax('dnd-library', $('#dnd-library'), { + url: Drupal.settings.basePath + Drupal.settings.pathPrefix + 'atom/ajax-widget-expand/' + data.sid + '?' + $.param({ + context: data.context, + options: encodeURIComponent(data.options), + align: data.align + }), + progress: {type: 'none'}, + // The call is triggered programmatically, this event is not used. + event: 'dndck4_dummy_event', + // Add the target for the insertRenderedAtom directly as a custom + // property, this avoids passing the editor name and target ID through the + // network roundtrip. + dndck4_widget: widget + }); + // Trigger the call manually. + ajax.eventResponse(ajax.element); + }, + + /** + * AJAX 'dndck4_cache_atom_metadatadata' command: cache metadata about atoms. + */ + AjaxCacheAtomMetadata: function(ajax, response, status) { + var atomInfo = response.data; + if (Drupal.dnd.Atoms[atomInfo.sid]) { + $.extend(true, Drupal.dnd.Atoms[atomInfo.sid], atomInfo); + } + else { + Drupal.dnd.Atoms[atomInfo.sid] = atomInfo; + } + }, + + /** + * AJAX 'dndck4_expand_widget' command: replace the widget content with the + * expanded HTML generated on the server_side. + */ + AjaxExpandWidget: function(ajax, response, status) { + var widget = ajax.dndck4_widget; + var widgetElement = widget.element; + + // First, detach behaviors for the current embed. + Drupal.detachBehaviors(widgetElement.$, response.settings || ajax.settings || Drupal.settings); + + // The caption was not sent over the network and is not part of the HTML we + // received. Grab it before we replace the HTML, so that we can re-add it + // after that. + var caption = ''; + if (widget.editables.caption) { + caption = widget.editables.caption.getHtml(); + + if (caption == '') { + caption = Drupal.dnd.Atoms[widget.data.sid].meta.legend || ''; + } + widget.destroyEditable('caption'); + } + + // Merge the content of the new markup into the existing widget element, + // that we want to keep in place. + var newElement = CKEDITOR.dom.element.createFromHtml(response.data); + // Take the classes of the outer div of the new markup. + widgetElement.setAttribute('class', 'cke_widget_element ' + newElement.getAttribute('class')); + // Replace the inner HTML. + widgetElement.setHtml(newElement.getHtml()); + + // Notify external scripts of new atom rendering. + Drupal.dndck4.invokeCallbacks('AjaxExpandWidget', widget); + + // Initialize the new caption editable, and fill it with the previous + // caption. + widget.initEditable('caption', widget.definition.editables.caption); + var captionElement = widget.editables.caption; + captionElement.setHtml(caption); + // Hide the editable if the "Use caption" checkbox is unchecked. This lets + // us preserves the current caption in the HTML in case the checkbox is + // checked back in the same editing session. + if (!widget.data.usesCaption) { + captionElement.setAttribute('style', 'display:none'); + } + + // Finally, re-attach behaviors on the newly inserted markup. + Drupal.attachBehaviors(widgetElement.$, response.settings || ajax.settings || Drupal.settings); + }, + + /** + * Returns the downcasted HTML for a widget. + * + * This is a marker tag that gets stored in the database, and is transformed: + * - on edit, by the widget upcast step. + * - on display, by the 'mee_scald_widgets' text filter on the PHP side. + * + * This is not a theme function, since the marker tag use for storage should + * not be customized. + * + * @param {object} data + * The widget data. + * @param {string} caption + * The widget caption. + * + * @returns {string} + * The downcasted HTML for the widget. + */ + downcastedHtml: function(data, caption) { + var html = '
    '; + if (data.usesCaption && caption) { + html += '
    ' + caption + '
    '; + } + else { + // The div cannot be empty or it will be discarded by CKEditor. + html += ''; + } + html += '
    '; + return html; + }, + + /** + * Converts atoms embedded with the legacy (non-widget) scald plugin. + * + * @param {CKEDITOR.htmlParser.element} el + * The candidate element to convert. It will be replaced in the DOM by an + * element with the new widget markup. + */ + convertLegacyEmbed: function (el) { + if (el.name == 'div' && el.hasClass('dnd-atom-wrapper') && !el.attributes['data-scald-sid'] + && el.children[0] && el.children[0].type == CKEDITOR.NODE_ELEMENT && el.children[0].hasClass('dnd-drop-wrapper')) { + var sas = el.children[0].getHtml(); + var data = Drupal.dnd.sas2array(sas); + if (typeof data === 'undefined') { + // Check for any markup that can be converted to sas first. + sas = Drupal.dnd.htmlcomment2sas(sas); + if (typeof sas !== 'undefined') { + data = Drupal.dnd.sas2array(sas); + } + } + if (typeof data === 'undefined') { + // Remove the Atom Wrapper so we don't process it again. + el.removeClass('dnd-atom-wrapper'); + // Remove the Drop wrapper so it doesn't process. + el.children[0].removeClass('dnd-drop-wrapper'); + } + else { + // Grab the atom type and alignment. + data.align = 'none'; + $.each(el.attributes['class'].split(/\s+/), function (index, item) { + if (item.substr(0, 5) == 'type-') { + data.type = item.substr(5); + } + else if (item.substr(0, 11) == 'atom-align-') { + data.align = item.substr(11); + } + }); + // Grab the caption if present. + var caption = ''; + data.usesCaption = false; + if (el.children[1] && el.children[1].type == CKEDITOR.NODE_ELEMENT && el.children[1].hasClass('dnd-legend-wrapper')) { + caption = el.children[1].getHtml(); + data.usesCaption = true; + } + // Replace the element with the markup for a downcasted widget. + var html = Drupal.dndck4.downcastedHtml(data, caption); + var newEl = CKEDITOR.htmlParser.fragment.fromHtml(html).children[0]; + el.replaceWith(newEl); + el = newEl; + } + } + return el; + } + +}; + +// Declare our custom commands for the AJAX framework. +Drupal.ajax.prototype.commands.dndck4_cache_atom_metadatadata = Drupal.dndck4.AjaxCacheAtomMetadata; +Drupal.ajax.prototype.commands.dndck4_expand_widget = Drupal.dndck4.AjaxExpandWidget; + +})(jQuery); diff --git a/docroot/sites/all/modules/contrib/scald/modules/fields/mee/plugins/sas.inc b/docroot/sites/all/modules/contrib/scald/modules/fields/mee/plugins/sas.inc new file mode 100644 index 00000000..724e8be4 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/fields/mee/plugins/sas.inc @@ -0,0 +1,18 @@ + t('Scald SAS conversion'), + 'vendor url' => 'http://drupal.org/project/scald', + 'icon title' => t('Convert from HTML to SAS, and vice-versa'), + 'settings' => array(), + ); + return $plugins; +} diff --git a/docroot/sites/all/modules/contrib/scald/modules/fields/mee/plugins/sas/images/sas.png b/docroot/sites/all/modules/contrib/scald/modules/fields/mee/plugins/sas/images/sas.png new file mode 100644 index 00000000..33d570f1 Binary files /dev/null and b/docroot/sites/all/modules/contrib/scald/modules/fields/mee/plugins/sas/images/sas.png differ diff --git a/docroot/sites/all/modules/contrib/scald/modules/fields/mee/plugins/sas/sas.css b/docroot/sites/all/modules/contrib/scald/modules/fields/mee/plugins/sas/sas.css new file mode 100644 index 00000000..e69de29b diff --git a/docroot/sites/all/modules/contrib/scald/modules/fields/mee/plugins/sas/sas.js b/docroot/sites/all/modules/contrib/scald/modules/fields/mee/plugins/sas/sas.js new file mode 100644 index 00000000..5616a935 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/fields/mee/plugins/sas/sas.js @@ -0,0 +1,22 @@ +(function($) { +// Define the WYSIWYG plugin. +Drupal.wysiwyg.plugins.sas = { + invoke: function (data, settings, instanceId) { + alert(Drupal.t('This button does nothing. The conversion happens on attach/detach.')); + }, + + /** + * Attach function, called when a rich text editor loads. + */ + attach: function (content, settings, instanceId) { + return Drupal.settings.mee.sas && Drupal.dnd ? Drupal.dnd.sas2html(content) : content; + }, + + /** + * Detach function, called when a rich text editor detaches. + */ + detach: function (content, settings, instanceId) { + return Drupal.settings.mee.sas && Drupal.dnd ? Drupal.dnd.html2sas(content) : content; + } +}; +})(jQuery); diff --git a/docroot/sites/all/modules/contrib/scald/modules/library/dnd/README.txt b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/README.txt new file mode 100644 index 00000000..defc6055 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/README.txt @@ -0,0 +1,16 @@ +This module makes a bridge to drag and drop your atoms from any library to +a text field (it could be a textfield, plain textarea or richtext textarea). +A default library (scald_dnd_library) is also shipped within the project. + +Each dropped atom contain 2 parts: + +- The "editor" part: is the rendered atom itself. The default library + (scald_dnd_library) uses by default the sdl_editor_representation context to + render it. This part should generally not be modified, it could be in HTML + format, or the token-like SAS (Scald Atom Shorthand) format and it is updated + automatically. + +- The "legend" part: usually is the atom title and atom author. You can modify, + or even delete, text in this part. A provider can omit this part by setting + $atom->omit_legend = TRUE. + diff --git a/docroot/sites/all/modules/contrib/scald/modules/library/dnd/css/dnd-library.css b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/css/dnd-library.css new file mode 100644 index 00000000..a38398e0 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/css/dnd-library.css @@ -0,0 +1,573 @@ +/** + * @file + * This file contains a sample library theming, + * mainly trying to reshape Views' exposed filters + * to something more suitable for such a tiny space. + */ +.dnd-library-wrapper { + float: right; + width: 25%; +} + +.dnd-library-wrapper .header, +.dnd-library-wrapper .view-filters, +.dnd-library-wrapper .attachment-before { + padding: 3px 4px; +} + +.dnd-library-wrapper .attachment-before { + border-top-width: 0; +} + +.dnd-library-wrapper .views-savedsearches-container fieldset { + margin: 0; +} + +.dnd-library-wrapper .views-exposed-form .form-item { + width: auto; +} + +.dnd-library-wrapper .view-filters, +.dnd-library-wrapper .view-filters input, +.dnd-library-wrapper .view-filters select +.dnd-library-wrapper .view-filters textarea { + font-size: .875em; +} + +.dnd-library-wrapper .view-filters fieldset { + padding: 0; + border-width: 1px 0 0; +} + +.dnd-library-wrapper .view-filters .date-views-filter-wrapper { + min-width: 160px; +} + +.dnd-library-wrapper .view-filters .views-exposed-widget { + margin-right: 5px; + float: none; +} + +.dnd-library-wrapper .view-filters .date-month .form-item select { + margin-right: 0; +} + +.dnd-library-wrapper .header h3, .mee-ressource-manager caption { + font-size: 12px; + font-weight: bold; +} + +.dnd-library-wrapper .header form { + font-size: 10px; +} + +.dnd-library-wrapper .library { + border: 1px solid #aaa; + float: left; +} + +.dnd-library-wrapper .editor-item { + border-bottom: 2px solid #E4E1DD; + clear: left; + color: #7f7f7f; + position: relative; + padding: 4px 0; +} + +.dnd-library-wrapper .editor-item:hover { + background-color: #e3f4f0; +} + +.dnd-library-wrapper .editor-item.bt-active { + background: #eee; +} + +.dnd-library-wrapper .editor-item .image { + float: left; + width: 52px; +} + +.dnd-library-wrapper .editor-item .image img { + width: 48px; + height: auto; + cursor: move; +} + +.dnd-library-wrapper .editor-item:hover img, +.dnd-library-wrapper .editor-item.bt-active img { + outline: 1px solid #68baf9; +} + +.dnd-library-wrapper .editor-item .meta { + margin-left: 0 !important; /* @todo remove - quickfix to override incorrect CSS in theme */ + background-repeat: no-repeat; + background-position: 100% 0; +} + +.dnd-library-wrapper .editor-item .meta.type-audio { + background-image: url('../icons/audio.png'); +} + +.dnd-library-wrapper .editor-item .meta.type-image { + background-image: url('../icons/image.png'); +} + +.dnd-library-wrapper .editor-item .meta.type-video { + background-image: url('../icons/video.png'); +} + +.dnd-library-wrapper .editor-item .meta.type-soundslide { + background-image: url('../icons/soundslide.png'); +} + +.dnd-library-wrapper .editor-item .title { + color: #666; + font-weight: bold; + font-size: 13px; + line-height: 1.3; + margin-bottom: 3px; + padding-right: 20px; +} + +.dnd-library-wrapper .editor-item .date, +.dnd-library-wrapper .editor-item .author { + font-size: 10px; +} + +.dnd-library-wrapper .author a { + color: #7f7f7f; +} + +.dnd-library-wrapper .editor-item .links { + float: right; + font-size: 11px; + line-height: 15px; + margin-right: 5px; +} + +.dnd-library-wrapper .editor-item .links li { + padding: 0 0 0 10px; +} + +.dnd-library-wrapper .editor-item .sizes { + float: left; + width: 50px; + margin-top: 14px; + line-height: 1; +} + +.dnd-library-wrapper .editor-item .sizes ul { + list-style-type: none; + margin: 0; +} + +.dnd-library-wrapper .editor-item .sizes ul li { + background: none; + list-style-type: none; + display: inline; + padding: 0; + margin: 0 0 0 2px; +} + +.dnd-library-wrapper .editor-item .sizes a { + float: left; + display: block; + font-size: 9px; + line-height: 9px; + margin-bottom: 2px; + width: 19px; + text-align: center; +} + +.dnd-library-wrapper .editor-item .sizes a:link, +.dnd-library-wrapper .editor-item .sizes a:visited, +.dnd-library-wrapper .editor-item .sizes a:active { + border: 1px solid #888; + color: #fff; + cursor: move; + text-align: center; +} + +.dnd-library-wrapper .editor-item .sizes a:hover, +.dnd-library-wrapper .editor-item .sizes a.dnd-inserted:link, +.dnd-library-wrapper .editor-item .sizes a.dnd-inserted:visited, +.dnd-library-wrapper .editor-item .sizes a.dnd-inserted:active { + border: 1px solid #555; + color: #fff; + text-decoration: none; +} + +.dnd-library-wrapper .editor-item .sizes a:hover span, +.dnd-library-wrapper .editor-item .sizes a.dnd-inserted span { + background-color: #555; +} + +.dnd-library-wrapper .editor-item .sizes a span { + display: block; + background-color: #888; +} + +.dnd-library-wrapper .editor-item .sizes a.size-S span { + margin: 3px; + padding: 2px 0; +} + +.dnd-library-wrapper .editor-item .sizes a.size-M span { + margin: 2px; + padding: 3px 0; +} + +.dnd-library-wrapper .editor-item .sizes a.size-L span { + margin: 1px; + padding: 4px 0; +} + +.dnd-library-wrapper .editor-item.dnd-child-inserted { + background-color: #ccc; +} + +.sdl-preview-item dt { + font-weight: bold; + float: left; + width: 60px; +} + +.sdl-preview-item dd { + margin: 0; +} + +/* Fix for Garland */ +#center .dnd-library-wrapper form { + margin: 0; +} + +/** + * Prototype for an always on right library + */ +.dnd-library-wrapper { + position: fixed; + top: 150px; + right: -276px; + bottom: 30px; + width: 276px !important; /* @todo remove - theme override quickfix */ + z-index: 1002; +} + +.dnd-library-wrapper.library-on { + right: 0; +} + +/** + * Menu + */ +.scald-menu { + position: absolute; + width: 325px; + top: -65px; + left: -42px; + bottom: 0; + margin: 0; + padding: 0; + overflow: hidden; + /* Trick to keep the unused space clickabke. */ + pointer-events: none; +} + +.scald-menu > div { + pointer-events: auto; +} + +.scald-menu.search-on { + left: -256px; +} + +.scald-menu .summary { + background-color: #959896; + border-top-left-radius: 5px 4px; + border-top-right-radius: 5px 4px; + border-bottom: 1px solid #666; + box-shadow: 0 1px 0 0 #ccc; + color: #fff; + height: 70px; + overflow-x: hidden; + overflow-y: auto; + font-size: 80%; + line-height: 1.4; +} + +.scald-menu .summary .item-list { + background-color: transparent; + border-width: 0; +} + +.scald-menu .summary .toggle { + background: url('../icons/search-off.png') 3px 3px no-repeat; + cursor: pointer; + float: left; + height: 100%; + width: 42px; +} + +.scald-menu.search-on .summary .toggle { + background: url('../icons/search-on.png') 3px 3px no-repeat; +} + +.scald-menu .summary .title { + margin: 3px 0 7px; + font-size: 17px; + font-weight: normal; + line-height: 19px; +} + +.scald-menu .summary .sort { + float: right; + margin: -20px 7px 0 0; +} + +.scald-menu .summary .label { + font-style: italic; +} + +.scald-menu .summary ul { + margin: 0; +} + +.scald-menu .summary ul li { + display: inline; + background: #6f6f6f; + padding: 2px 7px; + border-radius: 8px; +} + +.scald-menu .filters { + background-color: #959896; + border-bottom-left-radius: 5px 4px; + color: #fff; + left: 42px; + top: 72px; + right: 60px; + bottom: 0; + overflow-x: hidden; + overflow-y: auto; + padding-top: 20px; + position: absolute; +} + +.scald-menu .filters input[type="text"] { + width: 100%; +} + +.scald-menu .filters input[type="submit"] { + width: 100%; + font-size: 16px; +} + +.scald-menu .filters input[type="reset"] { + float: right; + margin-top: 5px; +} + +.scald-menu .filters .description { + color: #fff; +} + +.scald-menu .add-buttons { + background: #a5a9a8 url('../icons/plus-white.png') 14px 44px no-repeat; + border-bottom-left-radius: 5px 4px; + padding-top: 50px; + padding-bottom: 20px; + width: 42px; + float: left; +} + +.scald-menu .add-buttons .item-list { + background-color: transparent; + border-width: 0; +} + +.scald-menu .add-buttons ul { + margin: 0; + padding: 0; +} + +.scald-menu .add-buttons ul li { + height: 30px; + margin: 3px 4px; + width: 30px; + cursor: pointer; + color: #4A68A4; + text-indent: -999px; + overflow: hidden; + padding: 3px 2px; + border-bottom: 1px solid #666; + box-shadow: 0 1px 0 0 #ccc; +} + +.scald-menu .add-buttons ul li.last { + border: 0; + box-shadow: none; +} + +.scald-menu .add-buttons a { + display: block; + width: 30px; + height: 30px; +} + +.scald-menu .add-buttons .add-audio { + background: url('../icons/audio-large-inverted.png') 50% 50% no-repeat; +} + +.scald-menu .add-buttons .add-image { + background: url('../icons/image-large-inverted.png') 50% 50% no-repeat; +} + +.scald-menu .add-buttons .add-video { + background: url('../icons/video-large-inverted.png') 50% 50% no-repeat; +} + +.scald-menu .add-buttons .add-soundslide { + background: url('../icons/soundslide-large-inverted.png') 50% 50% no-repeat; +} + +.scald-menu .add-buttons .add-audio:hover { + background-image: url('../icons/audio-large-color.png'); +} + +.scald-menu .add-buttons .add-image:hover { + background-image: url('../icons/image-large-color.png'); +} + +.scald-menu .add-buttons .add-video:hover { + background-image: url('../icons/video-large-color.png'); +} + +.scald-menu .add-buttons .add-soundslide:hover { + background-image: url('../icons/soundslide-large-color.png'); +} + +/** + * Library: pagination etc. + */ +.scald-library { + height: 100%; + position: absolute; + background-color: #fff; + border: 4px solid #e4e1dd; + border-right: none; + border-bottom-left-radius: 4px; + box-shadow: 2px 2px 5px 0 #999; + padding: 3px; + width: 266px; + overflow: auto; +} + +.scald-library .summary-filters { + background-color: #F5F5F5; + height: 50px; + position: absolute; + top: 40px; /* offsetTop */ + width: 100%; + overflow: auto; +} + +.scald-library .pager, +.scald-library .pager * { + border: none; + margin: 0; + padding: 0; +} + +.scald-library .pager { + font-size: 13px; + line-height: 15px; + margin-top: 15px; +} + +.scald-library .pager-item, +.scald-library .pager-current { + border-radius: 2px; + box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.2); + margin: 1px 2px; + padding: 3px 8px; + display: inline-block; + border-top: 1px solid #fff; + color: #717171 !important; + font-size: smaller !important; + text-shadow: white 0 1px 0; + background-color: #f5f5f5; + background-image: -webkit-linear-gradient(top, #f9f9f9, #eaeaea); + background-image: -moz-linear-gradient(top, #f9f9f9, #eaeaea); + background-image: -ms-linear-gradient(top, #f9f9f9, #eaeaea); + background-image: -o-linear-gradient(top, #f9f9f9, #eaeaea); + background-image: linear-gradient(top, #f9f9f9, #eaeaea); +} + +.scald-library .pager-item a { + text-decoration: none !important; +} + +.scald-library .pager-item.first { + margin-left: 0; +} + +.scald-library .pager-item.last { + margin-right: 0; +} + +.scald-library .pager-item:hover { + border-color: #fff; + background-color: #fdfdfd; + background-image: -webkit-linear-gradient(top, #fefefe, #fafafa); + background-image: -moz-linear-gradient(top, #fefefe, #fafafa); + background-image: -ms-linear-gradient(top, #fefefe, #fafafa); + background-image: -o-linear-gradient(top, #fefefe, #fafafa); + background-image: linear-gradient(top, #fefefe, #fafafa); +} + +.scald-library .pager-current { + box-shadow: inset 0 0 0 0 rgba(0, 0, 0, 0.75); + border-color: #505050 !important; + color: #f2f2f2 !important; + text-shadow: black 0 1px 0; + background-color: #b3b1af; + background-image: -webkit-linear-gradient(top, #5f5f5f, #5c5c5c); + background-image: -moz-linear-gradient(top, #5f5f5f, #5c5c5c); + background-image: -ms-linear-gradient(top, #5f5f5f, #5c5c5c); + background-image: -o-linear-gradient(top, #5f5f5f, #5c5c5c); + background-image: linear-gradient(top, #5f5f5f, #5c5c5c); +} + +.scald-anchor { + background: #e4e1dd url("../icons/library-light.png") 50% 50% no-repeat; + cursor: pointer; + left: -38px; + height: 38px; + width: 38px; + box-shadow: 2px 2px 3px 0 #666; + border-top-left-radius: 5px; + border-bottom-left-radius: 5px; + position: absolute; +} + +.scald-anchor:hover { + background-image: url("../icons/library-dark.png"); +} + +/* qTip */ +.ui-tooltip-scald-dnd { + max-width: 550px; + border-radius: 5px; +} + +.ui-tooltip-scald-dnd .ui-tooltip-content, +.ui-tooltip-scald-dnd .ui-tooltip-titlebar { + background-color: #fff; + border-color: #6bf; +} + +/* Override CTools' modal */ +div.ctools-modal-content .field-type-atom-reference .form-item.form-type-textfield:first-child label { + /* Don't use a fixed width label for the dropbox */ + width: auto; +} diff --git a/docroot/sites/all/modules/contrib/scald/modules/library/dnd/dnd.admin.inc b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/dnd.admin.inc new file mode 100644 index 00000000..f36cf5c4 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/dnd.admin.inc @@ -0,0 +1,92 @@ + 'select', + '#title' => t('Library'), + '#default_value' => dnd_get_library(), + '#description' => t('The library that will available on node edit forms if they contains fields referencing rich media content, such as Multimedia Editorial Element or Resource reference fields.'), + '#options' => $libraries, + ); + $form['dnd_modal_width'] = array( + '#type' => 'textfield', + '#title' => t('Modal width'), + '#size' => 5, + '#maxlength' => 5, + '#default_value' => variable_get('dnd_modal_width', 500), + '#description' => t('The width of the modal window opened from the library in pixels or percentage. Example: 100 for 100 pixels, 0.5 for 50%.'), + ); + $form['dnd_modal_height'] = array( + '#type' => 'textfield', + '#title' => t('Modal height'), + '#size' => 5, + '#maxlength' => 5, + '#default_value' => variable_get('dnd_modal_height', 300), + '#description' => t('The height of the modal window opened from the library in pixels or percentage. Example: 100 for 100 pixels, 0.5 for 50%.'), + ); + $form['dnd_modal_admin'] = array( + '#type' => 'checkbox', + '#title' => t('Use the admin theme'), + '#default_value' => variable_get('dnd_modal_admin', FALSE), + '#description' => t('If enabled, the library will be considered to be administrative.'), + ); + if (function_exists('qtip_fetch_instances_field')) { + $form['dnd_qtip_instance'] = qtip_fetch_instances_field(variable_get('dnd_qtip_instance', '')); + } + $mee_store_format = (module_exists('mee')) ? mee_store_format() : ''; + if (!empty($mee_store_format)) { + if ($mee_store_format === 'embed_div') { + $form['dnd_uses_caption_default'] = array( + '#type' => 'checkbox', + '#title' => t('Enable captions by default'), + '#default_value' => variable_get('dnd_uses_caption_default', TRUE), + '#description' => t('If enabled, captions in CKEditor will show up under Atoms by default.'), + ); + } + $form['mee_store_format'] = array( + '#type' => 'select', + '#options' => array( + 'sas' => t('Scald Atom Shorthand'), + 'embed_div' => t('Div attributes'), + ), + '#title' => t('Wysiwyg store format'), + '#default_value' => $mee_store_format, + '#description' => t('The store method used in Wysiwyg editors to embed atoms. The default value is "Scald Atom Shorthand", however to use the CKEditor widget plugin, the "Div attributes" value should be used.') + ); + } + return system_settings_form($form); +} + +/** + * Validate callback for dnd_admin_form(). + * + * Ensure that width and height are numeric values. + */ +function dnd_admin_form_validate($form, &$form_state) { + if (!is_numeric($form_state['values']['dnd_modal_width'])) { + form_set_error('dnd_modal_width', t('Width value must be numeric.')); + } + if (!is_numeric($form_state['values']['dnd_modal_height'])) { + form_set_error('dnd_modal_height', t('Height value must be numeric.')); + } + $width = (float) $form_state['values']['dnd_modal_width']; + $height = (float) $form_state['values']['dnd_modal_height']; + if ($width < 0) { + form_set_error('dnd_modal_width', t('Width value must be bigger than zero.')); + } + if ($height < 0) { + form_set_error('dnd_modal_height', t('Height value must be bigger than zero.')); + } + if (($width <= 1 && $height > 1) || ($width > 1 && $height <= 1)) { + form_set_error('dnd_modal_width', t('Width and height values must both be in the same metric.')); + } +} + diff --git a/docroot/sites/all/modules/contrib/scald/modules/library/dnd/dnd.info b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/dnd.info new file mode 100644 index 00000000..a34fe4e3 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/dnd.info @@ -0,0 +1,13 @@ +name = DnD Library +package = Scald +description = Enable a drag and drop media interface. +core = 7.x +dependencies[] = scald + + +; Information added by Drupal.org packaging script on 2016-04-15 +version = "7.x-1.8" +core = "7.x" +project = "scald" +datestamp = "1460730556" + diff --git a/docroot/sites/all/modules/contrib/scald/modules/library/dnd/dnd.install b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/dnd.install new file mode 100644 index 00000000..4901ff30 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/dnd.install @@ -0,0 +1,15 @@ + 'Drag and Drop Library', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('dnd_admin_form'), + 'description' => 'Configure the resource library used when creating content.', + 'access arguments' => array('administer dnd'), + 'file' => 'dnd.admin.inc', + ); + return $items; +} + +/** + * Implementation of hook_perm(). + */ +function dnd_permission() { + return array( + 'administer dnd' => array( + 'title' => t('Administer DnD'), + ), + ); +} + +/** + * Implementation of hook_theme(). + */ +function dnd_theme() { + return array( + 'dnd_library_wrapper' => array( + 'variables' => array('settings' => NULL, 'element' => NULL), + ), + ); +} + +/** + * Get the list of Scald contexts that can be used in a WYSIWYG, keyed by type. + * + * @return array + * Returns an associative array, keyed by the atom type machine name and whose + * values are associative arrays, each keyed by the context machine name and + * whose values are the user facing name of this context for this atom type. + */ +function dnd_scald_wysiwyg_context_list() { + $contexts = &drupal_static(__FUNCTION__, NULL); + if (!isset($contexts)) { + $types = scald_types(); + foreach (scald_contexts_public() as $name => $definition) { + if (empty($definition['parseable'])) { + continue; + } + + // There "formats" is actually used nowhere in Scald. Every context is + // available to all atom types. + $definition['formats'] = $types; + + foreach ($definition['formats'] as $type => $data) { + $contexts[$type][$name] = $definition['title']; + } + } + drupal_alter('scald_wysiwyg_context_list', $contexts); + } + + return $contexts; +} + +/** + * Get the list of Scald contexts machine names that are allowed in WYSIWYG. + */ +function dnd_scald_wysiwyg_context_slugs() { + $contexts_type = dnd_scald_wysiwyg_context_list(); + $slugs = array(); + foreach ($contexts_type as $contexts) { + foreach ($contexts as $slug => $label) { + $slugs[$slug] = $slug; + } + } + + return array_values($slugs); +} + +/** + * Implements hook_library(). + */ +function dnd_library() { + $path = drupal_get_path('module', 'dnd'); + $contexts = dnd_scald_wysiwyg_context_list(); + $config = array(); + + foreach (dnd_scald_wysiwyg_context_slugs() as $slug) { + $config[$slug] = scald_context_config_load($slug); + } + + $qtip_settings = ''; + if (function_exists('qtip_fetch_instances_field')) { + $instance = variable_get('dnd_qtip_instance', ''); + if (!empty($instance)) { + $qtip_settings = qtip_clean_settings(qtip_load($instance)); + } + } + + $libraries['library'] = array( + 'title' => 'DnD Library', + 'website' => 'http://drupal.org/project/scald', + 'version' => '1.x', + 'dependencies' => array( + array('system', 'jquery.form'), + ), + 'js' => array( + // Drag and drop + $path . '/js/dnd-library.js' => array(), + // Javascript workaround for the continue button. + $path . '/js/dnd-modal.js' => array(), + // Settings for the library url. + array( + 'type' => 'setting', + 'data' => array( + 'dnd' => array( + 'url' => url(dnd_get_library()), + 'contexts' => $contexts, + 'contextDefault' => variable_get('dnd_context_default', 'sdl_editor_representation'), + 'usesCaptionDefault' => variable_get('dnd_uses_caption_default', TRUE), + 'contexts_config' => $config, + 'qTipSettings' => $qtip_settings, + ), + ), + ), + ), + 'css' => array( + // Contains the library theming. + $path . '/css/dnd-library.css' => array( + 'type' => 'file', + 'media' => 'screen', + ), + ), + ); + + // Add the qTip library as a dependency if it exists. + if (function_exists('qtip_library')) { + $libraries['library']['dependencies'][] = array('qtip', 'qtip'); + } + + // Libraries might provide atom quick add links. We add CTools Modal JS so + // that libraries can take use of it if they want. + dnd_library_add_ctools_modal($libraries); + $libraries['library']['dependencies'][] = array('dnd', 'ctools.modal'); + + return $libraries; +} + +/** + * Handle adding CTools Modal JavaScript files. + * + * It would be *really* nice if CTools implemented hook_library + * and allowed us to simply list ctools.modal as a dependency. + * + * @see ctools_modal_add_js. + */ +function dnd_library_add_ctools_modal(&$libraries) { + $ctools_path = drupal_get_path('module', 'ctools'); + $libraries['ctools.modal'] = array( + 'title' => 'CTools modal', + 'version' => '1.x', + ); + $libraries['ctools.modal']['js'][$ctools_path . '/js/modal.js'] = array(); + + $settings = array( + 'CToolsModal' => array( + 'loadingText' => t('Loading...'), + 'closeText' => t('Close Window'), + 'closeImage' => theme('image', array( + 'path' => ctools_image_path('icon-close-window.png'), + 'title' => t('Close window'), + 'alt' => t('Close window'), + )), + 'throbber' => theme('image', array( + 'path' => ctools_image_path('throbber.gif'), + 'title' => t('Loading...'), + 'alt' => t('Loading'), + )), + ), + ); + $libraries['ctools.modal']['js'][] = array( + 'type' => 'setting', + 'data' => $settings, + ); + $modal_width = (float) variable_get('dnd_modal_width', 500); + $modal_height = (float) variable_get('dnd_modal_height', 300); + // Create our own javascript that will be used to theme a modal. + $sample_style = array( + 'custom-style' => array( + 'modalSize' => array( + 'type' => ($modal_width <= 1 ? 'scale' : 'fixed'), + 'width' => $modal_width, + 'height' => $modal_height, + 'addWidth' => 20, + 'addHeight' => 15, + ), + 'modalOptions' => array( + 'opacity' => .5, + 'background-color' => '#000', + ), + 'animation' => 'fadeIn', + 'modalTheme' => 'CToolsSampleModal', + 'throbber' => theme('image', array('path' => ctools_image_path('ajax-loader.gif', 'ctools_ajax_sample'), 'alt' => t('Loading...'), 'title' => t('Loading'))), + ), + ); + $libraries['ctools.modal']['js'][] = array( + 'type' => 'setting', + 'data' => $sample_style, + ); + + $libraries['ctools.modal']['css'][$ctools_path . '/css/modal.css'] = array('type' => 'file'); + + $libraries['ctools.modal']['dependencies'][] = array('system', 'drupal.progress'); + $libraries['ctools.modal']['dependencies'][] = array('system', 'drupal.ajax'); + + $libraries['ctools.modal']['css'][$ctools_path . '/ctools_ajax_sample/css/ctools-ajax-sample.css'] = array('type' => 'file'); + $libraries['ctools.modal']['js'][$ctools_path . '/ctools_ajax_sample/js/ctools-ajax-sample.js'] = array(); +} + +/** + * Implements hook_library_alter(). + */ +function dnd_library_alter(&$libraries, $module) { + if ($module == 'mee' || $module == 'atom_reference') { + $libraries['library']['dependencies'][] = array('dnd', 'library'); + } +} + +/** + * Implements hook_entity_view_alter(). + * + * Adds the dnd library in case we have quickedit enabled and dnd enabled on the entity. + */ +function dnd_entity_view_alter(&$build, $type) { + if (!module_exists('quickedit')) { + return; + } + + if (!user_access('access in-place editing')) { + return; + } + + // In-place editing is only supported on the front-end. + if (path_is_admin(current_path())) { + return; + } + + $dnd_enabled = FALSE; + foreach ($build as $item) { + if (!is_array($item)) { + continue; + } + if (isset($item['#field_name'])) { + $instance_info = field_info_instance($type, $item['#field_name'], $build['#bundle']); + if (!empty($instance_info['settings']['dnd_enabled'])) { + $dnd_enabled = TRUE; + } + if (isset($item['#field_type']) && $item['#field_type'] === 'atom_reference') { + $dnd_enabled = TRUE; + } + } + } + if ($dnd_enabled) { + $build['#attached']['library'][] = array('dnd', 'library'); + } + return; +} + +/** + * Tells DnD that the library shouldn't be displayed on this page. + * + * This function should be called whenever the library shouldn't be + * displayed. + * + * @param boolean $set + * If FALSE, no change to the suppression status will be done, allowing + * other functions to query the suppression state. Defaults to TRUE. + * + * @return boolean + * TRUE if the library output has been suppressed, FALSE otherwise. + */ +function dnd_suppress_library($set = TRUE) { + static $suppress = FALSE; + if ($set && !$suppress) { + $suppress = TRUE; + drupal_add_js(array('dnd' => array('suppress' => 1)), 'setting'); + } + return $suppress; +} + +/** + * Theme the markup that will surround a library loaded via JSON. + */ +function theme_dnd_library_wrapper($variables) { + return '
    '; +} + +/** + * Return the list of all the available libraries. + * @return array + * An associative array, where the keys are the library paths, and + * the value is an associated label. + */ +function dnd_get_libraries() { + static $libraries = NULL; + if (is_null($libraries)) { + $libraries = module_invoke_all('dnd_libraries_info'); + drupal_alter('dnd_libraries_info', $libraries); + } + return $libraries; +} + +/** + * Return the default library. + */ +function dnd_get_library() { + $libraries = dnd_get_libraries(); + $default = variable_get('dnd_callback_url', ''); + if (isset($libraries[$default])) { + $library = $default; + } + else { + reset($libraries); + $library = key($libraries); + } + return $library; +} + diff --git a/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/audio-large-color.png b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/audio-large-color.png new file mode 100644 index 00000000..787cc8b1 Binary files /dev/null and b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/audio-large-color.png differ diff --git a/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/audio-large-inverted.png b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/audio-large-inverted.png new file mode 100644 index 00000000..a1e3cc5e Binary files /dev/null and b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/audio-large-inverted.png differ diff --git a/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/audio-large.png b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/audio-large.png new file mode 100644 index 00000000..566f029b Binary files /dev/null and b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/audio-large.png differ diff --git a/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/audio.png b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/audio.png new file mode 100644 index 00000000..249dbbc3 Binary files /dev/null and b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/audio.png differ diff --git a/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/close.png b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/close.png new file mode 100644 index 00000000..30c4b291 Binary files /dev/null and b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/close.png differ diff --git a/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/flash.png b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/flash.png new file mode 100644 index 00000000..38a06313 Binary files /dev/null and b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/flash.png differ diff --git a/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/image-large-color.png b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/image-large-color.png new file mode 100644 index 00000000..9cd6995d Binary files /dev/null and b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/image-large-color.png differ diff --git a/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/image-large-inverted.png b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/image-large-inverted.png new file mode 100644 index 00000000..3505afc4 Binary files /dev/null and b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/image-large-inverted.png differ diff --git a/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/image.png b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/image.png new file mode 100644 index 00000000..3215c0eb Binary files /dev/null and b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/image.png differ diff --git a/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/library-dark.png b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/library-dark.png new file mode 100644 index 00000000..a7e82afc Binary files /dev/null and b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/library-dark.png differ diff --git a/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/library-light.png b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/library-light.png new file mode 100644 index 00000000..e3b7c5be Binary files /dev/null and b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/library-light.png differ diff --git a/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/plus-inverted.png b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/plus-inverted.png new file mode 100644 index 00000000..30d14a79 Binary files /dev/null and b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/plus-inverted.png differ diff --git a/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/plus-white.png b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/plus-white.png new file mode 100644 index 00000000..6697fe0d Binary files /dev/null and b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/plus-white.png differ diff --git a/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/search-off.png b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/search-off.png new file mode 100644 index 00000000..53b375fe Binary files /dev/null and b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/search-off.png differ diff --git a/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/search-on.png b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/search-on.png new file mode 100644 index 00000000..a7d88a36 Binary files /dev/null and b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/search-on.png differ diff --git a/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/soundslide-large-color.png b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/soundslide-large-color.png new file mode 100644 index 00000000..1c6f3dc4 Binary files /dev/null and b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/soundslide-large-color.png differ diff --git a/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/soundslide-large-inverted.png b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/soundslide-large-inverted.png new file mode 100644 index 00000000..4973dccf Binary files /dev/null and b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/soundslide-large-inverted.png differ diff --git a/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/soundslide.png b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/soundslide.png new file mode 100644 index 00000000..e414c076 Binary files /dev/null and b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/soundslide.png differ diff --git a/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/video-large-color.png b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/video-large-color.png new file mode 100644 index 00000000..31ab7318 Binary files /dev/null and b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/video-large-color.png differ diff --git a/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/video-large-inverted.png b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/video-large-inverted.png new file mode 100644 index 00000000..afc59e79 Binary files /dev/null and b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/video-large-inverted.png differ diff --git a/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/video.png b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/video.png new file mode 100644 index 00000000..41e21ad0 Binary files /dev/null and b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/icons/video.png differ diff --git a/docroot/sites/all/modules/contrib/scald/modules/library/dnd/js/dnd-library.js b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/js/dnd-library.js new file mode 100644 index 00000000..726030bd --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/js/dnd-library.js @@ -0,0 +1,473 @@ +/** + * Drag and Drop Library For Drupal + * + * This builds on the DnD jQuery plugin written to provide drag and drop media + * handling to Rich Text Editors to consume, display, and attach behavior to + * a "media library" provided via JSON and implemented for Drupal running + * the Wysiwyg plugin. + */ + +(function($, Drupal) { +/** + * Initialize our namespace. + */ +Drupal.dnd = { + Atoms: { + }, + + // Keep track of the last focused textarea. + lastFocus: null, + + // Default settings for the qTip v2 library + defaultqTipSettings: { + position: { + my: 'right center', + at: 'left center' + }, + hide: { + fixed: true, + delay: 200 + }, + show: { + solo: true + }, + style: { + classes: 'ui-tooltip-scald-dnd' + } + }, + + // Additional settings for the deprecated qTip v1 + qTip1Settings: { + position: { + corner: { + target: 'leftMiddle', + tooltip: 'rightMiddle' + } + }, + style: { + width: 550, + classes: {tooltip: 'ui-tooltip-scald-dnd'} + } + }, + + /** + * Fetch atoms that are not present. + * + * @param context + * @param atom_ids + * Integer or an array of atom_id. + * @param callback (optional) + * Callback when all required atoms are available. + */ + fetchAtom: function(context, atom_ids, callback) { + // Convert to array + atom_ids = [].concat(atom_ids); + + for (var i= 0, len=atom_ids.length; i[\r\n\s\S]*?/g, '[$1$4]'); + return text; + }, + + // Salvage data from HTML comment and return the SAS representation. + htmlcomment2sas: function(text) { + var matches = text.match(//); + if (matches && matches.length) { + return '[' + matches[1] + matches[4] + ']'; + } + }, + + // Convert SAS to HTML. + // @todo Known bug: we have to fetch atoms that are not present in the current + // scope of Drupal.dnd.Atoms + sas2html: function(text) { + for (var i in Drupal.dnd.Atoms) { + var atom = Drupal.dnd.Atoms[i]; + if (text.indexOf(atom.sas) > -1) { + text = text.replace(atom.sas, atom.editor); + } + } + return text; + }, + + // Convert SAS to an array of atom attributes. + sas2array: function(sas) { + var matches = sas.match(/\[scald=(\d+)(:([^\s]+))?(.*)]/); + if (matches && matches.length) { + return { + sid: matches[1], + context: matches[3], + options: matches[4] + }; + } + }, + + /** + * Insert text at the caret in a textarea. + */ + insertText: function(txtArea, textValue) { + //IE + if (document.selection) { + txtArea.focus(); + var sel = document.selection.createRange(); + sel.text = textValue; + } + //Firefox, chrome, mozilla + else if (txtArea.selectionStart || txtArea.selectionStart == '0') { + var startPos = txtArea.selectionStart; + var endPos = txtArea.selectionEnd; + txtArea.value = txtArea.value.substring(0, startPos) + textValue + txtArea.value.substring(endPos, txtArea.value.length); + txtArea.focus(); + txtArea.selectionStart = startPos + textValue.length; + txtArea.selectionEnd = startPos + textValue.length; + } + else { + txtArea.value += textArea.value; + txtArea.focus(); + } + return true; + }, + + /** + * Insert an atom in the current RTE or textarea. + */ + insertAtom: function(sid) { + var editor = Drupal.ckeditorInstance; + if (editor && editor.dndInsertAtom) { + // Defer to the correct method given the plugin used by this editor. + editor.dndInsertAtom(sid); + } + else if (Drupal.dnd.lastFocus) { + var markup = Drupal.dnd.Atoms[sid].sas; + Drupal.dnd.insertText(Drupal.dnd.lastFocus, markup); + } + return true; + } +}; + +/** + * Extend jQuery a bit + * + * We add a selector to look for "empty" elements (empty elements in TinyMCE + * often have non-breaking spaces and
    tags). An exception is required + * to make this work in IE. + */ +// Custom selectors +$.extend($.expr[":"], { + 'dnd_empty' : function(a, i, m) { + return !$(a).filter(function(i) { + return !$(this).is('br'); + }).length && !$.trim(a.textContent || a.innerText||$(a).text() || ""); + } +}); + +/** + * Default atom theme function + */ +Drupal.theme.prototype.scaldEmbed = function(atom, context, options) { + context = context ? context : Drupal.settings.dnd.contextDefault; + + var classname = 'dnd-atom-wrapper'; + classname += ' type-' + atom.meta.type; + classname += ' context-' + context; + if (atom.meta.align && atom.meta.align != 'none') { + classname += ' atom-align-' + atom.meta.align; + } + + var output = '
    ' + atom.contexts[context] + '
    '; + if (atom.meta.legend) { + output += '
    ' + atom.meta.legend + '
    '; + } + output += '
    '; + + // If there are options, update the SAS representation. + if (options) { + options = (typeof options === 'string') ? options.trim() : JSON.stringify(options); + output = output.replace(//, ''); + } + + return output; +}; + +/** + * Initialize and load drag and drop library and pass off rendering and + * behavior attachment. + */ +Drupal.behaviors.dndLibrary = { +attach: function(context, settings) { + if (Drupal.settings.dnd.suppress) { + return; + } + + Drupal.ajax.prototype.commands.dnd_refresh = Drupal.dnd.refreshLibraries; + + $('body').once('dnd', function() { + var wrapper = $('
    ').appendTo('body'); + var $editor = $(""); + $.getJSON(Drupal.settings.dnd.url, function(data) { + Drupal.behaviors.dndLibrary.renderLibrary.call(wrapper, data, $editor); + }); + }); + + // Track the last focused textarea or textfield. + $('textarea, .form-type-textfield input').focus(function(){ + Drupal.dnd.lastFocus = this; + Drupal.ckeditorInstance = false; + }); +}, + +renderLibrary: function(data, editor) { + var library_wrapper = $(this); + + // Save the current status + var dndStatus = { + search: library_wrapper.find('.scald-menu').hasClass('search-on'), + library: library_wrapper.hasClass('library-on') + }; + + library_wrapper.html(data.menu + data.anchor + data.library); + var scald_menu = library_wrapper.find('.scald-menu'); + + // Rearrange some element for better logic and easier theming. + // @todo We'd better do it on server side. + scald_menu + .prepend(library_wrapper.find('.summary')) + .append(library_wrapper.find('.view-filters').addClass('filters')); + if (dndStatus.search) { + scald_menu.addClass('search-on'); + library_wrapper.addClass('library-on'); + } + library_wrapper.find('.summary .toggle').click(function() { + // We toggle class only when animation finishes to avoid flash back. + scald_menu.animate({left: scald_menu.hasClass('search-on') ? '-42px' : '-256px'}, function() { + $(this).toggleClass('search-on'); + }); + // When display search, we certainly want to display the library, too. + if (!scald_menu.hasClass('search-on') && !library_wrapper.hasClass('library-on')) { + $('.scald-anchor').click(); + } + }); + library_wrapper.find('.scald-anchor').click(function() { + // We toggle class only when animation finishes to avoid flash back. + library_wrapper.animate({right: library_wrapper.hasClass('library-on') ? '-276px' : '0'}, function() { + library_wrapper.toggleClass('library-on'); + }); + }); + + for (var atom_id in data.atoms) { + // Store the atom data in our object + Drupal.dnd.Atoms[atom_id] = Drupal.dnd.Atoms[atom_id] || {sid: atom_id}; + Drupal.dnd.Atoms[atom_id].contexts = Drupal.dnd.Atoms[atom_id].contexts || {}; + $.extend(true, Drupal.dnd.Atoms[atom_id], data.atoms[atom_id]); + Drupal.dnd.Atoms[atom_id].contexts[Drupal.settings.dnd.contextDefault] = Drupal.dnd.Atoms[atom_id].editor; + + // And add a nice preview behavior if qTip is present + if ($.prototype.qtip) { + if (Drupal.settings.dnd.qTipSettings === '') { + Drupal.settings.dnd.qTipSettings = Drupal.dnd.defaultqTipSettings; + } + else { + if (typeof Drupal.settings.dnd.qTipSettings !== 'object') { + Drupal.settings.dnd.qTipSettings = JSON.parse(Drupal.settings.dnd.qTipSettings); + } + } + var settings = $.extend(Drupal.settings.dnd.qTipSettings, { + content: { + text: Drupal.dnd.Atoms[atom_id].preview + } + }); + + // When using the deprecated qTip v1 library, + // add some additional settings. + try { + $.fn.qtip.styles.defaults.width.min; + $.extend(settings, Drupal.dnd.qTip1Settings); + } + catch(err) { + // On qTip 2, everything's ok + } + + $("#sdl-" + atom_id).qtip(settings); + } + } + + // Preload images in editor representations + var cached = $.data($(editor), 'dnd_preload') || {}; + for (var editor_id in Drupal.dnd.Atoms) { + if (!cached[editor_id]) { + var $representation = $(Drupal.dnd.Atoms[editor_id].editor); + if ($representation.is('img') && $representation.get(0).src) { + $representation.attr('src', $representation.get(0).src); + } else { + $('img', $representation).each(function() { + $(this).attr('src', this.src); + }); + } + } + } + $.data($(editor), 'dnd_preload', cached); + + // Set up drag & drop data + $('.editor-item ._insert a').show().each(function(i) { + $(this) + .bind('click', function(e) { + e.preventDefault(); + return Drupal.dnd.insertAtom($(this).data('atom-id')); + }); + }); + $('.editor-item .drop').each(function(i) { + $(this) + .bind('dblclick', function(e) { + return Drupal.dnd.insertAtom($(this).data('atom-id')); + }) + .bind('dragstart', function(e) { + var dt = e.originalEvent.dataTransfer, $this = $(this); + var $img = $this.is('img') ? $this : $this.find('img'); + var id = $img.data('atom-id'); + dt.dropEffect = 'copy'; + dt.setData("Text", Drupal.dnd.Atoms[id].sas); + Drupal.dnd.currentAtom = Drupal.dnd.Atoms[id].sas; + try { + // Trick: if not the image might come out and go into the current hovered + // paragraph. + var markup = '

     

    ' + Drupal.theme('scaldEmbed', Drupal.dnd.Atoms[id]); + dt.setData("text/html", markup); + } + catch(e) { + } + return true; + }) + .bind('dragend', function(e) { + delete Drupal.dnd.currentAtom; + return true; + }); + }); + // Makes pager links refresh the library instead of opening it in the browser window + library_wrapper.find('.pager a, .pagination a').click(function() { + $.getJSON(this.href, function(data) { + Drupal.behaviors.dndLibrary.renderLibrary.call(library_wrapper.get(0), data, $(editor)); + }); + return false; + }); + + // Turns Views exposed filters' submit button into an ajaxSubmit trigger + library_wrapper.find('.view-filters .views-submit-button').find('input[type=submit], button[type=submit]').click(function(e) { + var submit = $(this); + var target = submit.parents('div.dnd-library-wrapper').get(0); + settings = Drupal.settings.dnd; + library_wrapper.find('.view-filters form').ajaxSubmit({ + 'url' : settings.url, + 'dataType' : 'json', + 'success' : function(data) { + Drupal.behaviors.dndLibrary.renderLibrary.call(target, data, $(editor)); + } + }); + e.preventDefault(); + return false; + }); + + // Makes Views exposed filters' reset button submit the form via ajaxSubmit, + // without data, to get all the default values back. + library_wrapper.find('.view-filters .views-reset-button').find('input[type=submit], button[type=submit]').click(function(e) { + var reset = $(this); + var target = reset.parents('div.dnd-library-wrapper').get(0); + library_wrapper.find('.view-filters form').ajaxSubmit({ + 'url' : Drupal.settings.dnd.url, + 'dataType' : 'json', + 'success' : function(data) { + Drupal.behaviors.dndLibrary.renderLibrary.call(target, data, $(editor)); + }, + 'beforeSubmit': function (data, form, options) { + // Can't use data = [], otherwise we're creating a new array + // instead of modifying the existing one. + data.splice(0, data.length); + } + }); + e.preventDefault(); + return false; + }); + + // Deals with Views Saved Searches "Save" button + library_wrapper.find('#views-savedsearches-save-search-form').find('input[type=submit], button[type=submit]').click(function() { + var submit = $(this); + var url = Drupal.settings.dnd.url; + var target = submit.parents('div.dnd-library-wrapper').get(0); + library_wrapper.find('#views-savedsearches-save-search-form').ajaxSubmit({ + 'url' : url, + 'dataType' : 'json', + 'success' : function(data) { + Drupal.behaviors.dndLibrary.renderLibrary.call(target, data, $(editor)); + } + }); + return false; + }); + + // Deals with Views Saved Searches "Delete" button + library_wrapper.find('#views-savedsearches-delete-search-form').find('input[type=submit], button[type=submit]').click(function() { + var submit = $(this); + var target = submit.parents('div.dnd-library-wrapper').get(0); + library_wrapper.find('#views-savedsearches-delete-search-form').ajaxSubmit({ + 'url' : settings.url, + 'dataType' : 'json', + 'success' : function(data) { + Drupal.behaviors.dndLibrary.renderLibrary.call(target, data, $(editor)); + } + }); + return false; + }); + + // Deals with Views Saved Searches search links + library_wrapper.find('#views-savedsearches-delete-search-form label a').click(function() { + $.getJSON(this.href, function(data) { + Drupal.behaviors.dndLibrary.renderLibrary.call(library_wrapper.get(0), data, $(editor)); + }); + return false; + }); + + // Attach all the behaviors to our new HTML fragment + Drupal.attachBehaviors(library_wrapper); +} +} + +}) (jQuery, Drupal); diff --git a/docroot/sites/all/modules/contrib/scald/modules/library/dnd/js/dnd-modal.js b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/js/dnd-modal.js new file mode 100644 index 00000000..260b99a5 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/library/dnd/js/dnd-modal.js @@ -0,0 +1,22 @@ +(function ($) { + Drupal.behaviors.dndModal= { + attach: function (context, settings) { + $('input[id^="edit-next"], button[id^="edit-next"]', context).click(function(e) { + var form = $('#scald-atom-add-form-add'); + if (form.find('.plupload-element').length > 0) { + var uploader = form.find('.plupload-element').first().pluploadQueue(); + if ((uploader.total.uploaded + uploader.total.failed) != uploader.files.length || uploader.files.length == 0) { + uploader.start(); + uploader.bind('UploadComplete', function() { + setTimeout(function(){ + $('input[id^="edit-next"], button[id^="edit-next"]', context).click(); + },500); + }); + return false; + } + } + }); + } + }; +})(jQuery); + diff --git a/docroot/sites/all/modules/contrib/scald/modules/library/scald_dnd_library/includes/scald_dnd_library.views.inc b/docroot/sites/all/modules/contrib/scald/modules/library/scald_dnd_library/includes/scald_dnd_library.views.inc new file mode 100644 index 00000000..5bcf5550 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/library/scald_dnd_library/includes/scald_dnd_library.views.inc @@ -0,0 +1,44 @@ + array( + 'scald_library' => array( + 'title' => t('Scald Library'), + 'help' => t('Format atoms for use in a DnD Library'), + 'handler' => 'scald_plugin_style_library', + 'path' => drupal_get_path('module', 'scald_dnd_library') . '/includes', + 'uses row plugin' => FALSE, + 'uses fields' => TRUE, + 'uses options' => FALSE, + 'type' => 'normal', + 'help topic' => 'style-library', + 'theme' => 'sdl_library', + 'theme file' => 'scald_dnd_library.module', + ), + ), + 'display' => array( + 'dnd_library' => array( + 'title' => t('Scald Library'), + 'help' => t('Format atoms for use as a DnD Library'), + 'handler' => 'scald_plugin_display_library', + 'parent' => 'page', + 'path' => drupal_get_path('module', 'scald_dnd_library') . '/includes', + 'theme' => 'views_view', + 'use ajax' => FALSE, + 'use pager' => TRUE, + 'admin' => t('Library'), + 'help topic' => 'scald-library', + 'uses hook menu' => TRUE, + 'provides dnd library' => TRUE, + ), + ), + ); +} diff --git a/docroot/sites/all/modules/contrib/scald/modules/library/scald_dnd_library/includes/scald_dnd_library.views_default.inc b/docroot/sites/all/modules/contrib/scald/modules/library/scald_dnd_library/includes/scald_dnd_library.views_default.inc new file mode 100644 index 00000000..f7869be9 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/library/scald_dnd_library/includes/scald_dnd_library.views_default.inc @@ -0,0 +1,177 @@ +name = 'scald_library'; + $view->description = 'Library view provided by Scald to access atoms.'; + $view->tag = ''; + $view->base_table = 'scald_atoms'; + $view->human_name = ''; + $view->core = 0; + $view->api_version = '3.0'; + $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */ + + /* Display: Master */ + $handler = $view->new_display('default', 'Master', 'default'); + $handler->display->display_options['title'] = 'Atoms Library'; + $handler->display->display_options['use_ajax'] = TRUE; + $handler->display->display_options['use_more_always'] = FALSE; + $handler->display->display_options['access']['type'] = 'perm'; + $handler->display->display_options['access']['perm'] = 'administer scald atoms'; + $handler->display->display_options['cache']['type'] = 'none'; + $handler->display->display_options['query']['type'] = 'views_query'; + $handler->display->display_options['query']['options']['query_comment'] = FALSE; + $handler->display->display_options['exposed_form']['type'] = 'basic'; + $handler->display->display_options['pager']['type'] = 'mini'; + $handler->display->display_options['style_plugin'] = 'table'; + /* No results behavior: Global: Text area */ + $handler->display->display_options['empty']['text']['id'] = 'text'; + $handler->display->display_options['empty']['text']['table'] = 'views'; + $handler->display->display_options['empty']['text']['field'] = 'area'; + $handler->display->display_options['empty']['text']['content'] = 'No atom found.'; + $handler->display->display_options['empty']['text']['format'] = 'plain_text'; + /* Relationship: Atom: Publisher */ + $handler->display->display_options['relationships']['publisher']['id'] = 'publisher'; + $handler->display->display_options['relationships']['publisher']['table'] = 'scald_atoms'; + $handler->display->display_options['relationships']['publisher']['field'] = 'publisher'; + $handler->display->display_options['relationships']['publisher']['label'] = 'Publisher'; + /* Field: Atom: Representation */ + $handler->display->display_options['fields']['representation']['id'] = 'representation'; + $handler->display->display_options['fields']['representation']['table'] = 'scald_atoms'; + $handler->display->display_options['fields']['representation']['field'] = 'representation'; + $handler->display->display_options['fields']['representation']['label'] = ''; + /* Sort criterion: Atom: Scald ID */ + $handler->display->display_options['sorts']['sid']['id'] = 'sid'; + $handler->display->display_options['sorts']['sid']['table'] = 'scald_atoms'; + $handler->display->display_options['sorts']['sid']['field'] = 'sid'; + $handler->display->display_options['sorts']['sid']['order'] = 'DESC'; + $handler->display->display_options['sorts']['sid']['exposed'] = TRUE; + $handler->display->display_options['sorts']['sid']['expose']['label'] = 'Scald ID'; + /* Sort criterion: Atom: Title */ + $handler->display->display_options['sorts']['title']['id'] = 'title'; + $handler->display->display_options['sorts']['title']['table'] = 'scald_atoms'; + $handler->display->display_options['sorts']['title']['field'] = 'title'; + $handler->display->display_options['sorts']['title']['exposed'] = TRUE; + $handler->display->display_options['sorts']['title']['expose']['label'] = 'Title'; + /* Filter criterion: Atom: Title */ + $handler->display->display_options['filters']['title']['id'] = 'title'; + $handler->display->display_options['filters']['title']['table'] = 'scald_atoms'; + $handler->display->display_options['filters']['title']['field'] = 'title'; + $handler->display->display_options['filters']['title']['operator'] = 'contains'; + $handler->display->display_options['filters']['title']['group'] = '0'; + $handler->display->display_options['filters']['title']['exposed'] = TRUE; + $handler->display->display_options['filters']['title']['expose']['operator_id'] = 'title_op'; + $handler->display->display_options['filters']['title']['expose']['label'] = 'Title'; + $handler->display->display_options['filters']['title']['expose']['operator'] = 'title_op'; + $handler->display->display_options['filters']['title']['expose']['identifier'] = 'title'; + /* Filter criterion: User: Name */ + $handler->display->display_options['filters']['uid']['id'] = 'uid'; + $handler->display->display_options['filters']['uid']['table'] = 'users'; + $handler->display->display_options['filters']['uid']['field'] = 'uid'; + $handler->display->display_options['filters']['uid']['relationship'] = 'publisher'; + $handler->display->display_options['filters']['uid']['value'] = ''; + $handler->display->display_options['filters']['uid']['group'] = '0'; + $handler->display->display_options['filters']['uid']['exposed'] = TRUE; + $handler->display->display_options['filters']['uid']['expose']['operator_id'] = 'uid_op'; + $handler->display->display_options['filters']['uid']['expose']['label'] = 'Publisher'; + $handler->display->display_options['filters']['uid']['expose']['operator'] = 'uid_op'; + $handler->display->display_options['filters']['uid']['expose']['identifier'] = 'uid'; + /* Filter criterion: Atoms: Authors (scald_authors) */ + $handler->display->display_options['filters']['scald_authors_tid']['id'] = 'scald_authors_tid'; + $handler->display->display_options['filters']['scald_authors_tid']['table'] = 'field_data_scald_authors'; + $handler->display->display_options['filters']['scald_authors_tid']['field'] = 'scald_authors_tid'; + $handler->display->display_options['filters']['scald_authors_tid']['value'] = ''; + $handler->display->display_options['filters']['scald_authors_tid']['group'] = 1; + $handler->display->display_options['filters']['scald_authors_tid']['exposed'] = TRUE; + $handler->display->display_options['filters']['scald_authors_tid']['expose']['operator_id'] = 'scald_authors_tid_op'; + $handler->display->display_options['filters']['scald_authors_tid']['expose']['label'] = 'Authors'; + $handler->display->display_options['filters']['scald_authors_tid']['expose']['operator'] = 'scald_authors_tid_op'; + $handler->display->display_options['filters']['scald_authors_tid']['expose']['identifier'] = 'scald_authors_tid'; + $handler->display->display_options['filters']['scald_authors_tid']['vocabulary'] = 'scald_authors'; + /* Filter criterion: Atom: Type */ + $handler->display->display_options['filters']['type']['id'] = 'type'; + $handler->display->display_options['filters']['type']['table'] = 'scald_atoms'; + $handler->display->display_options['filters']['type']['field'] = 'type'; + $handler->display->display_options['filters']['type']['group'] = '0'; + $handler->display->display_options['filters']['type']['exposed'] = TRUE; + $handler->display->display_options['filters']['type']['expose']['operator_id'] = 'type_op'; + $handler->display->display_options['filters']['type']['expose']['label'] = 'Type'; + $handler->display->display_options['filters']['type']['expose']['operator'] = 'type_op'; + $handler->display->display_options['filters']['type']['expose']['identifier'] = 'type'; + /* Filter criterion: Atoms: Tags (scald_tags) */ + $handler->display->display_options['filters']['scald_tags_tid']['id'] = 'scald_tags_tid'; + $handler->display->display_options['filters']['scald_tags_tid']['table'] = 'field_data_scald_tags'; + $handler->display->display_options['filters']['scald_tags_tid']['field'] = 'scald_tags_tid'; + $handler->display->display_options['filters']['scald_tags_tid']['value'] = ''; + $handler->display->display_options['filters']['scald_tags_tid']['group'] = 1; + $handler->display->display_options['filters']['scald_tags_tid']['exposed'] = TRUE; + $handler->display->display_options['filters']['scald_tags_tid']['expose']['operator_id'] = 'scald_tags_tid_op'; + $handler->display->display_options['filters']['scald_tags_tid']['expose']['label'] = 'Tags'; + $handler->display->display_options['filters']['scald_tags_tid']['expose']['operator'] = 'scald_tags_tid_op'; + $handler->display->display_options['filters']['scald_tags_tid']['expose']['identifier'] = 'scald_tags_tid'; + $handler->display->display_options['filters']['scald_tags_tid']['vocabulary'] = 'scald_tags'; + /* Filter criterion: Atom: Actions */ + $handler->display->display_options['filters']['actions']['id'] = 'actions'; + $handler->display->display_options['filters']['actions']['table'] = 'scald_atoms'; + $handler->display->display_options['filters']['actions']['field'] = 'actions'; + $handler->display->display_options['filters']['actions']['operator'] = '&'; + $handler->display->display_options['filters']['actions']['value'] = array( + 'fetch' => 'fetch', + 'view' => 'view', + ); + $handler->display->display_options['filters']['actions']['group'] = '0'; + $handler->display->display_options['filters']['actions']['expose']['operator'] = FALSE; + + /* Display: Scald Library */ + $handler = $view->new_display('dnd_library', 'Scald Library', 'dnd_library_1'); + $handler->display->display_options['defaults']['hide_admin_links'] = FALSE; + $handler->display->display_options['defaults']['access'] = FALSE; + $handler->display->display_options['access']['type'] = 'perm'; + $handler->display->display_options['access']['perm'] = 'access scald dnd library'; + $handler->display->display_options['defaults']['style_plugin'] = FALSE; + $handler->display->display_options['style_plugin'] = 'scald_library'; + $handler->display->display_options['defaults']['style_options'] = FALSE; + $handler->display->display_options['defaults']['row_plugin'] = FALSE; + $handler->display->display_options['defaults']['row_options'] = FALSE; + $handler->display->display_options['path'] = 'scald/library_dnd'; + $translatables['scald_library'] = array( + t('Master'), + t('Atoms Library'), + t('more'), + t('Apply'), + t('Reset'), + t('Sort by'), + t('Asc'), + t('Desc'), + t('Items per page'), + t('- All -'), + t('Offset'), + t('« first'), + t('‹ previous'), + t('next ›'), + t('last »'), + t('No atom found.'), + t('Publisher'), + t('Scald ID'), + t('.'), + t(','), + t('Title'), + t('Authors'), + t('Type'), + t('Tags'), + t('Scald Library'), + ); + + $views[$view->name] = $view; + return $views; +} diff --git a/docroot/sites/all/modules/contrib/scald/modules/library/scald_dnd_library/includes/scald_plugin_display_library.inc b/docroot/sites/all/modules/contrib/scald/modules/library/scald_dnd_library/includes/scald_plugin_display_library.inc new file mode 100644 index 00000000..6304e215 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/library/scald_dnd_library/includes/scald_plugin_display_library.inc @@ -0,0 +1,158 @@ + array()); + + // Hide the links that Views would normally display, as they confuse + // DnD. + $this->view->hide_admin_links = TRUE; + + // Execute the view to get all the filter that applies. + $this->view->execute(); + + // And now extract a summary from all the options that were filled. + foreach ($this->view->filter as $id => $filter) { + if ($filter->options['exposed']) { + $value = $filter->value; + // For Date filters, we need to preprocess a bit the date. Well, + // ok, more than a bit... + if ($filter instanceof date_api_filter_handler) { + $dates = array(); + if ($filter->operator == 'between') { + if ($value['min']) { + $d = date_make_date($value['min']); + $dates['min'] = '>' . date_format($d, $filter->format); + } + if ($value['max']) { + $d = date_make_date($value['max']); + $dates['max'] = '<' . date_format($d, $filter->format); + } + } + else { + if ($value['value']) { + $d = date_make_date($value['value']); + $dates['value'] = date_format($d, $filter->format); + } + } + $value = $dates; + } + // For terms, we get the tids, which doesn't make the summary + // really usefull. We'll get replace them with the term names. + elseif ($filter instanceof views_handler_filter_term_node_tid && is_array($value)) { + $names = array(); + // When migrating to D7, use the very useful _multiple variant + // to reduce the number of queries. + foreach ($value as $tid) { + $term = taxonomy_term_load($tid); + $names[] = $term->name; + } + $value = $names; + } + // For user names, the situation is pretty much like for terms: + // we get the uids. + elseif ($filter instanceof views_handler_filter_user_name && is_array($value)) { + $names = array(); + foreach ($value as $uid) { + $account = user_load($uid); + $names[] = $account->name; + } + $value = $names; + } + // For boolean operators, we don't want to display anything if + // was selected. + elseif ($filter instanceof views_handler_filter_boolean_operator) { + if ($value == 'All') { + $value = ''; + } + else { + $value = $filter->value_options[$value]; + } + } + elseif (is_array($value) && isset($filter->value_options)) { + foreach ($value as $k => $key) { + if ($filter->value_options[$key]) { + $value[$k] = $filter->value_options[$key]; + } + } + } + if (is_array($value)) { + $value = implode(', ', $value); + } + if ($value) { + $summary['criteria'][] = $filter->options['expose']['label'] . ': ' . $value; + } + } + } + // Add info about how we sort the view in the summary. + if (!empty($this->view->exposed_data)) { + $exposed_data = $this->view->exposed_data; + $sort_by = isset($exposed_data['sort_by']) ? $exposed_data['sort_by'] : FALSE; + if ($sort_by && isset($this->view->sort[$sort_by])) { + $label = $this->view->sort[$sort_by]->options['expose']['label']; + if (isset($exposed_data['sort_order']) && in_array($exposed_data['sort_order'], array('ASC', 'DESC'))) { + $order = $exposed_data['sort_order']; + } + else { + $order = $this->view->sort[$sort_by]->options['expose']['order']; + } + $orders = array('ASC' => t('Ascending'), 'DESC' => t('Descending')); + $summary['sort'] = t('Sort: @criteria', array('@criteria' => $label . ' ' . $orders[$order])); + } + } + + // Render our header based on the built summary. + $header = '
    '; + $header .= '
    ' . t('search') . '
    '; + if (!empty($summary['sort'])) { + $header .= '
    ' . $summary['sort'] . '
    '; + } + $header .= theme('item_list', array('items' => $summary['criteria'])); + $header .= '
    '; + + // Prepare the "Quick add" buttons, that will appear next to the library, + // based on the user permissions. + $atom_types = scald_types(); + $buttons = array('type' => 'ul', 'title' => NULL, 'attributes' => array()); + ctools_include('ajax'); + ctools_include('modal'); + foreach ($atom_types as $type) { + if (scald_action_permitted(new ScaldAtom($type->type), 'create')) { + $text = t($type->type); + $alt = t('Create a new !type atom', array('!type' => $text)); + $buttons['items'][] = array( + 'data' => ctools_modal_text_button($text, 'atom/add/' . $type->type . '/nojs', $alt, 'ctools-modal-custom-style'), + 'class' => array('add-' . drupal_strtolower($type->type)), + ); + } + } + + // Finally render the resulting library. + $view = $this->view->render(); + $messages = theme('status_messages'); + $library['library'] = $messages . $view . $header; + foreach ($this->view->result as $result) { + $sid = $result->sid; + scald_dnd_library_add_item($library, $sid); + } + + $library['menu'] = '
    ' . theme('item_list', $buttons) . '
    '; + $library['library'] = '
    ' . $library['library'] . '
    '; + $library['anchor'] = '
    '; + drupal_json_output($library); + } +} diff --git a/docroot/sites/all/modules/contrib/scald/modules/library/scald_dnd_library/includes/scald_plugin_style_library.inc b/docroot/sites/all/modules/contrib/scald/modules/library/scald_dnd_library/includes/scald_plugin_style_library.inc new file mode 100644 index 00000000..de6513ff --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/library/scald_dnd_library/includes/scald_plugin_style_library.inc @@ -0,0 +1,11 @@ + array( + 'title' => t('Access Scald DnD Library'), + ), + ); +} + +/** + * Implements hook_theme(). + */ +function scald_dnd_library_theme() { + return array( + 'sdl_library' => array( + 'variables' => array('page' => NULL, 'library_items' => NULL), + 'template' => 'sdl-library', + ), + 'sdl_library_item' => array( + 'variables' => array('informations' => array(), 'image' => NULL), + ), + 'sdl_editor_item' => array( + 'variables' => array('informations' => array(), 'image' => NULL), + ), + 'sdl_editor_legend' => array( + 'variables' => array('atom' => array()), + ), + 'sdl_preview_item' => array( + 'variables' => array('atom' => array(), 'image' => NULL), + ), + ); +} + +/** + * Implements hook_dnd_libraries_info(). + */ +function scald_dnd_library_dnd_libraries_info() { + $libraries = array(); + $cache = cache_get('views_based_libraries', 'cache_scald'); + if ($cache && is_array($cache->data)) { + $libraries = $cache->data; + } + else { + $views = views_get_all_views(); + foreach ($views as $view) { + // Disabled views get nothing. + if (!empty($view->disabled)) { + continue; + } + + $view->init_display(); + foreach ($view->display as $id => $display) { + if (!empty($display->handler->definition['provides dnd library'])) { + $libraries[$display->handler->get_option('path')] = $display->handler->get_option('title') . ' (' . $view->name . '-' . $id . ')'; + } + } + } + cache_set('views_based_libraries', $libraries, 'cache_scald'); + } + + return $libraries; +} + +/** + * Implements hook_views_invalidate_cache(). + */ +function scald_dnd_library_views_invalidate_cache() { + cache_clear_all('views_based_libraries', 'cache_scald'); +} + +/** + * Adds an item in the library array. + */ +function scald_dnd_library_add_item(&$library, $sid) { + $atom = scald_fetch($sid); + $context = variable_get('dnd_context_default', 'sdl_editor_representation'); + $library['atoms'][$sid] = array( + 'meta' => array( + 'title' => $atom->title, + 'type' => $atom->type, + 'data' => !empty($atom->data) ? $atom->data : array(), + 'legend' => '', + ), + 'sas' => '[scald=' . $atom->sid . ':' . $context .']', + 'editor' => scald_render($atom, $context), + 'preview' => scald_render($atom, 'sdl_preview'), + 'actions' => array_keys(scald_atom_actions_available($atom)), + ); + + // theme_sdl_editor_legend() requires a rendered atom. We call it only here to + // make sure that $atom is rendered. + if (empty($atom->omit_legend)) { + $library['atoms'][$sid]['meta']['legend'] = theme('sdl_editor_legend', array('atom' => $atom)); + } + + // Allow other modules to alter this library item. + drupal_alter('scald_dnd_library_item', $atom, $library['atoms'][$sid]); +} + +/** + * Implements hook_preprocess_sdl_library(). + */ +function template_preprocess_sdl_library(&$variables) { + if (is_object($variables['view'])) { + $variables['library_items'] = array(); + $results = $variables['view']->result; + $context = $variables['view']->field['representation']->options['context']; + foreach ($results as $result) { + $sid = $result->sid; + $variables['library_items'][$sid] = scald_render($sid, $context); + } + } + elseif (empty($variables['library_items']) && isset($variables['options'])) { + $variables['library_items'] = $variables['options']; + } +} + +/** + * Implements hook_scald_contexts(). + */ +function scald_dnd_library_scald_contexts() { + return array( + 'sdl_editor_representation' => array( + 'title' => t('Editor Representation'), + 'description' => t('The Editor Rep'), + 'render_language' => 'XHTML', + 'parseable' => TRUE, + 'formats' => array( + 'image' => array('jpeg', 'png', 'passthrough'), + 'audio' => array('wav', 'ogg', 'mp3', 'passthrough'), + ), + ), + 'sdl_preview' => array( + 'title' => t('Preview Representation'), + 'description' => t('The Preview Rep'), + 'render_language' => 'XHTML', + 'parseable' => FALSE, + 'formats' => array( + 'image' => array('jpeg', 'png', 'passthrough'), + 'audio' => array('wav', 'ogg', 'mp3', 'passthrough'), + ), + ), + 'sdl_library_item' => array( + 'title' => t('Library item'), + 'description' => t('The Library Rep'), + 'render_language' => 'XHTML', + 'parseable' => FALSE, + 'formats' => array( + 'image' => array('jpeg', 'png', 'passthrough'), + 'audio' => array('wav', 'ogg', 'mp3', 'passthrough'), + ), + ) + ); +} + +/** + * Implements hook_scald_render(). + */ +function scald_dnd_library_scald_render($atom, $context, $options) { + if (!empty($atom->rendered->thumbnail_transcoded_url)) { + $path = $atom->rendered->thumbnail_transcoded_url; + } + else { + $path = image_style_url('library', $atom->thumbnail_source); + } + + $attributes = array(); + if ($context == 'sdl_library_item') { + $attributes += array('class' => 'drop', 'draggable' => 'TRUE', 'data-atom-id' => $atom->sid); + } + elseif ($context == 'sdl_preview') { + $attributes += array('class' => 'drop', 'draggable' => 'TRUE', 'data-atom-id' => $atom->sid); + } + else { + $attributes += array('class' => 'dnd-dropped'); + } + $image = "'; + switch ($context) { + case 'sdl_preview': + $render = theme('sdl_preview_item', array('atom' => $atom, 'image' => $image)); + break; + case 'sdl_library_item': + $render = theme('sdl_library_item', array('atom' => $atom, 'image' => $image)); + break; + default: + $render = array( + '#theme' => 'sdl_editor_item', + '#informations' => $atom->rendered, + '#image' => $image, + ); + } + + return $render; +} + +/** + * Returns HTML for an atom rendered in the "Library Item" context. + */ +function theme_sdl_library_item($variables) { + $atom = $variables['atom']; + $image = $variables['image']; + $informations = $atom->rendered; + + // Action links + $links = scald_atom_user_build_actions_links($atom, NULL); + // Force all links to open in a new window + foreach ($links as $action => $link) { + $links[$action]['attributes']['target'] = '_blank'; + } + // The Insert link. Use the "_" prefix to avoid collision with possible + // "insert" action. + $links['_insert'] = array( + 'title' => t('Insert'), + 'external' => TRUE, + 'fragment' => FALSE, + 'attributes' => array( + 'data-atom-id' => $atom->sid, + 'style' => 'display:none', + ), + 'href' => '', + ); + + $links_element = array( + '#theme' => 'links', + '#links' => $links, + '#attributes' => array('class' => array('links', 'inline')), + ); + $rendered_links = drupal_render($links_element); + + // Authors. + if (!empty($informations->authors)) { + foreach ($informations->authors as $author) { + $author_names[] = check_plain($author->name); + } + $authors = implode(', ', $author_names); + } + else { + $authors = ''; + } + + $return = "
    {$image}
    +
    +
    {$informations->title}
    +
    {$authors}
    + {$rendered_links} +
    + "; + return $return; +} + +/** + * Returns HTML for an atom rendered in the "Editor Representation" context. + */ +function theme_sdl_editor_item($variables) { + if (empty($variables['informations']->player)) { + return $variables['image']; + } + else { + $player = $variables['informations']->player; + $output = is_array($player) ? $player : array('#markup' => $player); + $output += array( + '#prefix' => '
    ', + '#suffix' => '
    ', + ); + return drupal_render($output); + } +} + +/** + * Returns HTML for the legend of an atom. + */ +function theme_sdl_editor_legend($variables) { + $atom = $variables['atom']; + + if (!empty($atom->rendered->authors)) { + foreach ($atom->rendered->authors as $author) { + $links[] = $author->link; + } + $by = implode(', ', $links); + } + else { + $by = $atom->rendered->publisher['link']; + } + $by = t('by !name', array('!name' => $by)); + return " +
    + {$atom->rendered->title}, {$by} +
    + "; +} + +/** + * Returns HTML for an atom rendered in the "Preview" context. + */ +function theme_sdl_preview_item($variables) { + $atom = $variables['atom']; + $image = $variables['image']; + $resource_label = t('Resource'); + $informations_label = t('Informations'); + $resource = theme('sdl_editor_item', array('informations' => $atom->rendered, 'image' => $image)); + $title_label = t('Title'); + $title_value = $atom->rendered->title; + if (!empty($atom->rendered->authors)) { + $author_label = t('Author'); + foreach ($atom->rendered->authors as $author) { + $names[] = $author->link; + } + $author_name = implode(', ', $names); + $author = "
    $author_label
    $author_name
    "; + } + else { + $author = ""; + } + return " +
    +

    $resource_label

    + $resource +

    $informations_label

    +
    +
    $title_label
    +
    $title_value
    + $author +
    +
    + "; +} + +/** + * Implements hook_views_api(). + */ +function scald_dnd_library_views_api() { + return array( + 'api' => 3, + 'path' => drupal_get_path('module', 'scald_dnd_library') . '/includes', + ); +} + +/** + * Implements hook_image_default_styles(). + */ +function scald_dnd_library_image_default_styles() { + $presets = array(); + $presets['library'] = array( + 'effects' => array( + array( + 'name' => 'image_scale', + 'data' => array( + 'width' => '48', + 'height' => '', + 'upscale' => 0, + ), + 'weight' => '0', + ), + ), + ); + return $presets; +} + +/** + * Implements hook_admin_paths(). + */ +function scald_dnd_library_admin_paths() { + if (variable_get('dnd_modal_admin', FALSE)) { + return array( + dnd_get_library() => TRUE, + ); + } +} diff --git a/docroot/sites/all/modules/contrib/scald/modules/library/scald_dnd_library/sdl-library.tpl.php b/docroot/sites/all/modules/contrib/scald/modules/library/scald_dnd_library/sdl-library.tpl.php new file mode 100644 index 00000000..c16423fc --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/library/scald_dnd_library/sdl-library.tpl.php @@ -0,0 +1,10 @@ + $item): ?> +
    + +
    + diff --git a/docroot/sites/all/modules/contrib/scald/modules/providers/scald_audio/libraries/dewplayer/dewplayer-playlist.swf b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_audio/libraries/dewplayer/dewplayer-playlist.swf new file mode 100644 index 00000000..476471dc Binary files /dev/null and b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_audio/libraries/dewplayer/dewplayer-playlist.swf differ diff --git a/docroot/sites/all/modules/contrib/scald/modules/providers/scald_audio/scald_audio.info b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_audio/scald_audio.info new file mode 100644 index 00000000..30bdcd10 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_audio/scald_audio.info @@ -0,0 +1,13 @@ +name = Scald Audio +description = Provides Audio atoms from audio files. +package = Scald Providers +core = 7.x +dependencies[] = scald + + +; Information added by Drupal.org packaging script on 2016-04-15 +version = "7.x-1.8" +core = "7.x" +project = "scald" +datestamp = "1460730556" + diff --git a/docroot/sites/all/modules/contrib/scald/modules/providers/scald_audio/scald_audio.install b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_audio/scald_audio.install new file mode 100644 index 00000000..adcad782 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_audio/scald_audio.install @@ -0,0 +1,24 @@ + 'Upload Audio file' + ); +} + +/** + * Implements hook_scald_add_form(). + */ +function scald_audio_scald_add_form(&$form, &$form_state) { + $defaults = scald_atom_defaults('audio'); + $type = scald_type_load('audio'); + $form['file'] = array( + '#type' => $defaults->upload_type, + '#title' => check_plain(scald_type_property_translate($type)), + '#upload_location' => 'public://atoms/audio/', + '#upload_validators' => array('file_validate_extensions' => array('wav ogg mp3')), + ); +} + +/** + * Implements hook_scald_add_atom_count(). + */ +function scald_audio_scald_add_atom_count(&$form, &$form_state) { + if (is_array($form_state['values']['file'])) { + return max(count($form_state['values']['file']), 1); + } + return 1; +} + +/** + * Implements hook_scald_add_form_fill(). + */ +function scald_audio_scald_add_form_fill(&$atoms, $form, $form_state) { + $dir_audio_thumb = ScaldAtomController::getThumbnailPath('audio'); + foreach ($atoms as $delta => $atom) { + if (is_array($form_state['values']['file']) && module_exists('plupload')) { + module_load_include('inc', 'scald', 'includes/scald.plupload'); + $file = scald_plupload_save_file($form_state['values']['file'][$delta]['tmppath'], $form['file']['#upload_location'] . $form_state['values']['file'][$delta]['name']); + } + else { + $file = file_load($form_state['values']['file']); + } + $atom->base_id = $file->fid; + $atom->file_source = $file->uri; + $atom->data['audio_file'] = $file->uri; + $atom->data['audio_id'] = $file->fid; + $atom->title = $file->filename; + + if (file_prepare_directory($dir_audio_thumb, FILE_CREATE_DIRECTORY)) { + if (module_exists('waudio_getid3') && $getid3 = _waudio_getid3_load()) { + $filepath = drupal_realpath($file->uri); + // Get all id3 infos. + $ret = waudio_getid3_ret_infos($filepath, $getid3); + } + elseif (module_exists('getid3') && ($id3 = getid3_instance())) { + $filepath = drupal_realpath($file->uri); + $ret = array(); + // Get all id3 infos. + $info = $id3->analyze($filepath); + foreach($info['tags']['id3v2'] as $key => $value) { + $ret['tags'][$key] = $value[0]; + } + if (!empty($info['comments']['picture'][0]['data']) && !empty($info['comments']['picture'][0]['image_mime'])) { + $ret['images'][0]['data'] = $info['comments']['picture'][0]['data']; + $ret['images'][0]['image_mime'] = $info['comments']['picture'][0]['image_mime']; + } + elseif (!empty($info['id3v2']['APIC'][0]['data']) && !empty($info['id3v2']['APIC'][0]['image_mime'])) { + $ret['images'][0]['data'] = $info['id3v2']['APIC'][0]['data']; + $ret['images'][0]['image_mime'] = $info['id3v2']['APIC'][0]['image_mime']; + } + } + if (!empty($ret)) { + $atom->title = !empty($ret['tags']['title']) ? $ret['tags']['title'] : $file->filename; + + // Prefill the author. + $langcode = field_language('scald_atom', $atom, 'scald_authors'); + $atom->scald_authors[$langcode][0] = array( + 'tid' => 0, + 'taxonomy_term' => (object)(array('name' => isset($ret['tags']['artist'])?$ret['tags']['artist']:t('Unknown'))) + ); + + // Prefill tags. + $langcode = field_language('scald_atom', $atom, 'scald_tags'); + $atom->scald_tags[$langcode][0] = array( + 'tid' => 0, // Beware, this is not a real tid, it's just an index. + 'taxonomy_term' => (object)(array('name' => isset($ret['tags']['genre'])?$ret['tags']['genre']:t('Unknown'))) + ); + + $atom->data['artist'] = isset($ret['tags']['artist'])?$ret['tags']['artist']:''; + $atom->data['title'] = isset($ret['tags']['title'])?$ret['tags']['title']:''; + $atom->data['album'] = isset($ret['tags']['album'])?$ret['tags']['album']:''; + $atom->data['track'] = isset($ret['tags']['track'])?$ret['tags']['track']:isset($ret['tags']['track_number'])?$ret['tags']['track_number']:''; + $atom->data['year'] = isset($ret['tags']['year'])?$ret['tags']['year']:''; + $atom->data['genre'] = isset($ret['tags']['genre'])?$ret['tags']['genre']:''; + + // If the MP3 includes a cover art, use it as the default thumbnail. + if (isset($ret['images'][0]['data']) && $ret['images'][0]['data'] != '') { + $extension = '.jpg'; + if ($ret['images'][0]['image_mime'] == 'image/png') { + $extension = '.png'; + } + elseif ($ret['images'][0]['image_mime'] == 'image/gif') { + $extension = '.gif'; + } + $dest = $dir_audio_thumb . '/' . $file->filename . $extension; + $file = file_save_data($ret['images'][0]['data'], $dest); + + if ($file) { + // Set the file status to temporary (image thumb). + db_update('file_managed') + ->condition('fid', $file->fid) + ->fields(array('status' => 0)) + ->execute(); + $langcode = field_language('scald_atom', $atom, 'scald_thumbnail'); + $atom->scald_thumbnail[$langcode][0] = (array) $file; + } + } + } + } + } +} + +/** + * Implements hook_scald_fetch(). + */ +function scald_audio_scald_fetch($atom, $type) { + $file_items = field_get_items('scald_atom', $atom, 'scald_thumbnail'); + if (!empty($file_items)) { + $file_item = current($file_items); + if (file_exists($file_item['uri'])) { + $atom->thumbnail_source = $file_item['uri']; + } + } + $file = file_load($atom->base_id); + $atom->base_entity = $file; + $atom->file_source = $atom->data['audio_file']; +} + +/** + * Implements hook_scald_atom_insert(). + */ +function scald_audio_scald_atom_insert($atom) { + if ($atom->provider == 'scald_audio') { + $file = file_load($atom->data['audio_id']); + if ($file) { + $file->status = FILE_STATUS_PERMANENT; + file_save($file); + file_usage_add($file, 'scald_audio', 'scald_atom', $atom->sid); + } + } +} + +/** + * Implements hook_scald_player(). + */ +function scald_audio_scald_player() { + return array( + 'html5_player' => array( + 'name' => 'HTML5 Audio player', + 'description' => 'The HTML5 player for audio atoms.', + 'type' => array('audio'), + ), + ); +} + +/** + * Implements hook_scald_prerender(). + */ +function scald_audio_scald_prerender($atom, $context, $options, $mode) { + if ($mode == 'atom') { + $atom->rendered->player = theme('scald_audio_player', + array('vars' => + array( + 'atom' => $atom, + 'audio_uri' => $atom->file_source, + 'thumbnail' => $atom->thumbnail_source, + ), + ) + ); + } + elseif ($mode == 'player') { + $atom->rendered->player = theme('scald_audio_html5', + array('vars' => + array( + 'atom' => $atom, + 'audio_uri' => $atom->file_source, + 'thumbnail' => $atom->thumbnail_source, + ), + ) + ); + } +} + +/** + * Implements hook_theme(). + */ +function scald_audio_theme() { + return array( + 'scald_audio_player' => array( + 'variables' => array('vars' => NULL), + 'template' => 'scald_audio_player' + ), + 'scald_audio_html5' => array( + 'variables' => array('vars' => NULL), + 'template' => 'scald_audio_html5' + ), + ); +} + diff --git a/docroot/sites/all/modules/contrib/scald/modules/providers/scald_audio/scald_audio_html5.tpl.php b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_audio/scald_audio_html5.tpl.php new file mode 100644 index 00000000..274b8543 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_audio/scald_audio_html5.tpl.php @@ -0,0 +1,11 @@ + + diff --git a/docroot/sites/all/modules/contrib/scald/modules/providers/scald_audio/scald_audio_player.tpl.php b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_audio/scald_audio_player.tpl.php new file mode 100644 index 00000000..a28dd1e9 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_audio/scald_audio_player.tpl.php @@ -0,0 +1,12 @@ + + + + + + diff --git a/docroot/sites/all/modules/contrib/scald/modules/providers/scald_flash/icons/flash-large-color.png b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_flash/icons/flash-large-color.png new file mode 100644 index 00000000..91b41168 Binary files /dev/null and b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_flash/icons/flash-large-color.png differ diff --git a/docroot/sites/all/modules/contrib/scald/modules/providers/scald_flash/icons/flash-large-inverted.png b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_flash/icons/flash-large-inverted.png new file mode 100644 index 00000000..adc17aae Binary files /dev/null and b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_flash/icons/flash-large-inverted.png differ diff --git a/docroot/sites/all/modules/contrib/scald/modules/providers/scald_flash/icons/flash-large.png b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_flash/icons/flash-large.png new file mode 100644 index 00000000..c7f065b1 Binary files /dev/null and b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_flash/icons/flash-large.png differ diff --git a/docroot/sites/all/modules/contrib/scald/modules/providers/scald_flash/icons/flash.png b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_flash/icons/flash.png new file mode 100644 index 00000000..308634c2 Binary files /dev/null and b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_flash/icons/flash.png differ diff --git a/docroot/sites/all/modules/contrib/scald/modules/providers/scald_flash/scald_flash.css b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_flash/scald_flash.css new file mode 100644 index 00000000..db88216c --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_flash/scald_flash.css @@ -0,0 +1,9 @@ +.dnd-library-wrapper .editor-item .meta.type-flash { + background-image: url('icons/flash-large.png'); +} +.scald-menu .add-buttons .add-flash { + background: url('icons/flash-large-inverted.png') 50% 50% no-repeat; +} +.scald-menu .add-buttons .add-flash:hover { + background: url('icons/flash-large-color.png') 50% 50% no-repeat; +} diff --git a/docroot/sites/all/modules/contrib/scald/modules/providers/scald_flash/scald_flash.info b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_flash/scald_flash.info new file mode 100644 index 00000000..f0f16f11 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_flash/scald_flash.info @@ -0,0 +1,14 @@ +name = Scald Flash +description = Provides Flash atoms from SWF files. +package = Scald Providers +core = 7.x +dependencies[] = scald +stylesheets[all][] = scald_flash.css + + +; Information added by Drupal.org packaging script on 2016-04-15 +version = "7.x-1.8" +core = "7.x" +project = "scald" +datestamp = "1460730556" + diff --git a/docroot/sites/all/modules/contrib/scald/modules/providers/scald_flash/scald_flash.install b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_flash/scald_flash.install new file mode 100644 index 00000000..dd1b961d --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_flash/scald_flash.install @@ -0,0 +1,103 @@ +thumbnail_source = drupal_get_path('module', 'scald_flash') . '/icons/flash.png'; + + $defaults = variable_get('scald_atom_defaults', array()); + $defaults['flash'] = $default; + $defaults = variable_set('scald_atom_defaults', $defaults); +} + +/** + * Implements hook_uninstall(). + */ +function scald_flash_uninstall() { + field_delete_field('scald_width'); + field_delete_field('scald_height'); + + $defaults = variable_get('scald_atom_defaults', array()); + unset($defaults['flash']); + $defaults = variable_set('scald_atom_defaults', $defaults); + + drupal_load('module', 'scald'); + // If Scald is disabled, its classes are not autoloaded. + module_load_include('inc', 'scald', 'includes/ScaldAtomController'); + + ScaldAtomController::removeType('flash'); +} + +/** + * Implements hook_enable(). + * + * Ensures that various configuration options are set so that Scald Core can + * make certain assumptions about the contents of variables. + */ +function scald_flash_enable() { + _scald_flash_create_width_field(); + _scald_flash_create_height_field(); +} + +/** + * Create a field to store atom width. + */ +function _scald_flash_create_width_field() { + // Create the scald_width field. + if (!field_info_field('scald_width')) { + $field = array( + 'field_name' => 'scald_width', + 'type' => 'text', + 'label' => t('Width'), + ); + field_create_field($field); + + $instance = array( + 'field_name' => 'scald_width', + 'label' => t('Width'), + 'entity_type' => 'scald_atom', + 'bundle' => 'flash', + 'required' => FALSE, + ); + + if (!field_read_instance($instance['entity_type'], $instance['field_name'], $instance['bundle'])) { + field_create_instance($instance); + } + } +} + +/** + * Create a field to store atom height. + */ +function _scald_flash_create_height_field() { + // Create the scald_height field. + if (!field_info_field('scald_height')) { + $field = array( + 'field_name' => 'scald_height', + 'type' => 'text', + 'label' => t('Height'), + ); + field_create_field($field); + + $instance = array( + 'field_name' => 'scald_height', + 'label' => t('Height'), + 'entity_type' => 'scald_atom', + 'bundle' => 'flash', + 'required' => FALSE, + ); + if (!field_read_instance($instance['entity_type'], $instance['field_name'], $instance['bundle'])) { + field_create_instance($instance); + } + } +} diff --git a/docroot/sites/all/modules/contrib/scald/modules/providers/scald_flash/scald_flash.module b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_flash/scald_flash.module new file mode 100644 index 00000000..81927a32 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_flash/scald_flash.module @@ -0,0 +1,158 @@ + 'Embed swf object (Flash)' + ); +} + + +function scald_flash_scald_add_form(&$form, &$form_state) { + $defaults = scald_atom_defaults('flash'); + $form['file_swf'] = array( + '#type' => $defaults->upload_type, + '#title' => t('SWF File'), + '#upload_location' => 'public://atoms/swf/', + '#upload_validators' => array('file_validate_extensions' => array('swf')), + ); +} + +/** + * Implements hook_scald_add_atom_count(). + */ +function scald_flash_scald_add_atom_count(&$form, &$form_state) { + if (is_array($form_state['values']['file_swf'])) { + return max(count($form_state['values']['file_swf']), 1); + } + return 1; +} + + +/** + * Implements hook_scald_add_form_fill. + */ +function scald_flash_scald_add_form_fill(&$atoms, $form, $form_state) { + foreach ($atoms as $delta => $atom) { + if (is_array($form_state['values']['file_swf']) && module_exists('plupload')) { + module_load_include('inc', 'scald', 'includes/scald.plupload'); + $file = scald_plupload_save_file($form_state['values']['file_swf'][$delta]['tmppath'], $form['file_swf']['#upload_location'] . $form_state['values']['file_swf'][$delta]['name']); + } + else { + $file = file_load($form_state['values']['file_swf']); + } + $atom->title = $file->filename; + $atom->base_id = $file->fid; + $size_infos = getimagesize($file->uri); + $atom->data['flash_width'] = $size_infos[0]; + $atom->data['flash_height'] = $size_infos[1]; + $langcode = field_language('scald_atom', $atom, 'scald_width'); + $atom->scald_width[$langcode][0]['value'] = $size_infos[0]; + $atom->scald_height[$langcode][0]['value'] = $size_infos[1]; + } +} + +/** +* Implements hook_scald_fetch. +*/ +function scald_flash_scald_fetch($atom, $type) { + // Get the flash thumbnail. + $file = file_load($atom->base_id); + $atom->base_entity = $file; + $atom->file_source = $file->uri; + + if ($items = field_get_items('scald_atom', $atom, 'scald_thumbnail')) { + $atom->thumbnail_source = $items[0]['uri']; + } + else { + $atom->thumbnail_source = drupal_get_path('module', 'scald_flash') . '/icons/flash.png'; + } +} + +/** + * Implements hook_scald_atom_insert(). + */ +function scald_flash_scald_atom_insert($atom) { + if ($atom->provider == 'scald_flash') { + $file = file_load($atom->base_id); + if ($file) { + $file->status = FILE_STATUS_PERMANENT; + file_save($file); + file_usage_add($file, 'scald_flash', 'scald_atom', $atom->sid); + } + } +} + +/** + * Implements hook_scald_prerender. + */ +function scald_flash_scald_prerender($atom, $context, $options, $mode) { + if ($mode == 'atom') { + if ($context === 'sdl_library_item') { + $scald_thumbnail = field_get_items('scald_atom', $atom, 'scald_thumbnail'); + if (empty($scald_thumbnail)) { + $atom->rendered->thumbnail_transcoded_url = file_create_url($atom->thumbnail_source); + } + } + else { + $flash_width = 480; + $flash_height = 365; + + $scald_width = field_get_items('scald_atom', $atom, 'scald_width'); + if (!empty($scald_width)) { + $flash_width = $scald_width[0]['value']; + } + $scald_height = field_get_items('scald_atom', $atom, 'scald_height'); + if (!empty($scald_height)) { + $flash_height = $scald_height[0]['value']; + } + + // Allow context configuration to override flash dimension variables. + $context_config = scald_context_config_load($context); + if (!empty($context_config->data['width']) && !empty($context_config->data['height'])) { + $flash_width = $context_config->data['width']; + $flash_height = $context_config->data['height']; + } + $atom->rendered->player = theme('scald_flash_object', + array('vars' => + array( + 'flash_uri' => $atom->rendered->file_source_url, + 'flash_width' => $flash_width, + 'flash_height' => $flash_height, + 'thumbnail' => $atom->thumbnail_source, + ), + ) + ); + } + } +} + +/** + * Preprocess variables for the Scald Flash Object template. + */ +function template_preprocess_scald_flash_object(&$vars) { + foreach (array('flash_width', 'flash_height') as $attribute) { + $vars['vars'][$attribute] = check_plain($vars['vars'][$attribute]); + } +} + +/** + * Implements hook_theme. + */ +function scald_flash_theme() { + return array( + 'scald_flash_object' => array( + 'variables' => array('vars' => NULL), + 'template' => 'scald_flash_object' + ), + ); +} + diff --git a/docroot/sites/all/modules/contrib/scald/modules/providers/scald_flash/scald_flash_object.tpl.php b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_flash/scald_flash_object.tpl.php new file mode 100644 index 00000000..50790557 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_flash/scald_flash_object.tpl.php @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + diff --git a/docroot/sites/all/modules/contrib/scald/modules/providers/scald_image/scald_image.info b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_image/scald_image.info new file mode 100644 index 00000000..a1d7605f --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_image/scald_image.info @@ -0,0 +1,14 @@ +name = Scald Image +description = Provides Image atoms from image files. +package = Scald Providers +core = 7.x +dependencies[] = scald +dependencies[] = image + + +; Information added by Drupal.org packaging script on 2016-04-15 +version = "7.x-1.8" +core = "7.x" +project = "scald" +datestamp = "1460730556" + diff --git a/docroot/sites/all/modules/contrib/scald/modules/providers/scald_image/scald_image.install b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_image/scald_image.install new file mode 100644 index 00000000..22d16ad2 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_image/scald_image.install @@ -0,0 +1,50 @@ + $settings) { + $instance['display'][$view_mode]['type'] = 'hidden'; + } + field_update_instance($instance); + } + + // Associate the image atom type to the "library" image style in the library + // context. + $context_config = scald_context_config_load('sdl_library_item'); + $context_config->transcoder['image']['*'] = 'style-library'; + scald_context_config_save($context_config); +} + +/** + * Implements hook_uninstall(). + */ +function scald_image_uninstall() { + drupal_load('module', 'scald'); + // If Scald is disabled, its classes are not autoloaded. + module_load_include('inc', 'scald', 'includes/ScaldAtomController'); + + ScaldAtomController::removeType('image'); +} + +/** + * Hide the Image field because the image is rendered once in the Atom core. + * + * This make Scald Image consistent with other atom types. + */ +function scald_image_update_7000() { + $instance = field_info_instance('scald_atom', 'scald_thumbnail', 'image'); + foreach ($instance['display'] as $view_mode => $settings) { + $instance['display'][$view_mode]['type'] = 'hidden'; + } + field_update_instance($instance); +} diff --git a/docroot/sites/all/modules/contrib/scald/modules/providers/scald_image/scald_image.js b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_image/scald_image.js new file mode 100644 index 00000000..a3102bc7 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_image/scald_image.js @@ -0,0 +1,61 @@ +(function ($) { + Drupal.behaviors.scaldImage = { + attach: function (context, settings) { + if (typeof Drupal.dndck4 !== 'undefined') { + Drupal.dndck4.addOption('txtLink', 'image', 'atom', 'scald_image', function (infoTab, dialogDefinition) { + infoTab.add({ + id: 'txtLink', + type: 'text', + label: Drupal.t('Link'), + // "Link" edits the 'link' property in the options JSON string. + setup: function (widget) { + var options = JSON.parse(widget.data.options); + if (options.link) { + this.setValue(decodeURIComponent(options.link)); + } + }, + commit: function (widget) { + // Copy the current options into a new object, + var options = JSON.parse(widget.data.options); + var value = this.getValue(); + if (value != '') { + options.link = encodeURIComponent(value); + } + else { + delete options.link; + } + widget.setData('options', JSON.stringify(options)); + } + }); + }); + Drupal.dndck4.addOption('cmbLinkTarget', 'image', 'atom', 'scald_image', function (infoTab, dialogDefinition) { + infoTab.add({ + id: 'cmbLinkTarget', + type: 'select', + label: Drupal.t('Link Target'), + items: [[Drupal.t('None'), '_self'], [Drupal.t('Blank'), '_blank'], [Drupal.t('Parent'), '_parent']], + // "Link Target" edits the 'linkTarget' property in the options JSON string. + setup: function (widget) { + var options = JSON.parse(widget.data.options); + if (options.linkTarget) { + this.setValue(options.linkTarget); + } + }, + commit: function (widget) { + // Copy the current options into a new object, + var options = JSON.parse(widget.data.options); + var value = this.getValue(); + if (value != '') { + options.linkTarget = value; + } + else { + delete options.linkTarget; + } + widget.setData('options', JSON.stringify(options)); + } + }); + }); + } + } + }; +})(jQuery); diff --git a/docroot/sites/all/modules/contrib/scald/modules/providers/scald_image/scald_image.module b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_image/scald_image.module new file mode 100644 index 00000000..8d2461e1 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_image/scald_image.module @@ -0,0 +1,341 @@ + 'Image upload' + ); + // This code will never be hit, but is necessary to mark the string + // for translation on localize.d.o + t('Image upload'); +} + +/** + * Implements hook_scald_wysiwyg_context_list_alter(). + */ +function scald_image_scald_wysiwyg_context_list_alter(&$contexts) { + drupal_add_js(drupal_get_path('module', 'scald_image') . '/scald_image.js'); +} + +/** + * Implements hook_scald_add_form(). + */ +function scald_image_scald_add_form(&$form, &$form_state) { + $defaults = scald_atom_defaults('image'); + $defaults->description = ScaldAtomController::getFieldDescription('image'); + $defaults->upload_validators = ScaldAtomController::getFieldUploadValidators('image'); + $type = scald_type_load('image'); + $form['file'] = array( + '#type' => $defaults->upload_type, + '#title' => check_plain(scald_type_property_translate($type)), + '#upload_location' => ScaldAtomController::getThumbnailPath('image'), + '#upload_validators' => $defaults->upload_validators, + ); + if ($defaults->upload_type === 'managed_file') { + $form['file']['#description'] = theme('file_upload_help', array('description' => $defaults->description, 'upload_validators' => $defaults->upload_validators)); + } + if ($defaults->upload_type == 'plupload') { + $form['scald_authors'] = array( + '#type' => 'textfield', + '#default_value' => NULL, + '#maxlength' => 100, + '#autocomplete_path' => 'taxonomy/autocomplete/scald_authors', + '#required' => FALSE, + '#title' => t('Authors'), + '#description' => t('Preset value for %field_name field. If left empty, the default field value will be used.', array('%field_name' => t('Authors'))), + ); + $form['scald_tags'] = array( + '#type' => 'textfield', + '#default_value' => NULL, + '#maxlength' => 100, + '#autocomplete_path' => 'taxonomy/autocomplete/scald_tags', + '#required' => FALSE, + '#title' => t('Tags'), + '#description' => t('Preset value for %field_name field. If left empty, the default field value will be used.', array('%field_name' => t('Tags'))), + ); + } +} + +/** + * Implements hook_scald_add_atom_count(). + */ +function scald_image_scald_add_atom_count(&$form, &$form_state) { + if (is_array($form_state['values']['file'])) { + return max(count($form_state['values']['file']), 1); + } + return 1; +} + +/** + * Implements hook_scald_add_form_fill(). + */ +function scald_image_scald_add_form_fill(&$atoms, $form, $form_state) { + foreach ($atoms as $delta => $atom) { + if (is_array($form_state['values']['file']) && module_exists('plupload')) { + module_load_include('inc', 'scald', 'includes/scald.plupload'); + $destination = $form['file']['#upload_location'] . '/' . $form_state['values']['file'][$delta]['name']; + $file = scald_plupload_save_file($form_state['values']['file'][$delta]['tmppath'], $destination); + } + else { + $file = file_load($form_state['values']['file']); + } + $atom->title = $file->filename; + $atom->base_id = $file->fid; + foreach (array('author', 'tag') as $name) { + // Hacky, because variable and field name do not really match. + $field_name = 'scald_' . $name . 's'; + $langcode = field_language('scald_atom', $atom, $field_name); + if (empty($form_state['values'][$field_name])) { + continue; + } + + // Borrowed from taxonomy_autocomplete_validate(). + $typed_terms = drupal_explode_tags($form_state['values'][$field_name]); + $vocabulary = taxonomy_vocabulary_machine_name_load(variable_get('scald_' . $name . '_vocabulary', $field_name)); + foreach ($typed_terms as $typed_term) { + if ($possibilities = taxonomy_term_load_multiple(array(), array('name' => trim($typed_term), 'vid' => $vocabulary->vid))) { + $term = array_pop($possibilities); + } + else { + $term = (object) array( + 'vid' => $vocabulary->vid, + 'name' => $typed_term, + 'vocabulary_machine_name' => $vocabulary->machine_name, + ); + taxonomy_term_save($term); + } + $atom->{$field_name}[$langcode][] = array('tid' => $term->tid); + } + } + + $langcode = field_language('scald_atom', $atom, 'scald_thumbnail'); + $atom->scald_thumbnail[$langcode][0] = (array) $file; + } +} + +/** + * Implements hook_scald_transcoders(). + */ +function scald_image_scald_transcoders() { + $transcoders = array(); + foreach (image_styles() as $name => $style) { + $label = isset($style['label']) ? $style['label'] : $style['name']; + $transcoders['style-' . $name] = array( + 'title' => t('@style (Image style)', array('@style' => $label)), + 'description' => t('Use the Image style @style to prepare the image', array('@style' => $label)), + 'formats' => array( + 'image' => 'passthrough', + ), + ); + } + if (module_exists('picture')) { + foreach (picture_mapping_load_all() as $name => $style) { + $transcoders['group-' . $name] = array( + 'title' => t('@group (Picture group)', array('@group' => $name)), + 'description' => t('Use the Picture group @group to prepare the image', array('@group' => $name)), + 'formats' => array( + 'image' => 'passthrough', + ), + ); + } + } + return $transcoders; +} + +/** + * Implements hook_scald_player(). + */ +function scald_image_scald_player() { + return array( + 'image_figure' => array( + 'name' => 'HTML5 Image player', + 'description' => 'The HTML5 player using figure/figcaption for all image atoms.', + 'type' => array('image'), + 'settings' => array( + 'classes' => '', + 'caption' => '[atom:title], by [atom:author]', + ), + ), + ); +} + +/** + * Implements hook_scald_player_settings_form(). + */ +function scald_image_scald_player_settings_form($form, &$form_state) { + $element = array(); + + $element['classes'] = array( + '#type' => 'textfield', + '#title' => t('CSS classes'), + '#size' => 40, + '#default_value' => $form['#scald']['player_settings']['classes'], + ); + $element['caption'] = array( + '#type' => 'textfield', + '#title' => t('Text pattern used for caption'), + '#size' => 40, + '#default_value' => $form['#scald']['player_settings']['caption'], + ); + + return $element; +} + +/** + * Implements hook_scald_fetch(). + */ +function scald_image_scald_fetch($atom, $type) { + if ($type == 'atom') { + $file = file_load($atom->base_id); + $atom->base_entity = $file; + $atom->file_source = $file->uri; + $atom->thumbnail_source = $file->uri; + } +} + +/** + * Implements hook_scald_prerender(). + */ +function scald_image_scald_prerender($atom, $context, $options, $mode) { + $config = scald_context_config_load($context); + + // Find out which transcoder is in use, and checks if it's + // one of the transcoder provided by Scald Image. + $style_name = NULL; + if ($transcoder = $config->transcoder[$atom->type]['*']) { + // Image style support. + if (preg_match('/^style-(.*)$/', $transcoder, $match)) { + $style_name = $match[1]; + } + // Picture support. + elseif (preg_match('/^group-(.*)$/', $transcoder, $match) && module_exists('picture')) { + $mappings = picture_mapping_load($match[1]); + } + } + + if ($mode == 'transcoder') { + // Scald Image can only do 1:1 transcoding. For Picture integration, it is + // done in the Atom mode to avoid duplicate code from Picture module. + if (empty($style_name)) { + return; + } + + $preset = image_style_load($style_name); + + if (!empty($atom->file_source)) { + $atom->file_transcoded = image_style_path($preset['name'], $atom->file_source); + $atom->rendered->file_transcoded_url = image_style_url($preset['name'], $atom->file_source); + } + } + elseif ($mode == 'player') { + $settings = $config->player[$atom->type]['settings']; + $classes = array_merge(array('scald-atom', 'scald-atom-image'), explode(' ', check_plain($settings['classes']))); + $caption = token_replace($settings['caption'], array('atom' => $atom)); + $atom->rendered->player = ' +
    + ' . $atom->rendered->player . ' +
    ' . filter_xss_admin($caption) . '
    +
    + '; + } + elseif ($mode == 'atom') { + // Default attributes, which can be overridden by field settings. + $attributes = array( + 'alt' => $atom->title, + 'title' => $atom->title, + ); + $langcode = field_language('scald_atom', $atom, 'scald_thumbnail'); + foreach (array('alt', 'title', 'width', 'height') as $attribute_name) { + if (isset($atom->scald_thumbnail[$langcode][0][$attribute_name]) && $atom->scald_thumbnail[$langcode][0][$attribute_name]) { + $attributes[$attribute_name] = $atom->scald_thumbnail[$langcode][0][$attribute_name]; + } + } + + if (!empty($style_name)) { + $atom->rendered->player = theme('image_style', array('path' => $atom->file_source, 'style_name' => $style_name) + $attributes); + } + elseif (isset($mappings)) { + foreach ($mappings->mapping as $breakpoint_name => $multipliers) { + if (!empty($multipliers)) { + foreach ($multipliers as $multiplier => $image_style) { + if (!$image_style) { + continue; + } + // $image_style is machine name in Picture 1.x and an array in + // Picture 2.x. + if (is_array($image_style) && $image_style['mapping_type'] === '_none') { + continue; + } + + $fallback_image_style = is_array($image_style) ? $image_style['image_style'] : $image_style; + break 2; + } + } + } + // The fallback_image_style is the first image style we find, and so if it + // is empty then we do not have any image style. + if (!empty($fallback_image_style)) { + $atom->rendered->player = theme('picture', array('uri' => $atom->file_source, 'style_name' => $fallback_image_style, 'breakpoints' => $mappings->mapping) + $attributes); + } + } + else { + $path = empty($atom->rendered->file_transcoded_url) ? $atom->file_source : $atom->rendered->file_transcoded_url; + $atom->rendered->player = theme('image', array('path' => $path) + $attributes); + } + + if (!empty($options['link'])) { + $link_options = array('html' => TRUE); + if (!empty($options['linkTarget'])) { + $link_options += array( + 'attributes' => array( + 'target' => $options['linkTarget'], + ), + ); + } + $atom->rendered->player = l($atom->rendered->player, urldecode($options['link']), $link_options); + } + } +} + +/** + * Implements hook_scald_update_atom(). + */ +function scald_image_scald_update_atom($atom, $mode) { + if ($mode == 'atom') { + _scald_image_sync_thumbnail($atom); + } +} + +/** + * Implements hook_scald_register_atom(). + */ +function scald_image_scald_register_atom($atom, $mode) { + if ($mode == 'atom') { + _scald_image_sync_thumbnail($atom); + } +} + +/** + * Synchronisation of thumbnail with base_id. + * + * The thumbnail field is also the base entity. We keep them in synchronisation + * when user update that field. + */ +function _scald_image_sync_thumbnail($atom) { + if (!empty($atom->scald_thumbnail)) { + $items = field_get_items('scald_atom', $atom, 'scald_thumbnail'); + $atom->base_id = $items[0]['fid']; + } +} + diff --git a/docroot/sites/all/modules/contrib/scald/modules/providers/scald_video/README.txt b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_video/README.txt new file mode 100644 index 00000000..8f1dcd13 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_video/README.txt @@ -0,0 +1,31 @@ +Scald Video is a scald provider to host your videos in your drupal site. +Accepts video files .mp4, .webm and .ogv. + +The following modules provide additional players: + - VideoJS (http://www.videojs.com/): html5, flash fallback + https://www.drupal.org/project/scald_video_videojs + - JWPlayer: uses https://www.drupal.org/project/jw_player + https://www.drupal.org/project/scald_video_jw_player + +Install: + - Enable module (https://drupal.org/documentation/install/modules-themes/modules-7) + +Configure: + - Configure a context to use the new video player providers, on admin/structure/scald/video/contexts + +How to use: + - Create a new video atom + - Choose in the source list "Upload a video" + - Upload a video file + +Known issues: + - For the moment, the module is not able to get a thumbnail automatically from the video file. So don't forget to + define a thubmnail when creating the atom. + +Extend it +You can provide different player by creating scald players module. You can take example on subdirectory players. +Name players by following this logic: scald_video_player_[library_name] + +TODO + - videos transcoding: mp4, webm (see https://drupal.org/project/ffmpeg_wrapper & https://drupal.org/project/video) + - responsive diff --git a/docroot/sites/all/modules/contrib/scald/modules/providers/scald_video/scald_video.info b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_video/scald_video.info new file mode 100644 index 00000000..883ba83a --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_video/scald_video.info @@ -0,0 +1,12 @@ +name = Scald Video +description = Provides Video atoms from video files. +package = Scald Providers +core = 7.x +dependencies[] = scald + +; Information added by Drupal.org packaging script on 2016-04-15 +version = "7.x-1.8" +core = "7.x" +project = "scald" +datestamp = "1460730556" + diff --git a/docroot/sites/all/modules/contrib/scald/modules/providers/scald_video/scald_video.install b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_video/scald_video.install new file mode 100644 index 00000000..f6f3b91b --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/modules/providers/scald_video/scald_video.install @@ -0,0 +1,22 @@ + 'Upload Video file' + ); +} + +/** + * Implements hook_scald_add_form(). + */ +function scald_video_scald_add_form(&$form, &$form_state) { + scald_video_get_video_file_form($form['file']); + $form['file']['#title'] = 'Video'; +} + +/** + * Implements hook_scald_add_atom_count(). + */ +function scald_video_scald_add_atom_count(&$form, &$form_state) { + if (is_array($form_state['values']['file'])) { + return max(count($form_state['values']['file']), 1); + } + return 1; +} + +/** + * Implements hook_scald_add_form_fill(). + */ +function scald_video_scald_add_form_fill(&$atoms, $form, $form_state) { + $dir_video_thumb = 'public://atoms/video/thumb'; + + foreach ($atoms as $delta => $atom) { + + // Delta is used only with multifile field: + if (is_array($form_state['values']['file'])) { + // plupload infos: + $file_infos = $form_state['values']['file'][$delta]; + } + else { + // This will be a fid: + $file_infos = $form_state['values']['file']; + } + $file = scald_video_get_video_file($file_infos, $form['file']['#upload_location']); + + $atom->base_id = $file->fid; + $atom->file_source = $file->uri; + $atom->data['video_file'] = $file->uri; + $atom->data['video_id'] = $file->fid; + $atom->title = $file->filename; + + // @TODO : find lib to get metadatas from video files + } +} + +/** + * Implements hook_scald_fetch(). + */ +function scald_video_scald_fetch($atom, $type) { + $file_items = field_get_items('scald_atom', $atom, 'scald_thumbnail'); + if (!empty($file_items)) { + $file_item = current($file_items); + if (file_exists($file_item['uri'])) { + $atom->thumbnail_source = $file_item['uri']; + } + } + $atom->file_source = $atom->data['video_file']; +} + +/** + * Implements hook_scald_atom_insert(). + */ +function scald_video_scald_atom_insert($atom) { + if ($atom->provider == 'scald_video') { + $file = file_load($atom->data['video_id']); + if ($file) { + $file->status = FILE_STATUS_PERMANENT; + file_save($file); + file_usage_add($file, 'scald_video', 'scald_atom', $atom->sid); + } + } +} + +/** + * Implements hook_scald_prerender(). + */ +function scald_video_scald_prerender($atom, $context, $options, $mode) { + + $video_datas = array(); + $video_datas[] = array( + 'path' => file_create_url($atom->file_source), + 'mime_type' => file_get_mimetype($atom->file_source), + ); + + // Loading alternative video sources: + if (isset($atom->data['alternative_video_sources']) && count($atom->data['alternative_video_sources'])) { + foreach ($atom->data['alternative_video_sources'] as $key => $video_file) { + $video_datas[] = array( + 'path' => file_create_url($video_file->uri), + 'mime_type' => $video_file->filemime, + ); + } + } + + $video_sources = array(); + foreach ($video_datas as $key => $video) { + $video_sources[] = array( + 'path' => $video['path'], + 'mime_type' => $video['mime_type'], + ); + } + + if ($mode == 'atom') { + $atom->rendered->player = theme('scald_video_player', + array('vars' => + array( + 'atom' => $atom, + 'video_sources' => $video_sources, + 'video_width' => check_plain($atom->data['video_width']), + 'video_height' => check_plain($atom->data['video_height']), + 'thumbnail' => $atom->thumbnail_source, + 'class' => 'scald_video', + 'context' => $context, + ), + ) + ); + } +} + +/** + * Implements hook_theme(). + */ +function scald_video_theme() { + return array( + 'scald_video_player' => array( + 'variables' => array('vars' => NULL), + 'template' => 'scald_video_player' + ) + ); +} + +/** + * Implements hook_file_mimetype_mapping_alter(). + */ +function scald_video_file_mimetype_mapping_alter(&$mapping) { + if (!in_array('video/webm', $mapping['mimetypes'])) { + $mapping['mimetypes'][] = 'video/webm'; + $mapping['extensions']['webm'] = count($mapping['mimetypes']) - 1; + } +} + +/** + * Implements hook_form_FORM_ID_alter(). + */ +function scald_video_form_scald_atom_add_form_options_alter(&$form, &$form_state) { + + // We check for multiple atoms on the form: + if (isset($form_state['scald']['atom'])) { + $atoms = array($form_state['scald']['atom']); + } + else { + $atoms = $form_state['scald']['atoms']; + } + + // Set one atom's form options. This can be called multiple times in case + // a multifile field is used. + foreach ($atoms as $key => $atom) { + + $form["atom$key"]['#tree'] = TRUE; + + if ($atom->provider !== 'scald_video') { + break; + } + + $width = ''; + $height = ''; + if (isset($atom->sid)) { + if (isset($atom->data['video_width'])) { + $width = $atom->data['video_width']; + } + if (isset($atom->data['video_height'])) { + $height = $atom->data['video_height']; + } + } + else { + // Retrieve informations of Video by ffmpeg + // http://ffmpeg-php.sourceforge.net/doc/api/ffmpeg_movie.php + if (class_exists('ffmpeg_movie')) { + $ffmpeg_video = new ffmpeg_movie(drupal_realpath($atom->file_source), FALSE); + $ffmpeg_width = (int) $ffmpeg_video->getFrameWidth(); + if ($ffmpeg_width > 0) { + $width = check_plain($ffmpeg_width); + } + $ffmpeg_height = (int) $ffmpeg_video->getFrameHeight(); + if ($ffmpeg_height > 0) { + $height = check_plain($ffmpeg_height); + } + /* Does not work : page reset, but no error... (php and ffmpeg 5.4 from Linux Mint) + $title = $ffmpeg_video->getTitle(); + if ($title != '') { + $form['title']['#default_value'] = check_plain($title); + }*/ + } + } + $form["atom$key"]['width'] = array( + '#type' => 'textfield', + '#title' => t('Width'), + '#size' => 10, + '#element_validate' => array('element_validate_integer_positive'), + '#required' => TRUE, + '#default_value' => $width, + ); + $form["atom$key"]['height'] = array( + '#type' => 'textfield', + '#title' => t('Height'), + '#size' => 10, + '#element_validate' => array('element_validate_integer_positive'), + '#required' => TRUE, + '#default_value' => $height, + ); + + // Multi sources support: (https://drupal.org/node/2074349): + $form["atom$key"]['uploaded_video_sources'] = array('#tree' => TRUE); + $uploaded_videos_form = &$form["atom$key"]['uploaded_video_sources']; + $uploaded_videos_form['description']['#markup'] = ''; + $uploaded_videos_form['description']['#markup'] .= 'Alternative sources will be used as additional source tags within the video.
    '; + + if (isset($atom->data['alternative_video_sources']) && count($atom->data['alternative_video_sources'])) { + + $uploaded_videos_form['description']['#markup'] .= 'Uncheck to remove additional source file from the atom.'; + + foreach ($atom->data['alternative_video_sources'] as $source_key => $video_file) { + $uploaded_videos_form[$source_key] = array( + '#type' => 'checkbox', + '#title' => l($video_file->filename, file_create_url($video_file->uri)), + '#default_value' => 1, + ); + } + } + + scald_video_get_video_file_form($form["atom$key"]['alternative_video_sources']); + } + + $form['#submit'][] = 'scald_video_form_scald_atom_add_form_options_submit'; +} + +/** + * Atom's form save and edit submit callback. + */ +function scald_video_form_scald_atom_add_form_options_submit($form, &$form_state) { + + // We check for multiple atoms on the form: + if (isset($form_state['scald']['atom'])) { + $atoms = array($form_state['scald']['atom']); + } + else { + $atoms = $form_state['scald']['atoms']; + } + + foreach ($atoms as $key => $atom) { + + if ($atom->provider !== 'scald_video') { + break; + } + + $atom->data['video_width'] = $form_state['values']["atom$key"]['width']; + $atom->data['video_height'] = $form_state['values']["atom$key"]['height']; + + // Updating uploaded alternative sources: + if (isset($atom->data['alternative_video_sources']) && count($atom->data['alternative_video_sources'])) { + foreach ($atom->data['alternative_video_sources'] as $source_key => $source) { + // Removing unchecked sources: + if (!$form_state['values']["atom$key"]['uploaded_video_sources'][$source_key]) { + unset($atom->data['alternative_video_sources'][$source_key]); + } + } + } + if (isset($form["atom$key"]['alternative_video_sources'])) { + + $atom_form = $form["atom$key"]['alternative_video_sources']; + $atom_form_state = $form_state['values']["atom$key"]['alternative_video_sources']; + + // Check for new alternative sources from plupload: + if (is_array($atom_form_state)) { + foreach ($atom_form_state as $source_key => $video_source) { + $file = scald_video_get_video_file($atom_form_state[$source_key], $atom_form['#upload_location']); + $atom->data['alternative_video_sources'][] = $file; + } + } + else { + $file = scald_video_get_video_file($atom_form_state, $atom_form['#upload_location']); + if ($file !== FALSE) { + $atom->data['alternative_video_sources'][] = $file; + } + } + } + + scald_atom_save($atom); + } +} + +/** + * Returns a video file form element compatible with plupload. + * This function avoid repetitions over the multiple places + * a file upload field is needed in scald_video. + * + * @param $form_element + * The form element we want to set to video file field. + * + */ +function scald_video_get_video_file_form(&$form_element) { + + if (module_exists('plupload')) { + $form_element = array( + '#type' => 'plupload', + '#plupload_settings' => array( + 'runtimes' => 'html5', 'chunk_size' => '1mb', + ), + ); + } + else { + $defaults = scald_atom_defaults('video'); + $form_element['#type'] = $defaults->upload_type; + } + $form_element['#upload_validators'] = array('file_validate_extensions' => array('webm mp4 ogv')); + $form_element['#upload_location'] = variable_get('scald_video_upload_location', 'public://atoms/video/'); + ; + +} + +/** + * Saves a video file from a form's file value. + */ +function scald_video_get_video_file($file_form_value, $location = NULL) { + if (is_null($location)) { + $location = variable_get('scald_video_upload_location', 'public://atoms/video/'); + } + if (is_array($file_form_value) && module_exists('plupload')) { + module_load_include('inc', 'scald', 'includes/scald.plupload'); + $file = scald_plupload_save_file($file_form_value['tmppath'], $location . $file_form_value['name']); + } + else { + $file = file_load($file_form_value); + } + return $file; +} + +/** + * Implements hook_wysiwyg_editor_settings_alter(). + * + * This is a patch for using CKEditor 4.x with the WYSIWYG module. + * Without this patch, all works fine except the video preview in the WYSIWYG editor. + * This patch allow

    ' . t('The display of the core atom could be configured at the contexts page.', array('@url' => url('admin/structure/scald/' . $form['#bundle'] . '/contexts'))) . '

    ', + ); +} + +/** + * Implements hook_permission(). + * + * Actions are assigned to Drupal User Roles there. + */ +function scald_permission() { + $permissions = array( + 'administer scald' => array( + 'title' => t('Administer Scald'), + 'description' => t('Access Atom fields configuration and permissions'), + 'restrict access' => TRUE, + ), + 'administer scald atoms' => array( + 'title' => t('Administer Scald Atoms'), + 'restrict access' => TRUE, + ), + 'restrict atom access' => array( + 'title' => t('Restrict atom access'), + 'description' => t('User can restrict access to own atoms.'), + ), + 'bypass atom access restrictions' => array( + 'title' => t('Bypass atom access restrictions'), + 'description' => t('Bypass the access restriction implemented by atom publisher.'), + 'restrict access' => TRUE, + ), + 'create atom of any type' => array( + 'title' => t('Create atom of any type'), + ), + ); + + // "Create" action for each types. + foreach (scald_types() as $type) { + $permissions['create atom of ' . $type->type . ' type'] = array( + 'title' => t('Create atom of %type type', array('%type' => $type->type)), + ); + } + + // Other actions (Fetch, Edit, View, Delete, ....)) + foreach (scald_actions() as $key => $action) { + $permissions[$key . ' own atom'] = array( + 'title' => t('%action own atom', array('%action' => $action['title'])), + ); + + $permissions[$key . ' any atom'] = array( + 'title' => t('%action any atom marked as %actionable', array('%action' => $action['title'], '%actionable' => $action['adjective'])), + ); + } + + return $permissions; +} + +/** + * Implements hook_menu(). + */ +function scald_menu() { + $items = array(); + + $items['admin/content/atoms'] = array( + 'title' => 'Atoms', + 'weight' => -60, + 'page callback' => 'scald_admin_atoms', + 'access callback' => 'user_access', + 'access arguments' => array('administer scald atoms'), + 'file' => 'includes/scald.admin.inc', + 'type' => MENU_LOCAL_TASK, + ); + $items['admin/structure/scald'] = array( + 'title' => 'Scald', + 'description' => 'Manage Scald Atom Types, Contexts, and their associated settings.', + 'page callback' => 'scald_admin_dashboard', + 'access callback' => 'user_access', + 'access arguments' => array('administer scald'), + 'file' => 'includes/scald.admin.inc', + 'type' => MENU_NORMAL_ITEM, + ); + $items['admin/structure/scald/context/add'] = array( + 'title' => 'Add Scald context', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('scald_admin_context_form'), + 'access arguments' => array('administer scald'), + 'file' => 'includes/scald.admin.inc', + ); + $items['admin/structure/scald/context/edit/%'] = array( + 'title' => 'Edit Scald context', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('scald_admin_context_form', 5), + 'access arguments' => array('administer scald'), + 'file' => 'includes/scald.admin.inc', + ); + $items['admin/structure/scald/context/delete/%'] = array( + 'title' => 'Delete Scald context', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('scald_admin_context_confirm_delete_form', 5), + 'access arguments' => array('administer scald'), + 'file' => 'includes/scald.admin.inc', + ); + $items['admin/structure/scald/%scald_type'] = array( + 'title' => 'Type', + 'title callback' => 'scald_type_name', + 'title arguments' => array(3), + 'weight' => -80, + 'page callback' => 'drupal_get_form', + 'page arguments' => array('scald_admin_type_form', 3), + 'access callback' => 'user_access', + 'access arguments' => array('administer scald'), + 'file' => 'includes/scald.admin.inc', + 'type' => MENU_NORMAL_ITEM, + ); + $items['admin/structure/scald/%scald_type/edit'] = array( + 'title' => 'Edit', + 'type' => MENU_DEFAULT_LOCAL_TASK, + 'weight' => -20, + ); + $items['admin/structure/scald/%scald_type/contexts'] = array( + 'title' => 'Contexts', + 'weight' => 40, + 'page callback' => 'scald_admin_contexts', + 'page arguments' => array(3), + 'access callback' => 'user_access', + 'access arguments' => array('administer scald'), + 'file' => 'includes/scald.admin.inc', + 'type' => MENU_LOCAL_TASK, + ); + $items['admin/structure/scald/%scald_type/player/%/%'] = array( + 'title' => 'Player settings', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('scald_player_settings_form', 3, 5, 6), + 'access arguments' => array('administer scald'), + 'file' => 'includes/scald.admin.inc', + 'type' => MENU_NORMAL_ITEM, + ); + $items['admin/config/content/scald'] = array( + 'title' => 'Scald', + 'weight' => 20, + 'page callback' => 'drupal_get_form', + 'page arguments' => array('scald_settings_form'), + 'access callback' => 'user_access', + 'access arguments' => array('administer scald'), + 'file' => 'includes/scald.admin.inc', + ); + $items['atom/add'] = array( + 'title' => 'Create Atom', + 'page callback' => 'scald_atom_add', + 'access callback' => 'scald_atom_add_access', + 'file' => 'includes/scald.pages.inc', + ); + // The following two items do the same thing. We can consider them aliases. + $items['atom/add/%scald_type'] = array( + 'title' => 'Create Atom', + 'page callback' => 'scald_atom_add_page', + 'page arguments' => array(FALSE, 2), + 'access callback' => 'scald_atom_add_access', + 'access arguments' => array(2), + 'file' => 'includes/scald.pages.inc', + 'type' => MENU_CALLBACK, + ); + $items['atom/add/%scald_type/%ctools_js'] = array( + 'title' => 'Create Atom', + 'page callback' => 'scald_atom_add_page', + 'page arguments' => array(3, 2), + 'access callback' => 'scald_atom_add_access', + 'access arguments' => array(2), + 'theme callback' => 'ajax_base_page_theme', + 'file' => 'includes/scald.pages.inc', + 'type' => MENU_CALLBACK, + ); + + $items['atom/%scald_atom'] = array( + 'title callback' => 'entity_label', + 'title arguments' => array('scald_atom', 1), + 'page callback' => 'scald_atom_page_view', + 'page arguments' => array(1), + 'access callback' => 'scald_action_permitted', + 'access arguments' => array(1, 'view'), + 'file' => 'includes/scald.pages.inc', + ); + $items['atom/%scald_atom/view'] = array( + 'title' => 'View', + 'type' => MENU_DEFAULT_LOCAL_TASK, + 'weight' => -10, + ); + + // The following two items do the same thing. We can consider them aliases. + $items['atom/%scald_atom/edit'] = array( + 'title' => 'Edit', + 'page callback' => 'scald_atom_edit_page', + 'page arguments' => array(FALSE, 1), + 'access callback' => 'scald_action_permitted', + 'access arguments' => array(1, 'edit'), + 'file' => 'includes/scald.pages.inc', + 'weight' => 0, + 'type' => MENU_LOCAL_TASK, + 'context' => MENU_CONTEXT_PAGE | MENU_CONTEXT_INLINE, + ); + $items['atom/%scald_atom/edit/%ctools_js'] = array( + 'title' => 'Edit Atom', + 'page callback' => 'scald_atom_edit_page', + 'page arguments' => array(3, 1), + 'access callback' => 'scald_action_permitted', + 'access arguments' => array(1, 'edit'), + 'theme callback' => 'ajax_base_page_theme', + 'file' => 'includes/scald.pages.inc', + ); + + $items['atom/%scald_atom/delete'] = array( + 'title' => 'Delete', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('scald_atom_delete_confirm', 1), + 'access callback' => 'scald_action_permitted', + 'access arguments' => array(1, 'delete'), + 'file' => 'includes/scald.pages.inc', + 'weight' => 50, + 'type' => MENU_LOCAL_TASK, + ); + + $items['atom/%scald_atom/delete/%ctools_js'] = array( + 'title' => 'Delete Atom', + 'page callback' => 'scald_atom_delete_confirm_ajax', + 'page arguments' => array(3, 1), + 'access callback' => 'scald_action_permitted', + 'access arguments' => array(1, 'delete'), + 'theme callback' => 'ajax_base_page_theme', + 'file' => 'includes/scald.pages.inc', + ); + + // JSON callback allowing to fetch atoms, which provides is usefull + // for library implementations and RTE integrations. + $items['atom/fetch/%'] = array( + 'title' => 'Fetch atoms', + 'page callback' => 'scald_atom_fetch_atoms', + 'page arguments' => array(2), + 'access callback' => TRUE, + 'file' => 'includes/scald.pages.inc', + 'theme callback' => 'ajax_base_page_theme', + ); + + // Optional devel module integration. + if (module_exists('devel')) { + $items['atom/%scald_atom/devel'] = array( + 'title' => 'Devel', + 'page callback' => 'devel_load_object', + 'page arguments' => array('scald_atom', 1), + 'access arguments' => array('access devel information'), + 'type' => MENU_LOCAL_TASK, + 'file' => 'devel.pages.inc', + 'file path' => drupal_get_path('module', 'devel'), + 'weight' => 100, + ); + $items['atom/%scald_atom/devel/load'] = array( + 'title' => 'Load', + 'type' => MENU_DEFAULT_LOCAL_TASK, + ); + $items['atom/%scald_atom/devel/render'] = array( + 'title' => 'Render', + 'page callback' => 'devel_render_object', + 'page arguments' => array('scald_atom', 1), + 'access arguments' => array('access devel information'), + 'file' => 'devel.pages.inc', + 'file path' => drupal_get_path('module', 'devel'), + 'type' => MENU_LOCAL_TASK, + 'weight' => 100, + ); + } + + return $items; +} + +/** + * Implements hook_locale(). + */ +function scald_locale($op = 'groups') { + switch ($op) { + case 'groups': + return array('scald' => t('Scald')); + } +} + +/** + * Implements hook_i18n_string_info(). + */ +function scald_i18n_string_info() { + $groups['scald'] = array( + 'title' => t('Scald atom type'), + 'description' => t('The title and description of the different atom types supported by Scald.'), + 'format' => FALSE, + 'list' => TRUE, + ); + + return $groups; +} + +/** + * Implements hook_i18n_object_info(). + */ +function scald_i18n_object_info() { + $info['scald_type'] = array( + 'title' => t('Scald atom type'), + 'key' => 'type', + 'placeholders' => array( + '%scald_type' => 'type', + ), + 'edit path' => 'admin/structure/scald/%scald_type', + 'translate tab' => 'admin/structure/scald/%scald_type/translate', + 'list callback' => 'scald_types', + 'string translation' => array( + 'textgroup' => 'scald', + 'type' => 'type', + 'properties' => array( + 'title' => t('Title'), + 'description' => t('Description'), + ), + ), + ); + + return $info; +} + +/** + * Returns a translated property of a Scald atom type. + * + * @param object $type + * The Scald atom type for which to return a translated property. + * @param string $property + * Either 'title' or 'description'. Defaults to 'title'. + * @param string $langcode + * Optional language code for the translation. Defaults to the current + * language. + * + * @return string + * The translated property. + */ +function scald_type_property_translate($type, $property = 'title', $langcode = NULL) { + $name = array('scald', 'type', $type->type, $property); + $string = $type->$property; + $options = $langcode ? array('langcode' => $langcode) : array(); + + return scald_string_translate($name, $string, $options); +} + +/** + * Translates a dynamic string. + * + * This uses dynamic string translation from Internationalization module if + * available. Falls back to basic translation support if it is not. + * + * @param array|string $name + * Array or string concatenated with ':' that contains textgroup and string + * context. + * @param string $string + * The string to translate. + * @param array $options + * An associative array of options as used by i18n_string_translate(). + * + * @return string + * The translated string, or if i18n_string is not enabled, the input string. + * + * @see i18n_string_translate() + */ +function scald_string_translate($name, $string, $options = array()) { + if (module_exists('i18n_string')) { + // Do not sanitize, to have parity with the untranslated string which should + // also be sanitized by the calling function. + $options['sanitize'] = FALSE; + $string = i18n_string_translate($name, $string, $options); + } + else { + // If i18n_string is not enabled, fall back to t() to translate the string. + // @see https://www.drupal.org/node/2291875 + $options = array_intersect_key($options, array_flip(array('langcode'))); + $string = t($string, array(), $options); + } + return $string; +} + +/** + * Scald Atom entity uri callback. + */ +function scald_atom_uri($atom) { + return array( + 'path' => 'atom/' . $atom->sid, + ); +} + +/** + * Load callback for the %scald_type placeholder. + */ +function scald_type_load($type) { + $types = scald_types(); + if (isset($types[$type])) { + return $types[$type]; + } + return FALSE; +} + +/** + * Title callback for the atom type administration page. + */ +function scald_type_name($type) { + return scald_type_property_translate($type); +} + +/** + * Load callback for the %scald_context placeholder. + * + * Currently not yet used in the menu system, but only used to check in + * #machine_name elements. + */ +function scald_context_load($context) { + $contexts = scald_contexts(); + if (isset($contexts[$context])) { + return $contexts[$context]; + } + return FALSE; +} + +/** + * Saves a custom context. + * + * This function saves the context in a centralized variable. It is only used + * for contexts created through the Scald UI. + * + * @param array $context + * The context definition. + */ +function scald_context_save($context) { + $contexts = variable_get('scald_custom_contexts', array()); + $contexts[$context['name']] = $context; + variable_set('scald_custom_contexts', $contexts); +} + +/** + * Load a context config. + * + * @param string $name + * Context name. + */ +function scald_context_config_load($name) { + ctools_include('export'); + if (!$context_config = ctools_export_crud_load('scald_context_config', $name)) { + $context_config = ctools_export_new_object('scald_context_config'); + $context_config->context = $name; + } + + // Add default settings. + foreach (scald_types() as $type) { + if (!isset($context_config->transcoder[$type->type]['*'])) { + $context_config->transcoder[$type->type]['*'] = 'passthrough'; + } + if (!isset($context_config->player[$type->type]['*'])) { + $context_config->player[$type->type]['*'] = 'default'; + } + if(!isset($context_config->data)) { + $context_config->data = array(); + } + } + + return $context_config; +} + +/** + * Save a context config. + * + * @param object $config + * Context config. + */ +function scald_context_config_save(&$config) { + ctools_include('export'); + return ctools_export_crud_save('scald_context_config', $config); +} + +/** + * Delete a context config. + * + * @param object $config + * Context config. + */ +function scald_context_config_delete($config) { + ctools_include('export'); + ctools_export_crud_delete('scald_context_config', $config); + cache_clear_all('*', 'cache_scald', TRUE); +} + +/** + * Reverts context config. + * + * This function overrides the fallback function defined in + * features/includes/features.ctools.inc to clear Scald cache after + * a features-revert. + */ +function scald_context_config_features_revert($module) { + ctools_component_features_revert('scald_context_config', $module); + cache_clear_all('*', 'cache_scald', TRUE); +} + +/** + * Access callback for the atom add page. + */ +function scald_atom_add_access($type = NULL) { + // If we got a type, check that the user can create atom of this type. + if (!empty($type)) { + return scald_action_permitted(new ScaldAtom($type->type), 'create'); + } + + // Otherwise, iterate over our atom types to check if there's one that the + // current user is allowed to create. + $types = scald_types(); + foreach ($types as $type) { + if (scald_action_permitted(new ScaldAtom($type->type), 'create')) { + return TRUE; + } + } + return FALSE; +} + +/** + * Implements hook_theme(). + */ +function scald_theme($existing, $type, $theme, $path) { + return array( + 'scald_atom' => array( + 'render element' => 'elements', + 'template' => 'scald-atom', + ), + 'scald_render_error' => array( + 'arguments' => array('type' => NULL, 'message' => NULL, 'atom' => NULL), + ), + ); +} + +/** + * Implements hook_views_api(). + */ +function scald_views_api() { + return array( + 'api' => 2, + 'path' => drupal_get_path('module', 'scald') . '/includes/', + ); +} + +/** + * Implements hook_flush_caches(). + */ +function scald_flush_caches() { + return array('cache_scald'); +} + +/** + * Renders an error message. + */ +function theme_scald_render_error($vars) { + return '

    ' . $vars['message'] . '

    '; +} + +/** + * Processes variables for scald-atom.tpl.php + * + * The $variables array contains the following arguments: + * - $atom + * - $view_mode + * + * @see scald-atom.tpl.php + */ +function template_preprocess_scald_atom(&$variables) { + $variables['view_mode'] = $variables['elements']['#view_mode']; + $variables['atom'] = $variables['elements']['#entity']; + // In DS Token support, it requires entity to be accessed by entity name. + // Maybe we should get rid of one of these? + $variables['scald_atom'] = $variables['elements']['#entity']; + $atom = $variables['atom']; + + // Flatten the scald_atom object's member fields. + $variables = array_merge((array) $atom, $variables); + + // Helpful $content variable for templates. + $variables += array('content' => array()); + foreach (element_children($variables['elements']) as $key) { + $variables['content'][$key] = $variables['elements'][$key]; + } + + // Make the field variables available with the appropriate language. + field_attach_preprocess('scald_atom', $atom, $variables['content'], $variables); + + // Clean up name so there are no underscores. + $variables['theme_hook_suggestions'][] = 'scald_atom__' . $atom->type; +} + +/** + * Make sure to clear scald cache in case field instance + * configuration changes. + * + * @param $instance + * @param $prior_instance + */ +function scald_field_update_instance($instance, $prior_instance) { + if ($instance['entity_type'] == 'scald_atom') { + cache_clear_all('*', 'cache_scald', TRUE); + } +} + +/** + * Computes actions bitsting for a single role. + * + * @return int + * Computed action bistring. + */ +function scald_compute_role_actions($role) { + // Get permissions for the specified role. + $permissions = user_role_permissions($role); + + // Get all Scald actions. + $scald_actions = scald_actions(); + + // Extract the role id. + $rid = key($role); + + // Prepare empty bit strings. + $role_actions = array( + 'own' => 0, + 'any' => 0, + ); + + // Get enabled permissions for this role. + $role_permissions = $permissions[$rid]; + + // For each action, check the role permissions, and add the action bitmask + // to our counter if the permission is granted. + foreach ($scald_actions as $key => $action) { + if (!empty($role_permissions[$key . ' own atom'])) { + $role_actions['own'] |= $action['bitmask']; + } + if (!empty($role_permissions[$key . ' any atom'])) { + $role_actions['any'] |= $action['bitmask']; + } + } + + cache_set('scald_actions_bitstring_for_rid_' . $rid, $role_actions, 'cache_scald', CACHE_TEMPORARY); + return $role_actions; +} + +/** + * Implements hook_form_FORM_ID_alter(). + * + * Hook into the permissions submit form to compute our bitstrings + */ +function scald_form_user_admin_permissions_alter(&$form, &$form_state, $form_id) { + // Add our custom submit handler. + $form['#submit'][] = 'scald_permissions_submit'; +} + +/* + * Implements hook_form_FORM_ID_alter(). + * In case the title module is used the title field has to be populated from the title + * attribute when the user comes from the add step. + */ +function scald_form_scald_atom_add_form_options_alter(&$form, &$form_state, $form_id) { + if (module_exists('title')) { + $scald = $form_state['scald']; + if (isset($scald['type']) && title_field_replacement_enabled('scald_atom', $scald['type']->type, 'title')) { + // Setting default values for each created atom + $fr_info = title_field_replacement_info('scald_atom', 'title'); + foreach($form as $key => $data) { + if (strpos($key, 'atom') === 0) { + if (!empty($form[$key]['title']['#default_value'])) { + $langcode = $form['language']['#value']; + $form[$key][$fr_info['field']['field_name']][$langcode][0]['value']['#default_value'] = $form[$key]['title']['#default_value']; + } + } + } + } + } +} + +/** + * Handles the permissions form submission. + */ +function scald_permissions_submit($form, &$form_state) { + // Recompute actions bitstrings for all Drupal roles. + foreach (user_roles() as $rid => $role_name) { + scald_compute_role_actions(array($rid => $role_name)); + } +} + +/** + * Builds an array of action available for a given atom. + */ +function scald_atom_actions_available($atom, $account = NULL) { + $actions = array(); + foreach (scald_actions() as $action => $details) { + if (scald_action_permitted($atom, $action, $account)) { + $actions[$action] = $details; + } + } + return $actions; +} + +/** + * Builds an array of action links for a given atom. + */ +function scald_atom_user_build_actions_links($atom, $query = NULL) { + $actions = scald_actions(); + $supported_actions = array('view', 'edit', 'delete'); + + $links = array(); + foreach ($supported_actions as $action) { + if (scald_action_permitted($atom, $action)) { + $links[$action] = array( + 'title' => $actions[$action]['title'], + 'href' => 'atom/' . $atom->sid . ($action == 'view' ? '' : "/$action"), + ); + + // The 'edit' action supports CTools Modal. + if ($action == 'edit' || $action == 'delete') { + $links[$action]['attributes'] = array( + 'class' => array('ctools-use-modal', 'ctools-modal-custom-style'), + ); + $links[$action]['href'] .= '/nojs'; + } + + if ($query) { + $links[$action]['query'] = $query; + } + } + } + + drupal_alter('scald_atom_user_build_actions_links', $links, $atom); + + return $links; +} + +/** + * Prepares and returns the default thumbnail path for an atom type. + * + * @deprecated + * @see ScaldAtomController::getThumbnailPath() + */ +function scald_atom_thumbnail_path($type) { + return ScaldAtomController::getThumbnailPath($type); +} + +/** + * entity_view_mode_prepare() (introduced in Drupal version 7.33) fallback. + */ +if(!function_exists('entity_view_mode_prepare')) { + function entity_view_mode_prepare($entity_type, $entities, $view_mode, $langcode = NULL) { + if (!isset($langcode)) { + $langcode = $GLOBALS['language_content']->language; + } + + // To ensure hooks are never run after field_attach_prepare_view() only + // process items without the entity_view_prepared flag. + $entities_by_view_mode = array(); + foreach ($entities as $id => $entity) { + $entity_view_mode = $view_mode; + if (empty($entity->entity_view_prepared)) { + + // Allow modules to change the view mode. + $context = array( + 'entity_type' => $entity_type, + 'entity' => $entity, + 'langcode' => $langcode, + ); + drupal_alter('entity_view_mode', $entity_view_mode, $context); + } + + $entities_by_view_mode[$entity_view_mode][$id] = $entity; + } + + return $entities_by_view_mode; + } +} + +/** + * Implements hook_features_api(). + * + * If the user did choose to switch to Features exportable. + */ +if (variable_get('scald_switch_feature_export', FALSE)) { + function scald_features_api() { + return array( + 'scald_context_type' => array( + 'name' => 'Scald Context Configurations by type', + 'file' => drupal_get_path('module', 'scald') . '/scald.features.inc', + 'default_hook' => 'scald_default_context_types', + 'feature_source' => TRUE, + ), + ); + } +} diff --git a/docroot/sites/all/modules/contrib/scald/scald.tokens.inc b/docroot/sites/all/modules/contrib/scald/scald.tokens.inc new file mode 100644 index 00000000..3c06886d --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/scald.tokens.inc @@ -0,0 +1,80 @@ + t('Atoms'), + 'description' => t('Tokens related to atoms.'), + 'needs-data' => 'atom', + ); + + $atom['title'] = array( + 'name' => t('Title'), + 'description' => t('The title of the atom.'), + ); + $atom['author'] = array( + 'name' => t('Author'), + 'description' => t('The author, or publisher if there is no author, of the atom.'), + ); + + return array( + 'types' => array('atom' => $type), + 'tokens' => array('atom' => $atom), + ); +} + +/** + * Implements hook_tokens(). + */ +function scald_tokens($type, $tokens, array $data = array(), array $options = array()) { + $url_options = array('absolute' => TRUE); + if (isset($options['language'])) { + $url_options['language'] = $options['language']; + $language_code = $options['language']->language; + } + else { + $language_code = NULL; + } + $sanitize = !empty($options['sanitize']); + + $replacements = array(); + + if ($type == 'atom' && !empty($data['atom'])) { + $atom = $data['atom']; + // We will use $atom->rendered, so if is not rendered yet, we need to do it + // now. + if (empty($atom->rendered)) { + scald_render($atom, 'title'); + } + + foreach ($tokens as $name => $original) { + switch ($name) { + case 'title': + $replacements[$original] = $atom->rendered->title; + break; + + case 'author': + $authors = array(); + if (!empty($atom->rendered->authors)) { + foreach ($atom->rendered->authors as $author) { + $authors[] = $sanitize ? $author->name : $author->link; + } + } + else { + $authors[] = $atom->rendered->publisher[$sanitize ? 'name' : 'link']; + } + $replacements[$original] = implode(', ', $authors); + break; + } + } + } + + return $replacements; +} diff --git a/docroot/sites/all/modules/contrib/scald/tests/scald.test b/docroot/sites/all/modules/contrib/scald/tests/scald.test new file mode 100644 index 00000000..393bf42d --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/tests/scald.test @@ -0,0 +1,741 @@ +profile != 'standard') { + $this->drupalCreateContentType(array('type' => 'article', 'name' => 'Article')); + } + } + + /** + * Retrieves a sample file of the specified type. + */ + protected function getTestFile($type_name, $size = NULL) { + // Get a file to upload. + $files = $this->drupalGetTestFiles($type_name, $size); + $file = reset($files); + + // Add a filesize property to files as would be read by file_load(). + $file->filesize = filesize($file->uri); + + return $file; + } + + /** + * Create a new atom. + * + * Atom is created via the simple browser, thus the current user must have + * "create atom of image type" permission. + */ + protected function createAtom($type = 'image') { + module_enable(array('scald_image')); + + $image = $this->getTestFile('image'); + $edit = array( + 'files[file]' => drupal_realpath($image->uri), + ); + $this->drupalPost('atom/add/image', $edit, t('Continue')); + $this->assertFieldByName('atom0[title]', $image->filename); + + // Change atom title. + $title = 'Image ' . $this->randomName(20); + $edit = array( + 'atom0[title]' => $title, + 'atom0[scald_authors][und]' => $this->randomName(10), + ); + $this->drupalPost(NULL, $edit, t('Finish')); + + $query = new EntityFieldQuery(); + $query->entityCondition('entity_type', 'scald_atom'); + $query->propertyCondition('title', $title); + $result = $query->execute(); + $this->assertEqual(count($result['scald_atom']), 1, 'Image atom has been created.'); + + $atom = reset($result['scald_atom']); + return scald_fetch($atom->sid, TRUE); + } + + /** + * Delete an action bit. + */ + protected function deleteAtomAction($atom, $action_name) { + $actions = scald_actions(); + $atom->actions &= ~$actions[$action_name]['bitmask']; + scald_atom_save($atom); + $atom = scald_fetch($atom->sid, TRUE); + } + + /** + * Add an action bit. + */ + protected function addAtomAction($atom, $action_name) { + $actions = scald_actions(); + $atom->actions |= $actions[$action_name]['bitmask']; + scald_atom_save($atom); + $atom = scald_fetch($atom->sid, TRUE); + } + + /** + * Enable private file system and use it. + */ + public function enablePrivateFileSystem() { + module_enable(array('scald_image')); + $web_user = $this->drupalcreateuser(array( + 'administer site configuration', + 'administer scald', + )); + $this->drupallogin($web_user); + + $this->drupalPost('admin/config/media/file-system', array('file_private_path' => 'sites/default/files/private'), t('Save configuration')); + $this->drupalPost('admin/structure/scald/image/fields/scald_thumbnail', array('field[settings][uri_scheme]' => 'private'), t('Save settings')); + $this->assertRaw(t('Saved %label configuration.', array('%label' => 'Image')), 'Use private file for Scald Image.'); + } + + /** + * Make a HTML markup parseable. + */ + public function makeParseable($markup, $atom, $context) { + return '' . $markup . ''; + } +} + +/** + * Test the Scald base functionality. + */ +class ScaldBaseTestCase extends ScaldWebTestCase { + + /** + * {@inheritdoc} + */ + public static function getInfo() { + return array( + 'name' => 'Scald base', + 'description' => 'Test the Scald base functionality.', + 'group' => 'Scald', + ); + } + + /** + * Test Scald type defaults. + */ + public function testScaldBaseAtomType() { + module_enable(array('scald_audio')); + $default = scald_atom_defaults('audio'); + $this->assertEqual($default->thumbnail_source, 'public://atoms/audio.png', 'Default thumbnail for audios set correctly.'); + $this->assertTrue(file_exists($default->thumbnail_source), 'Default thumbnail for audios exists.'); + } + + /** + * Test Scald admin. + */ + function testScaldAdmin() { + $web_user = $this->drupalCreateUser(array( + )); + $this->drupalLogin($web_user); + $this->drupalGet('admin/structure/scald'); + $this->assertResponse(403, 'Normal user cannot administer Scald'); + $this->drupalLogout(); + + $admin_user = $this->drupalCreateUser(array( + 'administer scald', + )); + $this->drupalLogin($admin_user); + $this->drupalGet('admin/structure/scald'); + $this->assertResponse(200, 'Admin user can administer Scald'); + } + + /** + * Test Scald context. + */ + function testScaldContext() { + module_enable(array('scald_image')); + + // Prefix to avoid invalid names. + $title = 'context' . $this->randomName(10); + $name = strtolower($title); + $description = $this->randomName(20); + + $web_user = $this->drupalCreateUser(array( + 'administer scald', + 'view any atom', + 'create atom of any type', + )); + $this->drupalLogin($web_user); + + $this->drupalGet('admin/structure/scald'); + $this->clickLink('Add context'); + $edit = array( + 'title' => $title, + // There is no JavaScript in the SimpleBrowser, thus machine name must be + // filled manually. + 'name' => $name, + 'description' => $description, + ); + $this->drupalPost(NULL, $edit, t('Add context')); + + $this->assertText($title, 'Context created.'); + $this->assertText($description, 'Context description is correct.'); + $this->assertLinkByHref('admin/structure/scald/context/edit/' . $name, 0, 'New context can be edited.'); + + $this->clickLink('contexts'); + $edit = array( + 'full_trans' => 'style-large', + $name . '_trans' => 'style-thumbnail', + $name . '_playe' => 'image_figure', + ); + $this->drupalPost(NULL, $edit, t('Save')); + $this->assertField('full_trans', 'style-large', 'Context transcoder updated.'); + $this->assertField($name . '_playe', 'image_figure', 'Context player updated.'); + + // Player settings. + $this->clickLink('settings'); + $class = 'class-' . $this->randomName(5); + $caption = '//[atom:title]//[atom:author]//'; + $edit = array( + 'classes' => $class, + 'caption' => $caption, + ); + $this->drupalPost(NULL, $edit, t('Update')); + + // We are in another request, static cache is no longer relevant and needs + // to be cleared. + drupal_static_reset('_scald_get_info'); + + // Verify new context settings. There is no easy way to verify a context + // other than "full". + $atom = $this->createAtom(); + $content = scald_render($atom, $name); + $author = $atom->rendered->authors[0]->link; + $this->assertIdentical(1, preg_match('/class="[^"]*' . $class . '[^"]*"/', $content), 'Player class is correct.'); + $this->assertNotIdentical(FALSE, strpos($content, '
    //' . $atom->title . '//' . $author . '//
    '), 'Player caption is correct.'); + $this->drupalGet('atom/' . $atom->sid); + $this->assertRaw(check_plain(image_style_url('large', $atom->base_entity->uri)), 'Transcoder is correct.'); + } + + /** + * Test the uninstall process. + */ + public function testScaldUninstall() { + module_enable(array('scald_audio')); + $web_user = $this->drupalcreateuser(array( + 'administer modules', + )); + $this->drupallogin($web_user); + + // Disable, then uninstall all Scald modules. + $this->drupalPost('admin/modules', array('modules[Scald Providers][scald_audio][enable]' => FALSE), t('Save configuration')); + $this->drupalPost(NULL, array('modules[Scald][scald][enable]' => FALSE), t('Save configuration')); + $this->clickLink(t('Uninstall')); + $this->drupalPost(NULL, array('uninstall[scald_audio]' => 1), t('Uninstall')); + $this->drupalPost(NULL, array(), t('Uninstall')); + $this->assertText(t('The selected modules have been uninstalled.'), t('Scald Audio has been uninstalled.')); + } + + /** + * Test Scald caching system. + */ + public function testScaldCache() { + global $is_https, $base_url; + module_enable(array('scald_image')); + $image = $this->getTestFile('image'); + + $web_user = $this->drupalCreateUser(array( + 'view any atom', + 'fetch any atom', + 'create atom of any type', + )); + $this->drupalLogin($web_user); + + $atom = $this->createAtom(); + $output1 = scald_render($atom->sid, 'full'); + $is_https = !$is_https; + $base_url = str_replace('http://', 'https://', $base_url); + $output2 = scald_render($atom->sid, 'full'); + $is_https = !$is_https; + $base_url = str_replace('https://', 'http://', $base_url); + $this->assertNotIdentical($output1, $output2, 'Different renders in http and https versions.'); + + // Check if cached content is served. Change the atom directly from the + // database to avoid cached content being changed. + $title = 'Title has been changed'; + db_query('UPDATE {scald_atoms} SET title = :title WHERE sid = :sid', array(':title' => $title, ':sid' => $atom->sid)); + $atom = scald_fetch($atom->sid, TRUE); + $this->assertIdentical($title, $atom->title); + $output3 = scald_render($atom->sid, 'full'); + $this->assertIdentical($output1, $output3); + } + + /** + * Test Scald search. + */ + public function testScaldSearch() { + module_enable(array('scald_image')); + $image = $this->getTestFile('image'); + + $web_user = $this->drupalCreateUser(array( + 'view any atom', + 'fetch any atom', + 'create atom of any type', + )); + $this->drupalLogin($web_user); + + $atom1 = $this->createAtom(); + $atom2 = $this->createAtom(); + $this->assertEqual(1, count(scald_search(array('title' => $atom1->title))), 'Search atoms by title.'); + $this->assertIdentical(FALSE, scald_search(array('title' => substr($atom1->title, 2))), 'Search atoms by partial title.'); + $this->assertEqual(1, count(scald_search(array('title' => substr($atom1->title, 2)), TRUE)), 'Search atoms by partial title using fuzzy.'); + $this->assertEqual(2, count(scald_search(array('title' => array($atom1->title, $atom2->title)))), 'Search atoms by multiple titles.'); + $this->assertIdentical(FALSE, scald_search(array('title' => $this->randomName(10))), 'Search atoms by wrong title.'); + $this->assertEqual(1, count(scald_search(array('title' => $atom1->title, 'provider' => 'scald_image'))), 'Search atoms by title and provider.'); + $this->assertIdentical(FALSE, scald_search(array('title' => $atom1->title, 'provider' => 'scald_video')), 'Search atoms by title and wrong provider.'); + } +} + +/** + * Test the Scald atom entities. + */ +class ScaldAtomEntityTestCase extends ScaldWebTestCase { + + /** + * {@inheritdoc} + */ + public static function getInfo() { + return array( + 'name' => 'Scald atom entities', + 'description' => 'Test the Scald atom entities.', + 'group' => 'Scald', + ); + } + + /** + * {@inheritdoc} + */ + protected function setUp() { + parent::setUp('scald_image'); + $this->web_user = $this->drupalCreateUser(array( + 'create atom of image type', + 'view any atom', + 'fetch any atom', + 'edit own atom', + )); + $this->drupalLogin($this->web_user); + } + + /** + * Create four nodes and ensure they're loaded correctly. + */ + public function testScaldAtomCRUD() { + $atom = $this->createAtom(); + $this->assertTrue($atom->fetched, 'Image atom has been loaded.'); + } + + /** + * Permission tests. + */ + public function testScaldAtomPermissions() { + $atom = $this->createAtom(); + $atom2 = $this->createAtom(); + + // Switch user so that we can test directly with scald_render() with the + // correct permission. + global $user; + $user = user_load($this->web_user->uid); + + // Try to view the atom. + $this->drupalGet('atom/' . $atom->sid); + $this->assertTitle($atom->title . ' | Drupal', 'Image atom can be accessed.'); + $this->assertNoLink(t('Edit'), 'User cannot edit own atom.'); + + // Enable the edit action bit. + $this->addAtomAction($atom, 'edit'); + $this->drupalGet('atom/' . $atom->sid); + $this->assertLink(t('Edit'), 0, 'User can edit own atom.'); + + // Revoke the atom. + $this->drupalGet('atom/' . $atom2->sid); + $this->assertResponse(200, 'Atom is available.'); + $this->assertTitle($atom2->title . ' | Drupal', 'Image atom can be accessed.'); + $this->deleteAtomAction($atom2, 'view'); + $this->drupalGet('atom/' . $atom2->sid); + $this->assertResponse(403); + $this->deleteAtomAction($atom2, 'fetch'); + $this->drupalGet('atom/' . $atom2->sid); + $this->assertResponse(404); + + // Now for embedded atoms. Use the easy way. + $content = scald_render($atom2, 'full'); + $this->assertNotIdentical(FALSE, strpos($content, t('You do not have access to view this Atom.')), 'Atom can no longer be viewed.'); + + // User without permission. + $web_user = $this->drupalCreateUser(array('fetch any atom')); + $this->drupalLogin($web_user); + $this->drupalGet('atom/' . $atom->sid); + $this->assertResponse(403); + $this->drupalLogout(); + $this->drupalGet('atom/' . $atom->sid); + $this->assertResponse(404); + } + + /** + * Manual atom CRUD test. + */ + public function testScaldAtomManual() { + $image = $this->getTestFile('image'); + $title = $this->randomName(30); + $author = $this->randomName(10); + + $this->drupalLogout(); + $web_user = $this->drupalCreateUser(array( + 'view any atom', + 'fetch any atom', + 'edit own atom', + 'create atom of image type', + 'delete own atom', + )); + $this->drupalLogin($web_user); + + // Create an image atom. + $edit = array( + 'files[file]' => drupal_realpath($image->uri), + ); + $this->drupalPost('atom/add/image', $edit, t('Continue')); + if ($this->xpath('//input[@name="atom0[title]"]')) { + $edit = array( + 'atom0[title]' => $title, + ); + $this->drupalPost(NULL, $edit, t('Finish')); + } + + // Check that an image file has been created. + $files = file_load_multiple(array(), array('filename' => $image->filename)); + $file = reset($files); + $this->assertTrue($file, t('Image file found in database.')); + + $atom = scald_fetch(1, TRUE); + $this->addAtomAction($atom, 'edit'); + + // Check that an image atom has been created. + $this->drupalGet('atom/' . $atom->sid); + $this->assertTitle($title . ' | Drupal', 'Image atom can be accessed.'); + $this->assertLink(t('Edit'), 0, 'User can edit atom.'); + + // Add an author. + $langcode = LANGUAGE_NONE; + $edit = array( + 'atom0[scald_authors][' . $langcode . ']' => $author, + ); + $this->drupalPost('atom/1/edit', $edit, t('Finish')); + $this->assertText($author, 'Atom author has been updated.'); + + // Delete an atom. + $this->addAtomAction($atom, 'delete'); + $this->drupalGet('atom/' . $atom->sid); + $this->assertLink(t('Delete'), 0, 'User can delete own atom.'); + $this->clickLink(t('Delete')); + $this->drupalPost(NULL, array(), t('Delete')); + $this->drupalGet('atom/' . $atom->sid); + $this->assertResponse(404); + + // Check that the atom has really gone. + $query = new EntityFieldQuery(); + $query->entityCondition('entity_type', 'scald_atom'); + $query->propertyCondition('sid', $atom->sid); + $result = $query->execute(); + $this->assertIdentical(array(), $result, 'Atom has been deleted.'); + } + + /** + * Test Scald with private file system. + */ + public function testScaldPrivateFileSystem() { + $this->enablePrivateFileSystem(); + $image = $this->getTestFile('image'); + + $this->drupalLogout(); + $web_user = $this->drupalCreateUser(array( + 'view any atom', + 'fetch any atom', + 'create atom of image type', + )); + $this->drupalLogin($web_user); + + // Create an image atom. + $edit = array( + 'files[file]' => drupal_realpath($image->uri), + ); + $this->drupalPost('atom/add/image', $edit, t('Continue')); + $this->drupalPost(NULL, array(), t('Finish')); + + // Check that the image is accessible. + $this->assertIdentical(1, preg_match('/scald=1:full -->drupalGetContent(), $match), 'Found image in the atom full page.'); + $url = $match[1]; + $this->assertNotIdentical(FALSE, strpos($url, 'system/files/'), 'Private file system is used for this atom.'); + $this->drupalGet($url); + $this->assertResponse(200, 'Private image inside the atom is accessible.'); + } + + /** + * Test saving malformed and minimal atoms. + */ + public function testScaldSaveAtom() { + $atom = new stdClass(); + $this->assertFalse(scald_atom_save($atom), 'Cannot save an atom without type.'); + + $atom->type = 'blabla'; + $this->assertFalse(scald_atom_save($atom), 'Cannot save an atom with wrong type.'); + + $atom->type = 'image'; + $atom->provider = 'scald_image'; + $sid = scald_atom_save($atom); + $this->assertTrue(is_numeric($sid), 'Can save an atom with minimal information.'); + + scald_atom_save($atom); + $this->assertIdentical($sid, $atom->sid, 'Atom sid does not change when being updated.'); + $this->assertIdentical('image', $atom->type, 'Atom type does not change when being updated.'); + $this->assertIdentical('scald_image', $atom->provider, 'Atom provider does not change when being updated.'); + } +} + +/** + * Test the Scald DnD functionality. + */ +class ScaldDnDTestCase extends ScaldWebTestCase { + + /** + * {@inheritdoc} + */ + public static function getInfo() { + return array( + 'name' => 'Scald DnD', + 'description' => 'Test the Scald DnD functionality.', + 'group' => 'Scald', + ); + } + + /** + * {@inheritdoc} + */ + protected function setUp() { + parent::setUp(array('scald_image', 'scald_dnd_library')); + $this->web_user = $this->drupalCreateUser(array( + 'create atom of image type', + 'view any atom', + 'fetch any atom', + 'edit own atom', + )); + $this->drupalLogin($this->web_user); + } + + /** + * Test Scald DnD Library. + */ + function testScaldDndLibrary() { + // I don't know why scald_dnd_library contexts are not avaiable. Try to + // clear the cache manually. + scald_contexts(TRUE); + + $atom = $this->createAtom(); + $content = scald_render($atom, 'sdl_editor_representation'); + + // Check if the widely used context sdl_editor_representation is correct. + $langcode = field_language('scald_atom', $atom, 'scald_thumbnail'); + $atom->scald_thumbnail[$langcode][0]['alt'] = $atom->title; + $atom->scald_thumbnail[$langcode][0]['title'] = $atom->title; + $thumbnail = field_view_value('scald_atom', $atom, 'scald_thumbnail', $atom->scald_thumbnail[$langcode][0]); + $expected = $this->makeParseable('
    ' . drupal_render($thumbnail) . '
    ', $atom, 'sdl_editor_representation'); + $this->assertEqual($content, $expected, 'Context: sdl_editor_representation works correctly.'); + } +} +/** + * Test the Scald localization. + */ +class ScaldLocalizeTestCase extends ScaldWebTestCase { + + /** + * {@inheritdoc} + */ + protected $profile = 'testing'; + + /** + * The language code used while testing. + * + * @var string + */ + protected $langcode; + + /** + * {@inheritdoc} + */ + public static function getInfo() { + return array( + 'name' => 'Scald Localize', + 'description' => 'Test the Scald localization functionality.', + 'group' => 'Scald', + ); + } + + /** + * {@inheritdoc} + */ + protected function setUp() { + parent::setUp(array('scald_image', 'locale', 'i18n', 'i18n_string')); + $this->web_user = $this->drupalCreateUser(array( + 'administer scald', + 'create atom of image type', + 'view any atom', + 'fetch any atom', + 'delete any atom', + 'edit own atom', + 'administer languages', + 'access administration pages', + 'translate interface', + 'translate user-defined strings', + )); + $this->drupalLogin($this->web_user); + + // Add predefined language. + $this->langcode = 'fr'; + $this->drupalPost('admin/config/regional/language/add', array('langcode' => $this->langcode), t('Add language')); + + // Enable URL language detection and selection. + $edit = array('language[enabled][locale-url]' => '1'); + $this->drupalPost('admin/config/regional/language/configure', $edit, t('Save settings')); + } + + /** + * Adds a language and tests string translation. + */ + public function testStringTranslation() { + // Go to Scald page in another language to add action name into translation + // database. + $this->drupalGet('fr/admin/structure/scald/image'); + // Translate an action name. + $edit = array( + 'string' => 'Edit', + ); + $this->drupalPost('admin/config/regional/translate/translate', $edit, t('Filter')); + // The first result is an exact match, because we don't surf much. + $this->clickLink(t('edit')); + $edit = array( + "translations[$this->langcode]" => 'Modifier', + ); + $this->drupalPost(NULL, $edit, t('Save translations')); + + cache_clear_all('*', 'cache_scald', TRUE); + $this->drupalGet('fr/admin/structure/scald/image'); + $this->assertFieldByXPath('//label[@for="edit-type-image-actin-edit"]', 'Modifier ', 'Action name is correctly translated.'); + $this->drupalGet('admin/structure/scald/image'); + $this->assertFieldByXPath('//label[@for="edit-type-image-actin-edit"]', 'Edit ', 'Action name is correctly cached per language.'); + } + + /** + * Tests if it is possible to translate atom types. + */ + public function testAtomTypeTranslation() { + // Check that the "translate" action is shown for types in the overview. + $this->drupalGet('admin/structure/scald'); + $elements = $this->xpath('(//table//td)[6]/a[text() = :text]', array(':text' => t('translate'))); + $this->assertTrue($elements, 'The "translate" action is shown in the types table.'); + + $this->drupalGet('admin/structure/scald/image/translate'); + + // Translate the 'Image' type on the translate tab form. Unfortunately this + // word is spelled identically in French, so we opt for "L'image". + $edit = array( + 'strings[scald:type:image:title]' => 'L\'image', + 'strings[scald:type:image:description]' => 'Une représentation visuelle', + ); + $this->drupalPost('admin/structure/scald/image/translate/fr', $edit, t('Save translation')); + + // Check that the type is translated on the overview. + $this->drupalGet('fr/admin/structure/scald'); + $this->assertText(check_plain('L\'image'), 'The type is translated on the overview.'); + + // Check that the type is translated on the Add Atom page. + $this->drupalGet('fr/atom/add'); + $this->assertText(check_plain('L\'image'), 'The type is translated on the Add Atom page.'); + + // Check that the type is translated on the Add Image page. + $this->drupalGet('fr/atom/add/image'); + $this->assertText(check_plain('L\'image'), 'The type is translated on the Add Image page.'); + + // Check that the type is translated in the message that appears when + // creating an atom. + $atom = $this->createAtom('image', $this->langcode); + $message = t('Atom %title, of type %type has been @op.', array('%title' => $atom->title, '%type' => 'L\'image', '@op' => t('created'))); + $this->assertRaw($message, 'The type is translated in the notification that appears when creating an atom.'); + + // Check that the type is translated in the message that appears when + // deleting an atom. + $this->addAtomAction($atom, 'delete'); + $this->drupalPost('fr/atom/' . $atom->sid . '/delete', array(), t('Delete')); + $message = t('@type %title has been deleted.', array('@type' => 'L\'image', '%title' => $atom->title)); + $this->assertRaw($message, 'The type is translated in the notification that appears when deleting an atom.'); + } + + /** + * Tests if the Scald text group is successfully registered. + */ + public function testScaldTextGroup() { + $this->assertTrue(i18n_string_group_info('scald'), 'Scald text group successfully registered.'); + } + + /** + * Overrides ScaldWebTestCase::createAtom(). + * + * Adds a parameter to choose the language of the add form. + * + * @param string $type + * The atom type. Defaults to 'image'. + * @param string $langcode + * Optional language of the add form. + */ + protected function createAtom($type = 'image', $langcode = '') { + module_enable(array('scald_image')); + + $image = $this->getTestFile('image'); + $edit = array( + 'files[file]' => drupal_realpath($image->uri), + ); + + $prefix = !empty($langcode) ? $langcode . '/' : ''; + $this->drupalPost($prefix . 'atom/add/image', $edit, t('Continue')); + $this->assertFieldByName('atom0[title]', $image->filename); + + // Change atom title. + $title = 'Image ' . $this->randomName(20); + $edit = array( + 'atom0[title]' => $title, + 'atom0[scald_authors][und]' => $this->randomName(10), + ); + $this->drupalPost(NULL, $edit, t('Finish')); + + $query = new EntityFieldQuery(); + $query->entityCondition('entity_type', 'scald_atom'); + $query->propertyCondition('title', $title); + $result = $query->execute(); + $this->assertEqual(count($result['scald_atom']), 1, 'Image atom has been created.'); + + $atom = reset($result['scald_atom']); + return scald_fetch($atom->sid, TRUE); + } + +} diff --git a/docroot/sites/all/modules/contrib/scald/tests/scald_test/scald_test.info b/docroot/sites/all/modules/contrib/scald/tests/scald_test/scald_test.info new file mode 100644 index 00000000..222cf0e2 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/tests/scald_test/scald_test.info @@ -0,0 +1,16 @@ +name = Scald Test +description = Hooks and dependencies for testing Scald +package = Scald +core = 7.x +hidden = TRUE + +dependencies[] = i18n +dependencies[] = i18n_string + + +; Information added by Drupal.org packaging script on 2016-04-15 +version = "7.x-1.8" +core = "7.x" +project = "scald" +datestamp = "1460730556" + diff --git a/docroot/sites/all/modules/contrib/scald/tests/scald_test/scald_test.module b/docroot/sites/all/modules/contrib/scald/tests/scald_test/scald_test.module new file mode 100644 index 00000000..a4abe2da --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald/tests/scald_test/scald_test.module @@ -0,0 +1,2 @@ + + Copyright (C) + + 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 2 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, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/docroot/sites/all/modules/contrib/scald_flickr/README.txt b/docroot/sites/all/modules/contrib/scald_flickr/README.txt new file mode 100644 index 00000000..ff4e4181 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald_flickr/README.txt @@ -0,0 +1,48 @@ + +-- SUMMARY -- + +* This module provides Flickr image import inside Scald. + It creates a scald provider allowing users to add atoms of type flickr image. + +* This project includes all the features needed to create atoms directly + from Flickr, search, reuse them, and simply embed them into your drupal + nodes with drag and drop magic. + +* The module extends scald UI to do the following : + - Import flickr image by photo id, user_id or username, keyword + - Search on flickr in scald drag and drop library + +* See http://drupal.org/node/1895554 for a list of Scald providers + as separate projects for other great providers. + +-- REQUIREMENTS -- + +* Scald module + +* This project use the Flickr API, So you need to create an API key : + http://www.flickr.com/services/apps/create/apply/. + + +-- INSTALLATION -- + +* To test it quickly with drush : drush en -y scald_flickr scald_dnd_library mee + + +-- CONFIGURATION -- + +* Administration » Configuration » Media » Scald Flickr Settings : + + - Configure your Flickr API key + +* Configure user permissions in Administration » People » Permissions : + + - Administer flickr settings + + - Import flickr images + + +-- CONTACT -- + +Current maintainers : +* Pierre Cotiniere (pierre_cotiniere) - http://drupal.org/user/101869 +* Didier Boff (B2F) - http://drupal.org/user/1767874 diff --git a/docroot/sites/all/modules/contrib/scald_flickr/scald_flickr.admin.inc b/docroot/sites/all/modules/contrib/scald_flickr/scald_flickr.admin.inc new file mode 100644 index 00000000..04816396 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald_flickr/scald_flickr.admin.inc @@ -0,0 +1,45 @@ + 'fieldset', + '#title' => t('Flickr API'), + '#collapsible' => TRUE, + '#collapsed' => FALSE, + ); + $form['scald_flickr_api']['scald_flickr_api_key'] = array( + '#type' => 'textfield', + '#title' => t('Flickr API Key'), + '#required' => TRUE, + '#default_value' => $scald_flickr_api_key, + ); + if (empty($scald_flickr_api_key)) { + $form['scald_flickr_api']['scald_flickr_api_key']['#description'] = t('API Key from Flickr. !link', array( + '!link' => l(t('Get one!'), 'http://www.flickr.com/services/apps/by/me')) + ); + } + else { + $form['scald_flickr_api']['scald_flickr_api_key']['#description'] = t('API Key from Flickr.'); + } + + $form['scald_flickr_api']['scald_flickr_api_secret'] = array( + '#type' => 'textfield', + '#title' => t('Flickr API Shared Secret'), + '#required' => TRUE, + '#default_value' => variable_get('scald_flickr_api_secret', ''), + '#description' => t("API key's secret from Flickr."), + ); + + return system_settings_form($form); +} diff --git a/docroot/sites/all/modules/contrib/scald_flickr/scald_flickr.info b/docroot/sites/all/modules/contrib/scald_flickr/scald_flickr.info new file mode 100644 index 00000000..b70644ef --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald_flickr/scald_flickr.info @@ -0,0 +1,13 @@ +name = Scald: Flickr +core = 7.x +php = 5.x +package = Scald Providers +description = Provider: Provides Image atoms imported from flickr +dependencies[] = scald + +; Information added by Drupal.org packaging script on 2014-09-09 +version = "7.x-1.2" +core = "7.x" +project = "scald_flickr" +datestamp = "1410272817" + diff --git a/docroot/sites/all/modules/contrib/scald_flickr/scald_flickr.install b/docroot/sites/all/modules/contrib/scald_flickr/scald_flickr.install new file mode 100644 index 00000000..2fa8fda1 --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald_flickr/scald_flickr.install @@ -0,0 +1,22 @@ + 'Images hosted on Flickr', + ); +} + +/** + * Implements hook_scald_add_form(). + */ +function scald_flickr_scald_add_form(&$form, &$form_state) { + + if (isset($_GET['flickr-id'])) { + $identifier = $_GET['flickr-id']; + } + else { + $identifier = ''; + } + + $form['identifier'] = array( + '#type' => 'textfield', + '#title' => t('Flickr image identifier or URL'), + '#element_validate' => array('scald_flickr_validate_id'), + '#default_value' => $identifier, + '#maxlength' => 1200, + ); + if (!$identifier) { + $attributes = array(); + if (!empty($form_state['ajax'])) { + $attributes['target'] = '_blank'; + $attributes['class'][] = 'overlay-exclude'; + } + $form['search'] = array( + '#type' => 'item', + '#markup' => l(t('Search on Flickr'), 'atoms/flickr/search', array('attributes' => $attributes)), + ); + } +} + +/** + * Implements hook_scald_add_atom_count(). + */ +function scald_flickr_scald_add_atom_count(&$form, &$form_state) { + // the multiple "upload" process has to be initiated in scald_flickr_validate_id(); + $identifier = $form_state['values']['identifier']; + $identifiers = explode(',', $identifier); + return max(count($identifiers), 1); +} + +/** + * Implements hook_scald_add_form_fill(). + * @description + * Called after the id validation (scald_flickr_validate_id()). + */ +function scald_flickr_scald_add_form_fill(&$atoms, $form, $form_state) { +//$atom = is_array($atoms) ? reset($atoms) : $atoms; + foreach($atoms as $delta => $atom) { + scald_flickr_update_atom($atom, $form_state['scald_flickr']['image_infos'][$delta]); + } +} + +/** + * Implements hook_scald_fetch(). + */ +function scald_flickr_scald_fetch($atom, $type) { + $image_uri = $atom->scald_thumbnail[LANGUAGE_NONE][0]['uri']; + if (file_exists($image_uri)) { + $atom->file_source = $atom->thumbnail_source = $image_uri; + } +} + +/** + * Implements hook_theme(). + */ +function scald_flickr_theme() { + return array( + 'scald_flickr_search_results_table' => array( + 'render element' => 'form', + 'file' => 'scald_flickr.pages.inc', + ), + ); +} + +/** + * Implements hook_perm(). + */ +function scald_flickr_permission() { + return array( + 'administer flickr settings' => array( + 'title' => t('Administer flickr settings'), + ), + 'import flickr images' => array( + 'title' => t('Import flickr images'), + ), + ); +} + +/** + * Implements hook_menu(). + */ +function scald_flickr_menu() { + $items['admin/config/media/scald_flickr'] = array( + 'title' => 'Scald Flickr Settings', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('scald_flickr_settings_form'), + 'access arguments' => array('administer flickr settings'), + 'description' => 'Configure API keys for Flickr API', + 'file' => 'scald_flickr.admin.inc', + ); + + $items['atoms/flickr/search'] = array( + 'title' => 'Flickr search', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('scald_flickr_search_form', 2, 3), + 'access arguments' => array('import flickr images'), + 'description' => 'Search for new images to import into this site', + 'file' => 'scald_flickr.pages.inc', + 'type' => MENU_SUGGESTED_ITEM, + ); + + $items['atoms/flickr/search/terms'] = array( + 'title' => 'Flickr search by term', + 'file' => 'scald_flickr.pages.inc', + 'type' => MENU_DEFAULT_LOCAL_TASK, + ); + + $items['atoms/flickr/search/user'] = array( + 'title' => 'Flickr search by user', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('scald_flickr_search_user_form', 2, 4), + 'access arguments' => array('import flickr images'), + 'description' => 'Search for new images to import into this site', + 'file' => 'scald_flickr.pages.inc', + 'type' => MENU_LOCAL_TASK, + ); + + $items['atoms/flickr/search/userset'] = array( + 'title' => 'Import a Flickr user set', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('scald_flickr_search_userset_form', 2, 4), + 'access arguments' => array('import flickr images'), + 'description' => 'Import a full set for a defined user', + 'file' => 'scald_flickr.pages.inc', + 'type' => MENU_LOCAL_TASK, + ); + + $items['atoms/flickr/import'] = array( + 'title' => 'Flickr image import', + 'page callback' => 'scald_flickr_import', + 'page arguments' => array(), + 'access arguments' => array('import flickr images'), + 'description' => 'Import a flickr image', + 'type' => MENU_CALLBACK, + ); + + return $items; +} + +/** + * Analyze a Flickr feed (JSON). + * + * @description + * Reformating the informations about its + * items in an easy to manipulate objects containing the informations we're + * interested in. + * + * @param string $type + * Flickr feed type. 'image', 'search', 'search_user' + * + * @param string $id + * The identifier, related to the type mentionned above. If you're requestion + * a user feed, then, its the user id... + * + * @return array + * An array containing Flickr photos objects later used to + * update the scald flickr atom. + * + * @see scald_flickr_update_atom() + */ +function scald_flickr_feed($type, $id) { + + $scald_flickr_api_key = variable_get('scald_flickr_api_key', ''); + $scald_flickr_api_secret = variable_get('scald_flickr_api_secret', ''); + + $feed_methods_info = array( + 'image' => array( + 'method' => 'flickr.photos.getInfo', + 'id' => 'photo_id', + ), + 'search' => array( + 'method' => 'flickr.photos.search', + 'id' => 'text', + ), + 'search_user' => array( + 'method' => 'flickr.people.getPublicPhotos', + 'id' => 'user_id', + ), + 'search_user_id' => array( + 'method' => 'flickr.people.findByUsername', + 'id' => 'username', + ), + 'import_userset' => array( + 'method' => 'flickr.photosets.getPhotos', + 'id' => 'photoset_id', + ), + ); + // If pager, get current page. + $page = pager_find_page(); + + $url = SCALD_FLICKR_API_REST; + $url .= '/?method=' . $feed_methods_info[$type]['method']; + $url .= '&api_key=' . $scald_flickr_api_key; + $url .= '&' . $feed_methods_info[$type]['id'] . '=' . urlencode($id); + $url .= '&format=json&nojsoncallback=1&extras=original_format'; + $url .= '&page=' . ($page + 1); + + if ($scald_flickr_api_key != '') { + + $response = drupal_http_request($url); + if ($response->code != 404 && !empty($response->data)) { + + $items = array(); + $data = json_decode($response->data); + + // data is presented differently in sets than in others search responses. + $photos = FALSE; + if (isset($data->photos)) { + $photos = $data->photos; + } + else if (isset($data->photoset)) { + $photos = $data->photoset; + } + + if (isset($feed_methods_info[$type]) && $photos != FALSE) { + + scald_flickr_import_page_count( + $photos->pages, + $photos->page, + $photos->perpage, + $photos->total + ); + + foreach ($photos->photo as $key => $photo) { + $photo->thumbnail = array( + 'src' => scald_flickr_parse_url($photo, 'm', 'photo_source'), + ); + $items[] = $photo; + } + + } + elseif ($type == 'search_user_id' && isset($data->user)) { + $items['nsid'] = $data->user->nsid; + } + elseif ($type == 'image' && isset($data->photo)) { + $items['photo'] = $data->photo; + } + + } + else { + drupal_set_message(t('Flickr API key must be set ' . l('Here', 'admin/config/media/scald_flickr') . '.'), 'error'); + } + } + else { + drupal_set_message(t('Flickr API key must be set ' . l('Here', 'admin/config/media/scald_flickr') . '.'), 'error'); + return; + } + + return $items; + +} + +/** + * Set static variables for flickr pager. + * + * @return array + * An array containing : page count, active page, number of images per page, + * total image count. + */ +function scald_flickr_import_page_count($page_count = NULL, $active_page = NULL, $per_page = NULL, $total = NULL) { + $flickr_import_pager = &drupal_static(__FUNCTION__); + + if (isset($page_count)) { + $flickr_import_pager['page_count'] = $page_count; + } + elseif (!isset($flickr_import_pager['page_count'])) { + $flickr_import_pager['page_count'] = 1; + } + + if (isset($active_page)) { + $flickr_import_pager['active_page'] = $active_page; + } + elseif (!isset($flickr_import_pager['active_page'])) { + $flickr_import_pager['active_page'] = 1; + } + + if (isset($per_page)) { + $flickr_import_pager['per_page'] = $per_page; + } + elseif (!isset($flickr_import_pager['per_page'])) { + $flickr_import_pager['per_page'] = 100; + } + + if (isset($total)) { + $flickr_import_pager['total'] = $total; + } + elseif (!isset($flickr_import_pager['total'])) { + $flickr_import_pager['total'] = 0; + } + + return $flickr_import_pager; +} + +/** + * Get information on a specific image. + * + * @param int $id + * The Flickr image id. + * + * @return object + * An object containing the image informations. For information on + * the object format, see @scald_flickr_feed. + */ +function scald_flickr_image($id) { + $items = scald_flickr_feed('image', $id); + return $items['photo']; +} + +/** + * Checks if a image has already been imported, based on its image id. + * + * @param int $id + * The image identifier + * + * @return bool + * FALSE if the image was never imported, else the scald identifier + */ +function scald_flickr_already_imported($id) { + $query = array('provider' => 'scald_flickr', 'base_id' => $id); + return scald_search($query, FALSE, TRUE); +} + +/** + * Form element validation handler for Flickr identifier. + */ +function scald_flickr_validate_id($element, &$form_state) { + $id = $form_state['values']['identifier']; + $ids = explode(',', $id); + foreach($ids as $identifier) + { + // Get the flickr photo identifier. + $id = scald_flickr_parse_id('photo', $identifier, TRUE); + if (!$id) { + form_error($element, t('Invalid Flickr image identifier.')); + return; + } + if (scald_flickr_already_imported($id)) { + form_error($element, t('Flickr image already imported.')); + break; + } + else { + $image_infos = scald_flickr_image($id); + if (!count($image_infos)) { + form_error($element, t('The Flickr image does not exists or is private.')); + break; + } + else { + // Store the image informations temporarily before + // updating the atom in scald_flick_add_form_fill. + $form_state['scald_flickr']['image_infos'][] = $image_infos; + } + } + } + +} + +/** + * Parse a Flickr ID and check validity. + * + * @param string $type + * Type of flickr content. + * - photo: https://www.flickr.com/photos/{user-id}/{photo-id} + * - user: id pattern like [0-9]+@N[0-9]{2} or a username string. + * + * @param string $string + * The identifier. + * + * @return string + * A flickr id for scald_flickr internal use. + */ +function scald_flickr_parse_id($type, $string) { + + $id = NULL; + $string = trim($string); + + switch ($type) { + + case 'photo': + // If the string is a full flickr url, + // it must begin with the constant SCALD_FLICKR_PHOTOS. + if (preg_match('#^(https://)?' . SCALD_FLICKR_PHOTOS . '#', $string)) { + + $string = str_replace('https://', '', $string); + + // Flickr url tokens. + $tokens = explode('/', str_replace(SCALD_FLICKR_PHOTOS, '', $string)); + + // If token[1] is numeric, can be a {photo-id}. + if ($type == 'photo' && preg_match('/^[0-9]+$/', $tokens[1])) { + $id = $tokens[1]; + } + + } + // If the parsed string is numeric, can be a {photo-id}. + elseif (preg_match('/^[0-9]+$/', $string)) { + $id = $string; + } + // This may be a shortened url (http://bit.ly, etc...). + elseif (preg_match('#^http://#', $string)) { + $response = drupal_http_request($string); + if ($response->code == 200 && isset($response->redirect_code) && ($response->redirect_code == 301 || $response->redirect_code == 302)) { + return scald_flickr_parse_id($type, $response->redirect_url); + } + } + + break; + + case 'user': + // User id validation. + if (preg_match('/^[0-9]+@N[0-9]{2}/', $string)) { + $id = $string; + } + // User id validation (recursion on user name). + else { + $feed_data = scald_flickr_feed('search_user_id', $string); + if (isset($feed_data['nsid'])) { + return scald_flickr_parse_id('user', $feed_data['nsid']); + } + } + + break; + + case 'userset': + if (preg_match('/^([0-9]+@N[0-9]{2}\/)?([0-9]+)$/', $string, $matches)) { + if (isset($matches[2])) { + $id = $matches[2]; + } + } + + break; + + } + + return $id; +} + +/** + * Import proxy page, fill the identifier. + */ +function scald_flickr_import() { + // The edit page is nothing else other than the add page, at the Add step. We + // prepare data for this step then send back to the add page. + $types = scald_types(); + $storage = array( + 'type' => $types['image'], + 'source' => 'scald_flickr', + ); + ctools_include('object-cache'); + ctools_object_cache_set('scald_atom', 'add', $storage); + + module_load_include('inc', 'scald', 'includes/scald.pages'); + return scald_atom_add_page(FALSE, $types['image'], 'add'); +} + +/** + * Get the flickr url from an object returned by the flickr feed. + * + * @param object $photo + * A Flickr image object. + * + * @param string $photo_size + * s small square 75x75 + * q large square 150x150 + * t thumbnail, 100 on longest side + * m small, 240 on longest side + * n small, 320 on longest side + * - medium, 500 on longest side + * z medium 640, 640 on longest side + * c medium 800, 800 on longest side† + * b large, 1024 on longest side* + * o original image, either a jpg, gif or png, depending on source format + * + * @param string $url_type + * Left for futur use. + * + * @see https://www.flickr.com/services/api/misc.urls.html + * + * @return string + * A flickr image url. + */ +function scald_flickr_parse_url($photo, $photo_size = 'm', $url_type = 'photo_source') { + $source = array('{farm-id}', '{server-id}', '{id}', '{secret}', '[mstzb]'); + $p = $photo; + $value = array($p->farm, $p->server, $p->id, $p->secret, $photo_size); + $url = str_replace($source, $value, constant('SCALD_FLICKR_' . strtoupper($url_type))); + return $url; +} + +/** + * Filling a scald flickr atom. + * + * @param object &$atom + * A scald atom. + * + * @param object $infos + * An array containing the image informations. + * + * @return object + * A scald flickr atom. + */ +function scald_flickr_update_atom(&$atom, $infos) { + + $atom->base_id = $infos->id; + + // If title if empty, it means Untitled. + if (!$infos->title->_content) { + $infos->title->_content = t('Untitled'); + } + $atom->title = $infos->title; + + // Prefill the author. + $atom->scald_authors[LANGUAGE_NONE][0] = array( + 'tid' => 0, + 'taxonomy_term' => (object) (array('name' => $infos->owner->username)), + ); + + // Prefill tags. + foreach ($infos->tags->tag as $index => $tag) { + $atom->scald_tags[LANGUAGE_NONE][$index] = array( + // Beware, this is not a real tid, it's just an index. + 'tid' => $index, + 'taxonomy_term' => (object) (array('name' => $tag->_content)), + ); + } + + // Download a copy of the image. This makes it possible + // to do interesting manipulation with image styles presets. + $image = drupal_http_request(scald_flickr_parse_url($infos, 'b', 'photo_source')); + + $dir = 'public://flickr'; + if ($image->code == 200 && file_prepare_directory($dir, FILE_CREATE_DIRECTORY)) { + $dest = $dir . '/' . $infos->id . '.jpg'; + $file = file_save_data($image->data, $dest); + + // Set the file status to temporary. + $query = db_update('file_managed') + ->condition('fid', $file->fid) + ->fields(array('status' => 0)) + ->execute(); + + $atom->scald_thumbnail[LANGUAGE_NONE][0] = (array) $file; + } + +} diff --git a/docroot/sites/all/modules/contrib/scald_flickr/scald_flickr.pages.inc b/docroot/sites/all/modules/contrib/scald_flickr/scald_flickr.pages.inc new file mode 100644 index 00000000..58061eac --- /dev/null +++ b/docroot/sites/all/modules/contrib/scald_flickr/scald_flickr.pages.inc @@ -0,0 +1,333 @@ + $user_set))); + } + + // Define form elements. + $form = array(); + + $action = 'atoms/flickr/search/userset'; + $form['#action'] = url($action); + // Record the $action for later use in redirecting. + $form_state['action'] = $action; + + $form['search'] = array( + '#type' => 'fieldset', + '#tree' => TRUE, + '#attributes' => array('class' => array('container-inline')), + ); + $form['search']['search_userset'] = array( + '#type' => 'textfield', + '#title' => t('User set:'), + '#default_value' => $user_set, + '#description' => 'User set id like 72157625043452235', + ); + $form['search']['submit'] = array( + '#type' => 'submit', + '#value' => t('Search'), + '#submit' => array('scald_flickr_search_userset_form_search_submit'), + ); + + // If we have specified user, execute the search and display the results. + if (!empty($user_set)) { + + $form['results'] = array( + '#type' => 'fieldset', + '#title' => t('Search results'), + '#tree' => TRUE, + '#theme' => 'scald_flickr_search_results_table', + ); + + // Return a flickr id or NULL. + $user_set = scald_flickr_parse_id('userset', $user_set); + + $items = scald_flickr_feed('import_userset', $user_set); + _scald_flickr_set_images_form($items, $form); + + } + + return $form; +} + +/** + * Generates the flickr search user and search results form. + */ +function scald_flickr_search_user_form($form, &$form_state, $search_type = '', $user_id = '') { + + // Check if search form contains a value. + if (!empty($_REQUEST['search']['search_user'])) { + $user_id = trim($_REQUEST['search']['search_user']); + drupal_set_message(t("Your search user: @user", array('@user' => $user_id))); + } + + // Define form elements. + $form = array(); + + $action = 'atoms/flickr/search/user'; + $form['#action'] = url($action); + // Record the $action for later use in redirecting. + $form_state['action'] = $action; + + $form['search'] = array( + '#type' => 'fieldset', + '#tree' => TRUE, + '#attributes' => array('class' => array('container-inline')), + ); + $form['search']['search_user'] = array( + '#type' => 'textfield', + '#title' => t('User id or Username:'), + '#default_value' => $user_id, + '#description' => 'User id like 123456789@N01 or username ({username}\'s photostream from user page).', + ); + $form['search']['submit'] = array( + '#type' => 'submit', + '#value' => t('Search'), + '#submit' => array('scald_flickr_search_user_form_search_submit'), + ); + + // If we have specified user, execute the search and display the results. + if (!empty($user_id)) { + + $form['results'] = array( + '#type' => 'fieldset', + '#title' => t('Search results'), + '#tree' => TRUE, + '#theme' => 'scald_flickr_search_results_table', + ); + + // Return a flickr id or NULL. + $user_id = scald_flickr_parse_id('user', $user_id); + + $items = scald_flickr_feed('search_user', $user_id); + _scald_flickr_set_images_form($items, $form); + + } + + return $form; +} + +/** + * Generates the flickr search terms and search results form. + */ +function scald_flickr_search_form($form, &$form_state, $search_type = '', $terms = '') { + + // Check if serach form contains a value. + if (!empty($_REQUEST['search']['search_term'])) { + $terms = trim($_REQUEST['search']['search_term']); + drupal_set_message(t("Your search terms: @terms", array('@terms' => $terms))); + } + + // Define form elements. + $form = array(); + + $action = 'atoms/flickr/search'; + $form['#action'] = url($action); + // Record the $action for later use in redirecting. + $form_state['action'] = $action; + + $form['search'] = array( + '#type' => 'fieldset', + '#tree' => TRUE, + '#attributes' => array('class' => array('container-inline')), + ); + $form['search']['search_term'] = array( + '#type' => 'textfield', + '#title' => t('Terms'), + '#default_value' => $terms, + ); + $form['search']['submit'] = array( + '#type' => 'submit', + '#value' => t('Search'), + '#submit' => array('scald_flickr_search_form_search_submit'), + ); + + // If we have specified terms, execute the search and display the results. + if (!empty($terms)) { + $form['results'] = array( + '#type' => 'fieldset', + '#title' => t('Search results'), + '#tree' => TRUE, + '#theme' => 'scald_flickr_search_results_table', + ); + + $items = scald_flickr_feed('search', $terms); + _scald_flickr_set_images_form($items, $form); + + } + + return $form; +} + +/** + * Handles search terms form submission. + */ +function scald_flickr_search_form_search_submit($form, &$form_state) { + if ($form_state['clicked_button']['#value'] == t('Search')) { + $terms = $form_state['values']['search']['search_term']; + // Redirect with search keywords. + $form_state['redirect'] = $form_state['action'] . '/' . $terms; + } +} + +/** + * Handles search user form submission. + */ +function scald_flickr_search_user_form_search_submit($form, &$form_state) { + if ($form_state['clicked_button']['#value'] == t('Search')) { + $user_id = $form_state['values']['search']['search_user']; + // Redirect with search keywords. + $form_state['redirect'] = $form_state['action'] . '/' . $user_id; + } +} + +/** + * Handles search user form submission. + */ +function scald_flickr_search_userset_form_search_submit($form, &$form_state) { + if ($form_state['clicked_button']['#value'] == t('Search')) { + $user_set = $form_state['values']['search']['search_userset']; + // Redirect with search keywords. + $form_state['redirect'] = $form_state['action'] . '/' . $user_set; + } +} + +/** + * Handlers import form submission. + */ +function scald_flickr_search_form_submit($form, &$form_state) { + $results = array(); + foreach($form_state['input']['results']['images'] as $result => $value) + { + if (isset($value['import']) && $value['import'] == 1) { + $results[] = $result; + } + } + if (!count($results)) + { + drupal_set_message(t('No image selected for import')); + // Present again the list of results. + $form_state['rebuild'] = TRUE; + return; + } + + // End the multistep search workflow. + unset($form_state['storage']); + $form_state['rebuild'] = FALSE; + + $identifier = implode(',', $results); + + // Redirect user to the import form (special page). + $form_state['redirect'] = array( + 'atoms/flickr/import', + array( + 'query' => array( + 'flickr-id' => $identifier, + ), + ), + ); +} + +/** + * Themes the results table. + */ +function theme_scald_flickr_search_results_table($variables) { + $flickr_import_pager = scald_flickr_import_page_count(); + + // Generate pager. + pager_default_initialize($flickr_import_pager['total'], $flickr_import_pager['per_page']); + + $form = $variables['form']; + $header = array(t('Import'), t('Title'), t('Thumbnail'), t('ID')); + $rows = array(); + foreach (element_children($form['images']) as $key) { + $rows[] = array( + 'data' => array( + drupal_render($form['images'][$key]['import']), + drupal_render($form['images'][$key]['title']), + drupal_render($form['images'][$key]['thumbnail']), + drupal_render($form['images'][$key]['id']), + ), + ); + } + $images_output = theme('table', array( + 'header' => $header, + 'rows' => $rows, + 'attributes' => array('id' => 'scald-flickr-images'), + ) + ); + $images_output .= theme('pager'); + $output = drupal_render($form['select_all']) . $images_output . drupal_render($form['import']); + return $output; +} + +/** + * Fill the search result form with flickr images. + */ +function _scald_flickr_set_images_form($items, &$form) { + + drupal_add_js(drupal_get_path('module', 'scald_flickr') . '/scald_flickr.js'); + + if (count($items)) { + // Iterate on all results. + $form['results']['select_all'] = array( + 'import' => array( + '#title' => t('Select/deselect all results on this page'), + '#type' => 'checkbox', + ), + ); + foreach ($items as $image) { + // Prepare variables for theme_image() + $image_variables = array( + 'path' => str_replace('large', 'small', $image->thumbnail['src']), + 'alt' => $image->title, + 'title' => $image->title, + ); + // Prepare row data. + $form['results']['images'][$image->id] = array( + 'import' => array( + '#type' => 'checkbox', + ), + 'title' => array( + '#type' => 'item', + '#markup' => $image->title, + ), + 'thumbnail' => array( + '#type' => 'item', + '#markup' => theme('image', $image_variables), + ), + 'id' => array( + '#type' => 'item', + '#markup' => $image->id, + ), + ); + } + $form['results']['import'] = array( + '#type' => 'submit', + '#value' => t('Import'), + '#submit' => array('scald_flickr_search_form_submit'), + ); + } + else { + // No need to show a table. + unset($form['results']['#theme']); + + // No results message. + $form['results']['empty'] = array( + '#type' => 'item', + '#markup' => t('No results'), + ); + } + +} diff --git a/docroot/sites/all/modules/contrib/sharethis/LICENSE.txt b/docroot/sites/all/modules/contrib/sharethis/LICENSE.txt new file mode 100644 index 00000000..d159169d --- /dev/null +++ b/docroot/sites/all/modules/contrib/sharethis/LICENSE.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 2 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, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/docroot/sites/all/modules/contrib/sharethis/ShareThisForm.css b/docroot/sites/all/modules/contrib/sharethis/ShareThisForm.css new file mode 100644 index 00000000..a9270470 --- /dev/null +++ b/docroot/sites/all/modules/contrib/sharethis/ShareThisForm.css @@ -0,0 +1,248 @@ +.st_form { + color:#333333; + padding:10px; + margin:0px; + margin-bottom: 25px; + + border:1px solid darkgrey; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; + border-radius: 10px; + + background: #eaeeef; + background: -moz-linear-gradient(top, #eaeeef 0%, #fff 90%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#eaeeef), color-stop(90%,#fff)); + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#eaeeef', endColorstr='#fff',GradientType=0 ); +} + +.st_formButton, .st_formButtonSave { + margin:0px; + margin-bottom:10px; + margin-right:7px; + padding:10px; + display:inline-block; + color:#056D2D; + text-align:center; + font-size:1.2em; + width:120px; + cursor:pointer; + + border:1px solid #888888; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; + + background: #eeeeee; + background: -moz-linear-gradient(top, #eeeeee 0%, #cccccc 90%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#eeeeee), color-stop(90%,#cccccc)); + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#eeeeee', endColorstr='#cccccc',GradientType=0 ); +} + +.st_formButton:hover, .st_formButtonSave:hover { + background: #cccccc; + border:1px solid #aaaaaa; + + background: -moz-linear-gradient(top, #cccccc 0%, #eeeeee 90%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#cccccc), color-stop(90%,#eeeeee)); + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#cccccc', endColorstr='#eeeeee',GradientType=0 ); +} + +.st_formSubtitle { + font-size:.7em; + color:black; +} + +.st_widgetPic { + position:absolute; + left:206px; + display:block; + background:white; + padding:10px; + border:1px solid black; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; +} + +.st_widgetPicContain { + display:block; + height:285px; + overflow:hidden; + + border:1px solid #aaaaaa; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; +} + +.st_multi .st_widgetPicContain img{ + margin-top:-285px; +} + +.st_widgetPic img { + margin:0px; + padding:0px; + display:block; +} + +.st_widgetContain { + width:800px; + height:340px; + position:relative; +} + +.st_buttonContain { + height:340px; +} + +.st_select, .st_select:hover { + background: #aaaaaa; + border: 2px solid #118811; + margin-bottom:8px; +} + +.st_formPickerLeft, .st_formPickerMid, .st_formPickerRight { + display:block; + float:left; + height:294px; + width:327px; + border:1px solid black; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius:5px; + overflow:hidden; +} + +.st_formPickerMid { + width:100px; + border:none; + margin-top:40px; +} + +.st_clear { + clear:both; +} + +#st_formULLeft, #st_formULRight { + display:block; + overflow-y:scroll; + height:255px; + margin:0px; + list-style:none; + background-color: #eeeeee; +} + +.st_formULHeader { + display:block; + font-size:1.2em; + padding:10px; + background-color: #115511; + color:#115511; + + background: #eeeeee; + background: -moz-linear-gradient(top, #eeeeee 0%, #cccccc 90%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#eeeeee), color-stop(90%,#cccccc)); + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#eeeeee', endColorstr='#cccccc',GradientType=0 ); +} + +.st_pickerLi { + border-bottom:1px solid black; + padding:5px; + background: #ffffee; + cursor:pointer; +} + +.st_pickerLi:hover { + background:#aaffcc; +} + +.st_selectLi, .st_selectLi:hover { + background:#88dd11; +} + +.st_arrow { + display:block; + height:35px; + width:35px; + margin:30px; + margin-bottom:10px; + margin-top:10px; + overflow:hidden; + cursor:pointer; +} + +.st_up:hover { + margin-top:-152px; +} + +.st_left { + margin-top:-37px; +} + +.st_left:hover { + margin-top:-189px; +} + +.st_right { + margin-top:-75px; +} + +.st_right:hover { + margin-top:-227px; +} + +.st_down { + margin-top:-114px; +} + +.st_down:hover { + margin-top:-266px; +} + +.st_formMessage { + color:red; +} + +.st_buttonSelectImage { + left:206px; + display:block; + background:white; + padding:10px; + border:1px solid #aaaaaa; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; +} + +.st_buttonSelectSprite { + display:block; + padding:0px; + margin:0px; +} + +.st_spriteCover { + position:absolute; + left:219px; + top:100px; + display:block; + margin:10px; + overflow:hidden; + height:73px; + width:600px; + z-index:5; +} + +.st_buttonContain { + position:relative; + width:400px; +} + +.stbc_ { margin-top: -90px; } +.stbc_large { margin-top: -10px; } +.stbc_hcount { margin-top: -244px; } +.stbc_vcount { margin-top: -315px; } +.stbc_button { margin-top: -166px; } + +st_cns_container { + margin-top: -15px; +} diff --git a/docroot/sites/all/modules/contrib/sharethis/ShareThisForm.js b/docroot/sites/all/modules/contrib/sharethis/ShareThisForm.js new file mode 100644 index 00000000..da737dc3 --- /dev/null +++ b/docroot/sites/all/modules/contrib/sharethis/ShareThisForm.js @@ -0,0 +1,156 @@ +/** + * @file + * This file contains most of the code for the configuration page. + */ + +// Create the drupal ShareThis object for clean code and namespacing: +var drupal_st = { + // These are handlerd for updating the widget pic class. + multiW: function() { + jQuery(".st_widgetPic").addClass("st_multi"); + }, + classicW: function() { + jQuery(".st_widgetPic").removeClass("st_multi"); + }, + // These are the handlers for updating the button pic class (stbc = sharethisbuttonclass). + smallChicklet: function () { + drupal_st.removeButtonClasses(); + jQuery("#stb_sprite").addClass("stbc_"); + }, + largeChicklet: function () { + drupal_st.removeButtonClasses(); + jQuery("#stb_sprite").addClass("stbc_large"); + }, + hcount: function() { + drupal_st.removeButtonClasses(); + jQuery("#stb_sprite").addClass("stbc_hcount"); + }, + vcount: function() { + drupal_st.removeButtonClasses(); + jQuery("#stb_sprite").addClass("stbc_vcount"); + }, + button: function() { + drupal_st.removeButtonClasses(); + jQuery("#stb_sprite").addClass("stbc_button"); + }, + // This is a helper function for updating button pictures. + removeButtonClasses: function() { + var toRemove = jQuery("#stb_sprite"); + toRemove.removeClass("stbc_"); + toRemove.removeClass("stbc_large"); + toRemove.removeClass("stbc_hcount"); + toRemove.removeClass("stbc_vcount"); + toRemove.removeClass("stbc_button"); + }, + //Write helper functions for saving: + getWidget: function () { + return jQuery(".st_widgetPic").hasClass("st_multiW") ? '5x': '4x'; + }, + getButtons: function () { + var selectedButton = 'large'; + var buttonButtons = jQuery(".st_wIm"); + buttonButtons.each(function () { + if (jQuery(this).hasClass("st_select")) { + selectedButton = jQuery(this).attr("id").substring(3); + } + }); + console.log(selectedButton); + return selectedButton; + }, + setupServiceText: function () { + jQuery("#edit-sharethis-service-option").css({display:"none"}); + + if(jQuery('input[name=sharethis_callesi]').val() == 1){ + //alert("esi called"); + drupal_st.getGlobalCNSConfig(); + }else{ + //alert("settings found"); + } + }, + odjs: function(scriptSrc,callBack){ + this.head=document.getElementsByTagName('head')[0]; + this.scriptSrc=scriptSrc; + this.script=document.createElement('script'); + this.script.setAttribute('type', 'text/javascript'); + this.script.setAttribute('src', this.scriptSrc); + this.script.onload=callBack; + this.script.onreadystatechange=function(){ + if(this.readyState == "complete" || (scriptSrc.indexOf("checkOAuth.esi") !=-1 && this.readyState == "loaded")){ + callBack(); + } + }; + this.head.appendChild(this.script); + }, + getGlobalCNSConfig: function (){ + try { + drupal_st.odjs((("https:" == document.location.protocol) ? "https://wd-edge.sharethis.com/button/getDefault.esi?cb=drupal_st.cnsCallback" : "http://wd-edge.sharethis.com/button/getDefault.esi?cb=drupal_st.cnsCallback")); + } catch(err){ + drupal_st.cnsCallback(err); + } + }, + updateDoNotHash: function (){ + jQuery('input[name=sharethis_callesi]').val(0); + }, + // Function to add various events to our html form elements + addEvents: function() { + jQuery("#edit-sharethis-widget-option-st-multi").click(drupal_st.multiW); + jQuery("#edit-sharethis-widget-option-st-direct").click(drupal_st.classicW); + + jQuery("#edit-sharethis-button-option-stbc-").click(drupal_st.smallChicklet); + jQuery("#edit-sharethis-button-option-stbc-large").click(drupal_st.largeChicklet); + jQuery("#edit-sharethis-button-option-stbc-hcount").click(drupal_st.hcount); + jQuery("#edit-sharethis-button-option-stbc-vcount").click(drupal_st.vcount); + jQuery("#edit-sharethis-button-option-stbc-button").click(drupal_st.button); + + jQuery(".st_formButtonSave").click(drupal_st.updateOptions); + + jQuery('#st_cns_settings').find('input').live('click', drupal_st.updateDoNotHash); + }, + serviceCallback: function() { + var services = stlib_picker.getServices("myPicker"); + var outputString = ""; + for(i=0;i t('ShareThis Widget'), + 'description' => t('ShareThis Widget pane'), + 'category' => t('Widgets'), + 'defaults' => array( + 'path' => 'global', + 'path-external' => '', + ), +); + +function sharethis_sharethis_content_type_render($subtype, $conf, $panel_args) { + if ($conf['path'] == 'external') { + $url = $conf['path-external']; + } + else { + $path = ($conf['path'] == 'global') ? '' : $_GET['q']; + $url = url($path, array('absolute' => TRUE)); + } + $title = ($conf['path'] == 'current') ? drupal_get_title() : variable_get('site_name', ''); + + $block = new stdClass(); + $block->module = 'sharethis'; + $block->content = theme('sharethis', array('data_options' => sharethis_get_options_array(), 'm_path' => $url, 'm_title' => $title)); + + return $block; +} + +function sharethis_sharethis_content_type_edit_form($form, &$form_state) { + $conf = $form_state['conf']; + $description = t('Variable - Different per URL'); + $description .= '
    '; + $description .= t('External - Useful in iframes (Facebook Tabs, etc.)'); + $form['path'] = array( + '#type' => 'select', + '#title' => t('Path to share'), + '#options' => array( + 'global' => t('Global'), + 'current' => t('Variable'), + 'external' => t('External URL'), + ), + '#description' => $description, + '#default_value' => $conf['path'], + ); + + $form['path-external'] = array( + '#type' => 'textfield', + '#title' => t('External URL'), + '#default_value' => $conf['path-external'], + '#states' => array( + 'visible' => array( + ':input[name="path"]' => array('value' => 'external'), + ), + ), + ); + + return $form; +} + +function sharethis_sharethis_content_type_edit_form_validate($form, &$form_state) { + if (($form_state['values']['path'] == 'external') && (!valid_url($form_state['values']['path-external'], TRUE))) { + form_set_error('path-external', t('Invalid URL')); + } +} + +function sharethis_sharethis_content_type_edit_form_submit($form, &$form_state) { + foreach (array('path', 'path-external') as $key) { + $form_state['conf'][$key] = $form_state['values'][$key]; + } +} \ No newline at end of file diff --git a/docroot/sites/all/modules/contrib/sharethis/sharethis.info b/docroot/sites/all/modules/contrib/sharethis/sharethis.info new file mode 100644 index 00000000..66c7b495 --- /dev/null +++ b/docroot/sites/all/modules/contrib/sharethis/sharethis.info @@ -0,0 +1,15 @@ +name = ShareThis +description = Add the ShareThis widget to nodes on your site. +core = 7.x +package = Sharing +configure = admin/config/services/sharethis + +; Views handlers +files[] = views/sharethis_handler_field_link.inc + +; Information added by Drupal.org packaging script on 2015-07-03 +version = "7.x-2.12" +core = "7.x" +project = "sharethis" +datestamp = "1435896247" + diff --git a/docroot/sites/all/modules/contrib/sharethis/sharethis.install b/docroot/sites/all/modules/contrib/sharethis/sharethis.install new file mode 100644 index 00000000..c9520037 --- /dev/null +++ b/docroot/sites/all/modules/contrib/sharethis/sharethis.install @@ -0,0 +1,79 @@ +condition('name', db_like('sharethis_') . '%', 'LIKE') + ->execute(); + cache_clear_all('variables', 'cache'); +} + +/** + * Remove the custom ShareThis table. + */ +function sharethis_update_7001() { + // Move from the st_table to the variables table. + if (db_table_exists('st_table')) { + // Select all options in the ShareThis table. + $result = db_select('st_table', 's') + ->fields('s', array('st_option', 'st_value')) + ->execute(); + while ($record = $result->fetchAssoc()) { + // Variable name switches. publisherID stays the same. + switch ($record['st_option']) { + case 'buttons': + $record['st_option'] = 'button_option'; + break; + case 'nodeType': + $record['st_option'] = 'node_option'; + break; + case 'services': + $record['st_option'] = 'service_option'; + break; + case 'viewMode': + $record['st_option'] = 'teaser_option'; + break; + case 'widget': + $record['st_option'] = 'widget_option'; + break; + } + // Prefix the option with a "sharethis_" namespace. + variable_set('sharethis_' . $record['st_option'], $record['st_value']); + } + // Now that our settings are in the variables table, safely drop the table. + db_drop_table('st_table'); + + // Return a success message. + return t('Switched from the custom ShareThis table to the Variables table.'); + } +} diff --git a/docroot/sites/all/modules/contrib/sharethis/sharethis.module b/docroot/sites/all/modules/contrib/sharethis/sharethis.module new file mode 100644 index 00000000..b22d6535 --- /dev/null +++ b/docroot/sites/all/modules/contrib/sharethis/sharethis.module @@ -0,0 +1,738 @@ +' . t('Choose the widget, button family, and services for using ShareThis to share content online.', array('@sharethis' => 'http://www.sharethis.com')) . '

    '; + break; + case "admin/help#sharethis": + $return_value = "

    " . t("This plugin places the ShareThis widget on each node.") . '

    '; + $return_value .= "
    • " . t("The Block pulls the URL from the current page and current Drupal title, the node version pulls it from the node title and url.") . '
    • '; + $return_value .= "
    • " . t("The block can be placed anywhere on a page, the node is limited to where nodes normally go") . '
    • '; + $return_value .= "
    • " . t("The block module is more likely to be compatible with other plugins that use blocks rather than nodes. (Panels works nicely with the block)") . '
    '; + $return_value .= "

    " . t('For various configuration options please got to the settings page.', array('@sharethis' => url('admin/config/services/sharethis'))) . '

    '; + $return_value .= '

    ' . t('For more information, please visit support.sharethis.com.', array('@help' => 'http://support.sharethis.com/customer/portal/articles/446621-drupal-integration')) . '

    '; + return $return_value; + break; + } +} + +/** + * Converts given value to boolean. + * + * + * @param val + * Which value to convert to boolean + */ +function to_boolean($val) { + if (strtolower(trim($val)) === 'false') { + return false; + } else { + return (boolean)$val; + } +} + +/** + * Implements hook_permission(). + */ +function sharethis_permission() { + return array( + 'administer sharethis' => array( + 'title' => t('Administer ShareThis'), + 'description' => t('Change the settings for how ShareThis behaves on the site.'), + ), + ); +} + + /** + * This is the main configuration form for the admin page. + */ +function sharethis_configuration_form($form, &$form_state) { + // First, setup variables we will need. + // Get the path variables setup. + $my_path = drupal_get_path('module', 'sharethis'); + // Load the css and js for our module's configuration. + drupal_add_css($my_path . '/ShareThisForm.css'); + drupal_add_js('https://ws.sharethis.com/share5x/js/stcommon.js', 'external'); //This is ShareThis's common library - has a serviceList of all the objects that are currently supported. + drupal_add_js($my_path . '/ShareThisForm.js'); + drupal_add_js($my_path . '/stlib_picker.js'); + drupal_add_css($my_path . '/stlib_picker.css'); + $current_options_array = sharethis_get_options_array(); + global $base_url; + + // Create the variables related to widget choice. + $widget_type = $current_options_array['widget']; + $widget_markup = ""; + if ($widget_type == "st_multi") { + $widget_markup = "st_multi"; + } + // Create the variables related to button choice. + $button_choice = check_plain($current_options_array['buttons']); + // Create the variables related to services chosen. + $service_string = $current_options_array['services']; + $service_string_markup = ""; + foreach (explode(",", $service_string) as $name => $string) { + $key = explode(":", drupal_substr($string, 0, -1)); + $key = $key[1]; + $service_string_markup .= "\"" . $key . "\","; + } + $service_string_markup = drupal_substr($service_string_markup, 0, -1); + + // Create the variables for publisher keys. + $publisher = $current_options_array['publisherID']; + // Create the variables for teasers. + + $form = array(); + $form['options'] = array( + '#type' => 'fieldset', + '#title' => t('Display'), + ); + $form['options']['sharethis_button_option'] = array( + '#required' => TRUE, + '#type' => 'radios', + '#options' => array( + 'stbc_large' => t('Large Chicklets'), + 'stbc_' => t('Small Chicklets'), + 'stbc_button' => t('Classic Buttons'), + 'stbc_vcount' => t('Vertical Counters'), + 'stbc_hcount' => t('Horizontal Counters'), + 'stbc_custom' => t('Custom Buttons via CSS'), + ), + '#default_value' => $button_choice, + '#title' => t("Choose a button style:"), + '#prefix' => '
    ', + '#suffix' => '
    ' + ); + $form['options']['sharethis_service_option'] = array( + '#description' => t("Add a service by selecting it on the right and clicking the left arrow. Remove it by clicking the right arrow.
    Change the order of services under \"Selected Services\" by using the up and down arrows."), + '#required' => TRUE, + '#type' => 'textfield', + '#prefix' => '
    ', + '#suffix' => '
    ', + '#title' => t("Choose Your Services."), + '#default_value' => t($service_string), + '#maxlength' => 1024, + ); + $form['options']['sharethis_option_extras'] = array( + '#title' => t('Extra services'), + '#description' => t('Select additional services which will be available. These are not officially supported by ShareThis, but are available.'), + '#type' => 'checkboxes', + '#options' => array( + 'Google Plus One:plusone' => t('Google Plus One'), + 'Facebook Like:fblike' => t('Facebook Like'), + ), + '#default_value' => $current_options_array['option_extras'], + ); + + $form['options']['sharethis_callesi'] = array( + '#type' => 'hidden', + '#default_value' => $current_options_array['sharethis_callesi'], + ); + + $form['additional_settings'] = array( + '#type' => 'vertical_tabs', + ); + $form['context'] = array( + '#type' => 'fieldset', + '#title' => t('Context'), + '#group' => 'additional_settings', + '#description' => t('Configure where the ShareThis widget should appear.'), + ); + + $form['context']['sharethis_location'] = array( + '#title' => t('Location'), + '#type' => 'radios', + '#options' => array( + 'content' => t('Node content'), + 'block' => t('Block'), + 'links' => t('Links area'), + ), + '#default_value' => variable_get('sharethis_location', 'content'), + ); + + // Add an information section for each location type, each dependent on the + // currently selected location. + foreach (array('links', 'content', 'block') as $location_type) { + $form['context'][$location_type]['#type'] = 'container'; + $form['context'][$location_type]['#states']['visible'][':input[name="sharethis_location"]'] = array('value' => $location_type); + } + + // Add help text for the 'content' location. + $form['context']['content']['help'] = array( + '#markup' => t('When using the Content location, you must place the ShareThis links in the Manage Display section of each content type.', array('@url' => url('admin/structure/types'))), + '#weight' => 10, + '#prefix' => '', + '#suffix' => '', + ); + // Add help text for the 'block' location. + $form['context']['block']['#children'] = t('You must choose which region to display the ShareThis block in from the Blocks administration.', array('@blocksadmin' => url('admin/structure/block'))); + + // Add checkboxes for each view mode of each bundle. + $entity_info = entity_get_info('node'); + $modes = array(); + foreach ($entity_info['view modes'] as $mode => $mode_info) { + $modes[$mode] = $mode_info['label']; + } + // Get a list of content types and view modes + $view_modes_selected = $current_options_array['view_modes']; + foreach ($entity_info['bundles'] as $bundle => $bundle_info) { + $form['context']['links']['sharethis_' . $bundle . '_options'] = array( + '#title' => t('%label View Modes', array('%label' => $bundle_info['label'])), + '#description' => t('Select which view modes the ShareThis widget should appear on for %label nodes.', array('%label' => $bundle_info['label'])), + '#type' => 'checkboxes', + '#options' => $modes, + '#default_value' => $view_modes_selected[$bundle], + ); + } + + // Allow the user to choose which content types will have ShareThis added + // when using the 'Content' location. + $content_types = array(); + $enabled_content_types = $current_options_array['sharethis_node_types']; + foreach($entity_info['bundles'] as $bundle => $bundle_info) { + $content_types[$bundle] = t($bundle_info['label']); + } + $form['context']['content']['sharethis_node_types'] = array( + '#title' => t('Node Types'), + '#description' => t('Select which node types the ShareThis widget should appear on.'), + '#type' => 'checkboxes', + '#options' => $content_types, + '#default_value' => $enabled_content_types, + ); + $form['context']['sharethis_comments'] = array( + '#title' => t('Comments'), + '#type' => 'checkbox', + '#default_value' => variable_get('sharethis_comments', FALSE), + '#description' => t('Display ShareThis on comments.'), + '#access' => module_exists('comment'), + ); + $form['context']['sharethis_weight'] = array( + '#title' => t('Weight'), + '#description' => t('The weight of the widget determines the location on the page where it will appear.'), + '#required' => FALSE, + '#type' => 'select', + '#options' => drupal_map_assoc(array(-100, -50, -25, -10, 0, 10, 25, 50, 100)), + '#default_value' => variable_get('sharethis_weight', 10), + ); + $form['advanced'] = array( + '#type' => 'fieldset', + '#title' => t('Advanced'), + '#group' => 'additional_settings', + '#description' => t('The advanced settings can usually be ignored if you have no need for them.'), + ); + $form['advanced']['sharethis_publisherID'] = array( + '#title' => t("Insert a publisher key (optional)."), + '#description' => t("When you install the module, we create a random publisher key. You can register the key with ShareThis by contacting customer support. Otherwise, you can go to ShareThis and create an account.
    Your official publisher key can be found under 'My Account'.
    It allows you to get detailed analytics about sharing done on your site."), + '#type' => 'textfield', + '#default_value' => $publisher + ); + $form['advanced']['sharethis_late_load'] = array( + '#title' => t('Late Load'), + '#description' => t("You can change the order in which ShareThis widget loads on the user's browser. By default the ShareThis widget loader loads as soon as the browser encounters the JavaScript tag; typically in the tag of your page. ShareThis assets are generally loaded from a CDN closest to the user. However, if you wish to change the default setting so that the widget loads after your web-page has completed loading then you simply tick this option."), + '#type' => 'checkbox', + '#default_value' => variable_get('sharethis_late_load', FALSE), + ); + $form['advanced']['sharethis_twitter_suffix'] = array( + '#title' => t("Twitter Suffix"), + '#description' => t("Optionally append a Twitter handle, or text, so that you get pinged when someone shares an article. Example: via @YourNameHere"), + '#type' => 'textfield', + '#default_value' => variable_get('sharethis_twitter_suffix', ''), + ); + $form['advanced']['sharethis_twitter_handle'] = array( + '#title' => t('Twitter Handle'), + '#description' => t('Twitter handle to use when sharing.'), + '#type' => 'textfield', + '#default_value' => variable_get('sharethis_twitter_handle', ''), + ); + $form['advanced']['sharethis_twitter_recommends'] = array( + '#title' => t('Twitter recommends'), + '#description' => t('Specify a twitter handle to be recommended to the user.'), + '#type' => 'textfield', + '#default_value' => variable_get('sharethis_twitter_recommends', ''), + ); + $form['advanced']['sharethis_option_onhover'] = array( + '#type' => 'checkbox', + '#title' => t('Display ShareThis widget on hover'), + '#description' => t('If disabled, the ShareThis widget will be displayed on click instead of hover.'), + '#default_value' => variable_get('sharethis_option_onhover', TRUE), + ); + $form['advanced']['sharethis_option_neworzero'] = array( + '#type' => 'checkbox', + '#title' => t('Display count "0" instead of "New"'), + '#description' => t('Display a zero (0) instead of "New" in the count for content not yet shared.'), + '#default_value' => variable_get('sharethis_option_neworzero', FALSE), + ); + $form['advanced']['sharethis_option_shorten'] = array( + '#type' => 'checkbox', + '#title' => t('Display short URL'), + '#description' => t('Display either the full or the shortened URL.'), + '#default_value' => variable_get('sharethis_option_shorten', TRUE), + ); + $form['advanced']['sharethis_cns'] = array( + '#title' => t('CopyNShare (?)'), + '#type' => 'checkboxes', + '#prefix' => '
    ', + '#suffix' => '
    +

    CopyNShare is the new ShareThis widget feature that enables you to track the shares that occur when a user copies and pastes your website\'s URL or Content.
    + Site URL - ShareThis adds a special #hashtag at the end of your address bar URL to keep track of where your content is being shared on the web.
    + Site Content - It enables the pasting of "See more: YourURL#SThashtag" after user copies-and-pastes text. When a user copies text within your site, a "See more: yourURL.com#SThashtag" will appear after the pasted text.
    + Please refer the CopyNShare FAQ for more details.

    +
    ', + '#options' => array( + 'donotcopy' => t('Measure copy & shares of your site\'s Content'), + 'hashaddress' => t('Measure copy & shares of your site\'s URLs'), + ), + '#default_value' => $current_options_array['sharethis_cns'], + ); + + $form['#submit'][] = 'sharethis_configuration_form_submit'; + return system_settings_form($form); +} + +/** + * Form validation handler for sharethis_configuration_form(). + */ +function sharethis_configuration_form_validate($form, &$form_state) { + //Additional filters for the service option input + + // Sanitize the publisher ID option. Since it's a text field, remove anything that resembles code + $form_state['values']['sharethis_service_option'] = filter_xss($form_state['values']['sharethis_service_option'], array()); + + //Additional filters for the option extras input + $form_state['values']['sharethis_option_extras'] = (isset($form_state['values']['sharethis_option_extras'])) ? $form_state['values']['sharethis_option_extras'] : array(); + + // Sanitize the publisher ID option. Since it's a text field, remove anything that resembles code + $form_state['values']['sharethis_publisherID'] = filter_xss($form_state['values']['sharethis_publisherID'], array()); + + if($form_state['values']['sharethis_callesi'] == 1){ + unset($form_state['values']['sharethis_cns']); + } + unset($form_state['values']['sharethis_callesi']); + + // Ensure default value for twitter suffix + $form_state['values']['sharethis_twitter_suffix'] = (isset($form_state['values']['sharethis_twitter_suffix'])) ? $form_state['values']['sharethis_twitter_suffix'] : ''; + + // Ensure default value for twitter handle + $form_state['values']['sharethis_twitter_handle'] = (isset($form_state['values']['sharethis_twitter_handle'])) ? $form_state['values']['sharethis_twitter_handle'] : ''; + + // Ensure default value for twitter recommends + $form_state['values']['sharethis_twitter_recommends'] = (isset($form_state['values']['sharethis_twitter_recommends'])) ? $form_state['values']['sharethis_twitter_recommends'] : ''; +} + +/** + * Form submission handler for sharethis_configuration_form(). + */ +function sharethis_configuration_form_submit($form, &$form_state) { + // If the location is changing to/from 'content', clear the Field Info cache. + $current_location = variable_get('sharethis_location', 'content'); + $new_location = $form_state['values']['sharethis_location']; + if (($current_location == 'content' || $new_location == 'content') && $current_location != $new_location) { + field_info_cache_clear(); + } +} + + /** + * Implements hook_menu(). + * + * This is the ShareThis Config Menu. + */ +function sharethis_menu() { + $items['admin/config/services/sharethis'] = array( + 'title' => 'ShareThis', + 'description' => 'Choose the widget, button family, and services for using ShareThis to share content online.', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('sharethis_configuration_form'), + 'access arguments' => array('administer sharethis') + ); + return $items; +} + + /** + * Implements hook_node_view(). + * + * Inserts ShareThis widget code onto each node view. + * TODO: Want to add the option somewhere to select nodes. + * + * @param node + * The node that is being acted upon + * @param view_mode + * The type of view (teaser, full, etc) + * @param langcode + * Information about the language + */ +function sharethis_node_view($node, $view_mode, $langcode) { + // Don't display if the user is currently searching, or in the RSS feed. + switch ($view_mode) { + case 'search_result': + case 'search_index': + case 'rss': + return; + } + // First get all of the options for the sharethis widget from the database: + $data_options = sharethis_get_options_array(); + + // Get the full path to insert into the Share Buttons. + $mPath = url('node/' . $node->nid, array('absolute' => TRUE)); + $mTitle = $node->title; + + // Check where we want to display the ShareThis widget. + switch (variable_get('sharethis_location', 'content')) { + case 'content': + $enabled_types = $data_options['sharethis_node_types']; + if (isset($enabled_types[$node->type]) && $enabled_types[$node->type] === $node->type) { + $node->content['sharethis'] = array( + '#tag' => 'div', // Wrap it in a div. + '#type' => 'html_tag', + '#attributes' => array('class' => 'sharethis-buttons'), + '#value' => theme('sharethis', array('data_options' => $data_options, 'm_path' => $mPath, 'm_title' => $mTitle)), + '#weight' => intval(variable_get('sharethis_weight', 10)), + ); + } + break; + case 'links': + $enabled_view_modes = variable_get('sharethis_' . $node->type . '_options', array()); + if (isset($enabled_view_modes[$view_mode]) && $enabled_view_modes[$view_mode]) { + $links['sharethis'] = array( + 'html' => TRUE, + 'title' => theme('sharethis', array('data_options' => $data_options, 'm_path' => $mPath, 'm_title' => $mTitle)), + 'attributes' => array('class' => 'sharethis-buttons'), + ); + $node->content['links']['sharethis'] = array( + '#theme' => 'links', + '#links' => $links, + '#attributes' => array( + 'class' => array('links', 'inline'), + ), + '#tag' => 'div', // Wrap it in a div. + '#type' => 'html_tag', + '#weight' => intval(variable_get('sharethis_weight', 10)), + ); + } + break; + } +} + +/** + * Implements hook_field_extra_fields(). + */ +function sharethis_field_extra_fields() { + $extra = array(); + // Only add extra fields if the location is the node content. + if (variable_get('sharethis_location', 'content') == 'content') { + $entity_info = entity_get_info('node'); + foreach ($entity_info['bundles'] as $bundle => $bundle_info) { + $extra['node'][$bundle]['display'] = array( + 'sharethis' => array( + 'label' => t('ShareThis'), + 'description' => t('ShareThis links'), + 'weight' => intval(variable_get('sharethis_weight', 10)), + ), + ); + } + } + return $extra; +} + +/** + * Implements hook_theme(). + */ +function sharethis_theme($existing, $type, $theme, $path) { + $theme = array(); + $theme['sharethis'] = array( + 'variables' => array( + 'data_options' => NULL, + 'm_path' => NULL, + 'm_title' => NULL, + ), + ); + return $theme; +} + +/** +* get_stLight_options() function is creating options to be passed to stLight.options +* $data_options array is the settings selected by publisher in admin panel +*/ +function get_stLight_options($data_options) +{ + // Provide the publisher ID. + $paramsStLight = array( + 'publisher' => $data_options['publisherID'], + ); + $paramsStLight['version'] = ($data_options['widget'] == 'st_multi') ? "5x" : "4x"; + if($data_options['sharethis_callesi'] == 0){ + $paramsStLight["doNotCopy"] = !to_boolean($data_options['sharethis_cns']['donotcopy']); + $paramsStLight["hashAddressBar"] = to_boolean($data_options['sharethis_cns']['hashaddress']); + if(!($paramsStLight["hashAddressBar"]) && $paramsStLight["doNotCopy"]){ + $paramsStLight["doNotHash"] = true; + }else{ + $paramsStLight["doNotHash"] = false; + } + } + if (isset($data_options['onhover']) && $data_options['onhover'] == FALSE) { + $paramsStLight['onhover'] = FALSE; + } + if ($data_options['neworzero']) { + $paramsStLight['newOrZero'] = "zero"; + } + if (!$data_options['shorten']) { + $paramsStLight['shorten'] = 'false'; + } + $stlight = drupal_json_encode($paramsStLight); + + return $stlight; +} + +/** + * sharethisGetOptionArray is a helper function for DB access. + * + * Returns options that have been stored in the database. + * + * @TODO: Switch from this function to just straight variable_get() calls. + */ +function sharethis_get_options_array() { + $default_sharethis_nodetypes = array("article"=>"article", "page"=>"page"); + $view_modes = array(); + foreach (array_keys(node_type_get_types()) as $type) { + $view_modes[$type] = variable_get('sharethis_' . $type . '_options', $default_sharethis_nodetypes); + } + return array( + 'buttons' => variable_get('sharethis_button_option', 'stbc_button'), + 'publisherID' => variable_get('sharethis_publisherID', ''), + 'services' => variable_get('sharethis_service_option', '"Facebook:facebook","Tweet:twitter","LinkedIn:linkedin","Email:email","ShareThis:sharethis","Pinterest:pinterest"'), + 'option_extras' => variable_get('sharethis_option_extras', array("Google Plus One:plusone"=>"Google Plus One:plusone", "Facebook Like:fblike"=>"Facebook Like:fblike")), + 'widget' => variable_get('sharethis_widget_option', 'st_multi'), + 'onhover' => variable_get('sharethis_option_onhover', TRUE), + 'neworzero' => variable_get('sharethis_option_neworzero', FALSE), + 'twitter_suffix' => variable_get('sharethis_twitter_suffix', ''), + 'twitter_handle' => variable_get('sharethis_twitter_handle', ''), + 'twitter_recommends' => variable_get('sharethis_twitter_recommends', ''), + 'late_load' => variable_get('sharethis_late_load', FALSE), + 'view_modes' => $view_modes, + 'sharethis_cns' => variable_get('sharethis_cns',array('donotcopy'=>'0','hashaddress'=>'0')), + 'sharethis_callesi' => (NULL == variable_get('sharethis_cns'))?1:0, + 'sharethis_node_types' => variable_get('sharethis_node_types', $default_sharethis_nodetypes), + 'shorten' => variable_get('sharethis_option_shorten', TRUE), + ); +} + +/** + * Theme function for ShareThis code based on settings. + */ +function theme_sharethis($variables) { + $data_options = $variables['data_options']; + $m_path = $variables['m_path']; + $m_title = $variables['m_title']; + + // Inject the extra services. + foreach ($data_options['option_extras'] as $service) { + $data_options['services'] .= ',"' . $service . '"'; + } + + // The share buttons are simply spans of the form class='st_SERVICE_BUTTONTYPE' -- "st" stands for ShareThis. + $type = drupal_substr($data_options['buttons'], 4); + $type = $type == "_" ? "" : check_plain($type); + $service_array = explode(",", $data_options['services']); + $st_spans = ""; + foreach ($service_array as $service_full) { + // Strip the quotes from the element in the array (They are there for javascript) + $service = explode(":", $service_full); + + // Service names are expected to be parsed by Name:machine_name. If only one + // element in the array is given, it's an invalid service. + if (count($service) < 2) { + continue; + } + + // Find the service code name. + $serviceCodeName = drupal_substr($service[1], 0, -1); + + // Switch the title on a per-service basis if required. + $title = $m_title; + switch ($serviceCodeName) { + case 'twitter': + $title = empty($data_options['twitter_suffix']) ? $title : check_plain($title) . ' ' . check_plain($data_options['twitter_suffix']); + break; + } + + // Sanitize the service code for display. + $display = check_plain($serviceCodeName); + + // Put together the span attributes. + $attributes = array( + 'st_url' => $m_path, + 'st_title' => $title, + 'class' => 'st_' . $display . $type, + ); + if ($serviceCodeName == 'twitter') { + if (!empty($data_options['twitter_handle'])) { + $attributes['st_via'] = $data_options['twitter_handle']; + $attributes['st_username'] = $data_options['twitter_recommends']; + } + } + // Only show the display text if the type is set. + if (!empty($type)) { + $attributes['displayText'] = check_plain($display); + } + // Render the span tag. + $st_spans .= theme('html_tag', array( + 'element' => array( + '#tag' => 'span', + '#attributes' => $attributes, + '#value' => '', // It's an empty span tag. + ), + )); + } + + + // Output the embedded JavaScript. + sharethis_include_js(); + return '
    ' . $st_spans . '
    '; +} + +/** + * Include st js scripts. + */ +function sharethis_include_js() { + $has_run = &drupal_static(__FUNCTION__, FALSE); + if (!$has_run) { + // These are the ShareThis scripts: + $data_options = sharethis_get_options_array(); + $st_js_options = array(); + $st_js_options['switchTo5x'] = $data_options['widget'] == 'st_multi' ? TRUE : FALSE; + if ($data_options['late_load']) { + $st_js_options['__st_loadLate'] = TRUE; + } + $st_js = ""; + foreach ($st_js_options as $name => $value) { + $st_js .= 'var ' . $name . ' = ' . drupal_json_encode($value) . ';'; + } + drupal_add_js($st_js, 'inline'); + + if((isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on') || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) == 'https')) { + $external = "https://ws.sharethis.com/button/buttons.js"; + } else { + $external = "http://w.sharethis.com/button/buttons.js"; + } + + drupal_add_js($external, 'external'); + + $stlight = get_stLight_options($data_options); + $st_js = "if (stLight !== undefined) { stLight.options($stlight); }"; + drupal_add_js($st_js, 'inline'); + + $has_run = TRUE; + } + return $has_run; +} +/** + * Implements hook_block_info(). + */ +function sharethis_block_info() { + $blocks['sharethis_block'] = array( + 'info' => t('ShareThis'), + 'cache' => DRUPAL_CACHE_PER_PAGE, + ); + return $blocks; +} + +/** + * Implements of hook_block_view(). + */ +function sharethis_block_view($delta='') { + $block = array(); + switch ($delta) { + case 'sharethis_block': + $block['content'] = sharethis_block_contents(); + break; + } + return $block; +} + +/** + * custom html block + * @return string + */ +function sharethis_block_contents() { + if (variable_get('sharethis_location', 'content') == 'block') { + // First get all of the options for the sharethis widget from the database: + $data_options = sharethis_get_options_array(); + $path = isset($_GET['q']) ? $_GET['q'] : ''; + if ($path == variable_get('site_frontpage')) { + $path = ""; + } + $mPath = url($path, array('absolute' => TRUE)); + $mTitle = decode_entities(drupal_get_title()); + + return theme('sharethis', array('data_options' => $data_options, 'm_path' => $mPath, 'm_title' => $mTitle)); + } +} + +/** + * Implements hook_comment_view(). + */ +function sharethis_comment_view($comment, $view_mode, $langcode) { + if (variable_get('sharethis_comments', FALSE)) { + $data_options = sharethis_get_options_array(); + $path = isset($_GET['q']) ? $_GET['q'] : ''; + $mPath = url($_GET['q'], array( + 'absolute' => TRUE, + 'fragment' => 'comment-' . $comment->cid, + )); + $mTitle = decode_entities(drupal_get_title()); + $html = theme('sharethis', array('data_options' => $data_options, 'm_path' => $mPath, 'm_title' => $mTitle)); + $comment->content['sharethis'] = array( + '#type' => 'html_tag', + '#value' => $html, + '#tag' => 'div', + '#attributes' => array('class' => 'sharethis-comment'), + '#weight' => intval(variable_get('sharethis_weight', 10)), + ); + } +} + +/** + * Implements hook_contextual_links_view_alter(). + */ +function sharethis_contextual_links_view_alter(&$element, $items) { + // Add the configuration link for the ShareThis settings on the block itself. + if (isset($element['#element']['#block']->module) && $element['#element']['#block']->module == 'sharethis' && $element['#element']['#block']->delta == 'sharethis_block' && user_access('access administration pages')) { + $element['#links']['sharethis-configure'] = array( + 'title' => t('Configure ShareThis'), + 'href' => 'admin/config/services/sharethis', + ); + } +} + +/** + * Implements hook_views_api(). + */ +function sharethis_views_api() { + return array( + 'api' => 3, + 'path' => drupal_get_path('module', 'sharethis') . '/views', + ); +} + +/** + * Implements of hook_ctools_plugin_directory + */ +function sharethis_ctools_plugin_directory($module, $plugin) { + if ($module == 'panels' || $module == 'ctools') { + return 'plugins/' . $plugin; + } +} diff --git a/docroot/sites/all/modules/contrib/sharethis/stlib_picker.css b/docroot/sites/all/modules/contrib/sharethis/stlib_picker.css new file mode 100644 index 00000000..843eb436 --- /dev/null +++ b/docroot/sites/all/modules/contrib/sharethis/stlib_picker.css @@ -0,0 +1,120 @@ +.stp_pickerLeft, .stp_pickerArrow, .stp_pickerRight { + display:block; + float:left; + height:254px; + width:250px; + border:1px solid black; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius:4px; + overflow:hidden; +} + +.stp_pickerArrow { + width:92px; + border:none; + margin-top:40px; +} + + +.stp_header { + display:block; + font-size:1.25em; + border-bottom:1px solid black; + padding:8px; + background-color: #115511; + color:#115511; + + background: #eeeeee; + background: -moz-linear-gradient(top, #eeeeee 0%, #cccccc 90%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#eeeeee), color-stop(90%,#cccccc)); + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#eeeeee', endColorstr='#cccccc',GradientType=0 ); +} + +.stp_ulLeft, .stp_ulRight { + display:block; + overflow-y:scroll; + height:215px; + margin:0px !important; + padding:0px; + list-style:none; + background-color: #eeeeee; +} + +.stp_li { + border-bottom:1px solid #ccc; + padding:0px; + margin:0px; + padding-top:5px; + background: #ffffee; + vertical-align:center; +} + +.stp_li img { + display:inline- block; + margin:0px; + padding:0px; + margin-left:5px; +} + +.stp_liText { + display:inline-block; + vertical-align:top; + margin:0px; + padding:5px; + margin-left:10px; + font-size:1.2em; + font-family:sans-serif; + overflow:hidden; +} + +.stp_arrow { + display:block; + height:35px; + width:35px; + margin:30px; + margin-bottom:10px; + margin-top:10px; + overflow:hidden; +} + +.stp_li:hover { + background: #ddddcc; +} + +.stp_select, .stp_select:hover { + background:#ccccbb; +} + +.stp_up:hover { + margin-top:-152px; +} + +.stp_left { + margin-top:-37px; +} + +.stp_left:hover { + margin-top:-189px; +} + +.stp_right { + margin-top:-75px; +} + +.stp_right:hover { + margin-top:-227px; +} + +.stp_down { + margin-top:-114px; +} + +.stp_down:hover { + margin-top:-266px; +} + +.stp_clear { + clear:both; + width:500px; +} \ No newline at end of file diff --git a/docroot/sites/all/modules/contrib/sharethis/stlib_picker.js b/docroot/sites/all/modules/contrib/sharethis/stlib_picker.js new file mode 100644 index 00000000..ef6d4abb --- /dev/null +++ b/docroot/sites/all/modules/contrib/sharethis/stlib_picker.js @@ -0,0 +1,126 @@ +//This library requires JQuery +//It also requires stcommon.js in your header for an official list of services +//stlib_picker.defaultServices defines the services from stcommon that get loaded as the default services in the picker +//Styling can be found in stlib_picker.css and should be linked in the page. +//To get selected services as an array of strings: (ie ["twitter", "sharethis", "facebook"] ) +// Call: var answer = stlib_picker.pickerList[uniqueID]["getServices"](); + +var stlib_picker = {}, isSecure=("https:" == document.location.protocol)?true:false; +stlib_picker.pickerList = []; +stlib_picker.defaultServices = ["sharethis", "tumblr", "bebo"]; +stlib_picker.getServices = function (id) { + var func = stlib_picker.pickerList[id]["getServices"]; + return func(); +} + +//Creates the picker - make sure it has a unique ID +stlib_picker.setupPicker = function(jQElement, newDefaults, callback) { + console.log("setting up picker"); + console.log(jQElement); + //Make an array to store any needed options + var optionsArray = []; + optionsArray["El"] = jQElement; + optionsArray["isSelect"] = false; + optionsArray["getServices"] = function() { + var answer = []; + var lis = jQElement.children(".stp_pickerLeft").find(".stp_li"); + lis.each(function() { + answer.push(jQuery(this).attr("id").substring(6)); + }); + return answer; + }; + + //Append the three divs that are needed: + jQElement.append("
    Selected Service
      "); + jQElement.append("
      " + + "
      " + + "
      " + + "
      " + + "
      "); + jQElement.append("
      Possible Services
        "); + jQElement.append("
        "); + + //Add default Services + var pickerDefaults = []; + if (newDefaults) { + pickerDefaults = newDefaults; + } else { + pickerDefaults = stlib_picker.defaultServices; + } + + //Add all the services to the picker: + jQuery.each(_all_services, function(key, value) { + if(jQuery.inArray(key, pickerDefaults) == -1) { + var ul = jQElement.children(".stp_pickerRight").children(".stp_ulRight"); + if(isSecure) + ul.append("
      • " + value.title + "
      • "); + else + ul.append("
      • " + value.title + "
      • "); + + } + }); + for(i=0;i" + _all_services[pickerDefaults[i]].title + ""); + else + ul.append("
      • " + _all_services[pickerDefaults[i]].title + "
      • "); + } + + //Add the various Event handlers + //Need to make sure that we don't get confused when there are multiple pickers + jQElement.find(".stp_li").click(function() { + jQElement.find(".stp_select").removeClass("stp_select"); + jQuery(this).addClass("stp_select"); + stlib_picker.pickerList[jQElement.attr("id")]["isSelect"] = true; + }); + + var arrowDiv = jQElement.children(".stp_pickerArrow").children(".stp_arrow"); + arrowDiv.children(".stp_up").click(function() { + if (stlib_picker.pickerList[jQElement.attr("id")]["isSelect"]) { + var li = jQElement.find(".stp_select"); + var prev = li.prev(); + if (prev.length != 0) { + prev.before(li); + } + if (callback) { + callback(); + } + } + }); + arrowDiv.children(".stp_left").click(function() { + if (stlib_picker.pickerList[jQElement.attr("id")]["isSelect"]) { + var li = jQElement.find(".stp_select"); + var ul = jQElement.children(".stp_pickerLeft").children(".stp_ulLeft"); + ul.prepend(li); + if (callback) { + callback(); + } + } + }); + arrowDiv.children(".stp_right").click(function() { + if (stlib_picker.pickerList[jQElement.attr("id")]["isSelect"]) { + var li = jQElement.find(".stp_select"); + var ul = jQElement.children(".stp_pickerRight").children(".stp_ulRight"); + ul.prepend(li); + if (callback) { + callback(); + } + } + }); + arrowDiv.children(".stp_down").click(function() { + if (stlib_picker.pickerList[jQElement.attr("id")]["isSelect"]) { + var li = jQElement.find(".stp_select"); + var next = li.next(); + if (next.length != 0) { + next.after(li); + } + if (callback) { + callback(); + } + } + }); + + //Save the options (and the picker) globally + stlib_picker.pickerList[jQElement.attr("id")] = optionsArray; +} \ No newline at end of file diff --git a/docroot/sites/all/modules/contrib/sharethis/views/sharethis.views.inc b/docroot/sites/all/modules/contrib/sharethis/views/sharethis.views.inc new file mode 100644 index 00000000..4e555462 --- /dev/null +++ b/docroot/sites/all/modules/contrib/sharethis/views/sharethis.views.inc @@ -0,0 +1,47 @@ + t('ShareThis Link'), + 'help' => t('Link provided by the ShareThis service.'), + 'field' => array( + 'handler' => 'sharethis_handler_field_link', + 'click sortable' => FALSE, + ), + ); + + return $data; +} + +/** + * Implements hook_views_data_alter(). + */ +function sharethis_views_data_alter(&$data) { + if (module_exists('search_api_views')) { + $entity_types = entity_get_info(); + foreach (search_api_index_load_multiple(FALSE) as $index) { + $key = 'search_api_index_' . $index->machine_name; + if (isset($data[$key])) { + $data[$key]['sharethis'] = array( + 'title' => t('ShareThis Link'), + 'help' => t('Link provided by the ShareThis service.'), + 'field' => array( + 'handler' => 'sharethis_handler_field_link', + 'click sortable' => FALSE, + ), + ); + } + } + } +} diff --git a/docroot/sites/all/modules/contrib/sharethis/views/sharethis_handler_field_link.inc b/docroot/sites/all/modules/contrib/sharethis/views/sharethis_handler_field_link.inc new file mode 100644 index 00000000..522f400a --- /dev/null +++ b/docroot/sites/all/modules/contrib/sharethis/views/sharethis_handler_field_link.inc @@ -0,0 +1,36 @@ +get_value($values)) { + return $this->render_sharethis_link($entity); + } + } + + function render_sharethis_link($entity) { + $path = url('node/' . $entity->nid, array('absolute' => TRUE)); + + /** + * @todo + * The line below requires theming of the sharethis button HTML as described + * in http://drupal.org/node/1335836 . Once the theming issue is resolved, + * this line can be uncommented/modified to implement that functionality. + */ + + return theme('sharethis', array( + 'data_options' => sharethis_get_options_array(), + 'm_title' => $entity->title, + 'm_path' => $path, + )); + + } +} diff --git a/docroot/sites/all/modules/contrib/special_menu_items/LICENSE.txt b/docroot/sites/all/modules/contrib/special_menu_items/LICENSE.txt new file mode 100644 index 00000000..d159169d --- /dev/null +++ b/docroot/sites/all/modules/contrib/special_menu_items/LICENSE.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 2 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, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/docroot/sites/all/modules/contrib/special_menu_items/README.txt b/docroot/sites/all/modules/contrib/special_menu_items/README.txt new file mode 100644 index 00000000..6745fd5b --- /dev/null +++ b/docroot/sites/all/modules/contrib/special_menu_items/README.txt @@ -0,0 +1,41 @@ +Special Menu Items Module +------------------------ +Written by Tamir Al Zoubi and Karim Djelid - Servit Open Source Solutions - www.servit.ch + + +Description +----------- +Special Menu Items is module that enables placeholder and separator menu items.Placeholder is a menu item which is +actually not a link. Something like this is useful with drop down menus where we want to have a parent link which +is actually not linking to a page but which is just acting as a parent grouping some children below it. +A separator menu item is something like "-------" which is also not linking anywhere but merely a mean to structure menus. + +This module depends on the Menu module. It is recommended that the SimpleMenu module or another drop down menu module +is used, or you will not be able to acess children of nolink menu items. + +Features +-------- + - User can create a new menu item and place either "" or "" in the Path field, without quotes. + - When the menu is rendered the "nolink" item will be rendered similar to a normal menu link item, but there will + be no link, just the title. Since version 1.3 you can change HTML tag used for menu item. + - When the menu is rendered the "separator" item will be rendered as an item which has no link, + and the default title will be "-------". Since version 1.3 it is possible to change both the HTML tag and title. + - Breadcrumb of "" will be rendered same as "" menu item. + - CSS class "nolink" is added to "" menu item. + - CSS class "seperator" is added to "" menu item. + - Compatible with the Sitemap module. + +Installation +------------ +1. Copy the special_menu_items folder to your sites/all/modules directory. +2. At Administer -> Site building -> Modules (admin/modules) enable the module. +3. Configure the module settings at Administer -> Site configuration -> Special Menu Items (admin/config/system/special_menu_items). + +Upgrading +--------- +Just overwrite (or replace) the older special_menu_items folder with the newer version. + +Contact +------- +This module is developed by Servit Open Source Solutions - http://servit.ch +and maintained by Khaled Zaidan - zaidan@servit.ch diff --git a/docroot/sites/all/modules/contrib/special_menu_items/special_menu_items.info b/docroot/sites/all/modules/contrib/special_menu_items/special_menu_items.info new file mode 100644 index 00000000..44dd8dfe --- /dev/null +++ b/docroot/sites/all/modules/contrib/special_menu_items/special_menu_items.info @@ -0,0 +1,13 @@ +name = Special menu items +description = "Allow users to add placeholder and/or separator menu items." +core = 7.x +dependencies[] = menu + +configure = admin/config/system/special_menu_items + +; Information added by drupal.org packaging script on 2012-09-04 +version = "7.x-2.0" +core = "7.x" +project = "special_menu_items" +datestamp = "1346788411" + diff --git a/docroot/sites/all/modules/contrib/special_menu_items/special_menu_items.install b/docroot/sites/all/modules/contrib/special_menu_items/special_menu_items.install new file mode 100644 index 00000000..37369d00 --- /dev/null +++ b/docroot/sites/all/modules/contrib/special_menu_items/special_menu_items.install @@ -0,0 +1,38 @@ + and "separator" to + */ +function special_menu_items_update_7000(&$sandbox){ + + //change "nolink" to + db_update('menu_links') + ->fields(array( + 'link_path' => '', + 'router_path' => '', + )) + ->condition('router_path', 'nolink', '=') + ->execute(); + + //change "separator" to + db_update('menu_links') + ->fields(array( + 'link_path' => '', + 'router_path' => '', + )) + ->condition('router_path', 'separator', '=') + ->execute(); + + //we don't need this variable anymore + variable_del('special_menu_items_menu_item_link'); +} \ No newline at end of file diff --git a/docroot/sites/all/modules/contrib/special_menu_items/special_menu_items.module b/docroot/sites/all/modules/contrib/special_menu_items/special_menu_items.module new file mode 100644 index 00000000..ebebcf9b --- /dev/null +++ b/docroot/sites/all/modules/contrib/special_menu_items/special_menu_items.module @@ -0,0 +1,199 @@ +'] = array( + 'page callback' => 'drupal_not_found', + 'access callback' => TRUE, + 'type' => MENU_CALLBACK, + ); + + $items[''] = array( + 'page callback' => 'drupal_not_found', + 'access callback' => TRUE, + 'type' => MENU_CALLBACK, + ); + + $items['admin/config/system/special_menu_items'] = array( + 'title' => 'Special Menu Items', + 'description' => 'Configure Special Menu Items.', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('special_menu_items_admin_settings_form'), + 'access arguments' => array('administer site configuration'), + 'type' => MENU_NORMAL_ITEM, + ); + + return $items; +} + +/** + * Override of theme_link() + * This function will render link if it is "nolink" or "separator". Otherwise it will call originally + * overwritten menu_item_link function. + */ +function special_menu_items_link(array $variables) { + if (in_array($variables['path'], array('', ''))) { + switch ($variables['path']) { + case '': + $tag = variable_get('special_menu_items_nolink_tag', ''); + $title = $variables['options']['html'] ? $variables['text'] : check_plain($variables['text']); + $variables['options']['attributes']['class'][] = 'nolink'; + break; + + case '': + $tag = variable_get('special_menu_items_separator_tag', ''); + $title = variable_get('special_menu_items_separator_value', '
        '); + $variables['options']['attributes']['class'][] = 'separator'; + break; + } + + $attributes = drupal_attributes($variables['options']['attributes']); + + if ($tag != '') { + // tags can have these but a cannot, so we remove them. + foreach (array('accesskey', 'target', 'rel', 'name') as $attribute) { + $attributes = preg_replace("/ $attribute=\".*\"/i", "", $attributes); + } + } + + return special_menu_items_render_menu_item($tag, $title, $attributes); + } + // Call the original theme function for normal menu link. + return theme('special_menu_items_link_default', $variables); +} + + +/** + * Returns menu item rendered. + */ +function special_menu_items_render_menu_item($tag, $value, $attrs = array()) { + // $attrs may be a string already or an array + if (is_array($attrs)) { + $attrs = drupal_attributes($attrs); + } + $length = strlen($tag); + if ($tag[0] == '<' && $tag[$length - 1] == '>') { + $tag = substr($tag, 1, $length-2); + } + $closingtag = explode(' ', $tag,2); + $closingtag = ''; + $tag = '<' . $tag . $attrs . '>'; + + return $tag . $value . $closingtag; +} + + + + +/** + * Implementation of hook_theme_registry_alter() + * We replace theme_menu_item_link with our own function. + */ +function special_menu_items_theme_registry_alter(&$registry) { + // Save previous value from registry in case another theme overwrites menu_item_link + $registry['special_menu_items_link_default'] = $registry['link']; + $registry['link']['function'] = 'special_menu_items_link'; +} + +/** + * Implementation of hook_form_FROM_ID_alter() + * Description changed, added nolink and separator as path types. + */ +function special_menu_items_form_menu_edit_item_alter(&$form, &$form_state) { + // Some menu items have a pre-defined path which cannot be modified hence no default_value + if (isset($form['link_path']['#default_value'])) { + $default_value = $form['link_path']['#default_value']; + + if (preg_match('/^\/[0-9]+$/', $default_value)) { + $default_value = ''; + } + elseif (preg_match('/^\/[0-9]+$/', $default_value)) { + $default_value = ''; + } + + $form['link_path']['#default_value'] = $default_value; + $form['link_path']['#description'] .= ' ' . t('Enter "%nolink" to generate non-linkable item, enter "%separator" to generate separator item.', array('%nolink' => '', '%separator' => '')); + } +} + +/** + * Implementation of hook_init(). + */ +function special_menu_items_init() { + // Make breadcrumb of nolink menu item nonlinkable. + $breadcrumb = drupal_get_breadcrumb(); + + foreach($breadcrumb as $key => $crumb){ + if (strlen(strstr($crumb,'')) > 0) { + $crumb = strip_tags($crumb); + $tag = variable_get('special_menu_items_nolink_tag', ''); + $breadcrumb[$key] = special_menu_items_render_menu_item($tag, $crumb); + } + } + + drupal_set_breadcrumb($breadcrumb); +} + +/** + * Special Menu Items admin settings form. + * + * @return + * The settings form used by Special Menu Items. + */ +function special_menu_items_admin_settings_form() { + $form['special_menu_items_nolink_tag'] = array( + '#type' => 'textfield', + '#title' => t('HTML tag for "nolink"'), + '#description' => t('By default, Special Menu Items will use a span tag for the nolink menu item. Here you can specify your own tag.'), + '#default_value' => variable_get('special_menu_items_nolink_tag', ''), + ); + + $form['special_menu_items_separator_tag'] = array( + '#type' => 'textfield', + '#title' => t('HTML tag for "separator"'), + '#description' => t('By default, Special Menu Items will use a span tag for the separator menu item. Here you can specify your own tag.'), + '#default_value' => variable_get('special_menu_items_separator_tag', ''), + ); + + $form['special_menu_items_separator_value'] = array( + '#type' => 'textfield', + '#title' => t('Value to be displayed for the "separator"'), + '#description' => t('By default, Special Menu Items will use a "<hr>" value for the separator. You can specify your own value for the separator.'), + '#default_value' => variable_get('special_menu_items_separator_value', '
        '), + ); + + return system_settings_form($form); +} + +/** + * Implements hook_menu_link_update() + * + */ + +/* +function special_menu_items_menu_link_update($link) { + //do all links in db + global $db_type; + if ($db_type == 'pgsql') { + db_query("UPDATE {menu_links} SET link_path=link_path||'/'||mlid WHERE (link_path='' OR link_path='') AND hidden != -1"); + } + else { + db_query("UPDATE {menu_links} SET link_path=CONCAT(CONCAT(link_path,'/'),mlid) WHERE (link_path='' OR link_path='') AND hidden!=-1"); + } +} + * + */ diff --git a/docroot/sites/all/modules/contrib/table_trash/LICENSE.txt b/docroot/sites/all/modules/contrib/table_trash/LICENSE.txt new file mode 100644 index 00000000..d159169d --- /dev/null +++ b/docroot/sites/all/modules/contrib/table_trash/LICENSE.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 2 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, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/docroot/sites/all/modules/contrib/table_trash/README.txt b/docroot/sites/all/modules/contrib/table_trash/README.txt new file mode 100644 index 00000000..d4b441bf --- /dev/null +++ b/docroot/sites/all/modules/contrib/table_trash/README.txt @@ -0,0 +1,68 @@ + +TABLE TRASH QUICK INSTALL + +-- If you wish to use Drush: + +drush dl table_trash +drush en table_trash +drush dl-datatables + +-- If you do not wish to use Drush: + +For the bulk of its features, Table Trash relies on this jQuery library: +http://datatables.net/download. Please download it and uncompress into +sites/all/libraries. Rename the folder to datatables (lower-case, no verson +number). + +If, in addition, you wish to use the responsive table feature, press "Download +Zip" on this page: https://github.com/Comanche/datatables-responsive. Unzip the +downloaded folder to sites/all/libraries, renaming it to datatables-responsive. + +Visit admin/reports/status and verify that the Table Trash section does not +report any warnings. + +With that you should be in business! All you have to do is visit +/admin/config/content/table_trash to assign the features of your choice to the +tables that need them. That's it. Enjoy! + +NOTES AND CAVEATS + +o To get the full benefits of fast sorting and paging, you're advised to switch + OFF server-side sorting and paging where possible, e.g. in the Views UI. + This is because the client-side sorting and paging functions provided by + DataTables JS operate on the data downloaded with the latest browser request, + which in case of server-side sorting is not the entire db query result set. + +o Column reordering works out-of-the box. But after installing with "drush dl- + datatables" or after dropping this file, + http://datatables.net/extras/thirdparty/ColReorderWithResize/ColReorderWithResize.js, + into sites/all/libraries/datatables/extras/ColReorder/media/js you cannot only + drag and drop columns into a different spot, but also adjust their widths, by + sliding the vertical separator between the column headers. + Note: width-adjustment can be fiddly when "Fix table header on scroll" is + active on the same table. + +o The DataTables JS library does not cope well with tables that don't fully + comply with modern HTML and omit the section, see + http://datatables.net/forums/discussion/18273/datatables-requires-tables-to-have-a-thead + Luckily nearly all tables on Drupal comply and work beautifully. These don't: + admin/reports/status and admin/reports/updates. + DataTables also does not like colspans anywhere in the table. If a table + has a with a colspan attribute, you get an error in your browser console. + See http://datatables.net/forums/discussion/18274/datatables-does-not-cope-with-cols + Problem pages: admin/people/permissions and admin/modules + +o For the above reasons Table Trash comes with a patched version of parts of the + DataTables JS library already installed. It won't fix all idiosyncracies, but + it will allow some features to continue to work despite others failing. + +o For the "Fixed left columns" feature and the export buttons to work on + MULTIPLE tables on the same page, you have to create and configure a separate + table decoration for EACH table, using a well-targeted CSS selector, at + /admin/config/content/table_trash. + +FORUMS + +https://datatables.net/forums/discussions +https://github.com/Comanche/datatables-responsive/issues + diff --git a/docroot/sites/all/modules/contrib/table_trash/css/table_trash.admin.css b/docroot/sites/all/modules/contrib/table_trash/css/table_trash.admin.css new file mode 100644 index 00000000..cf4e6555 --- /dev/null +++ b/docroot/sites/all/modules/contrib/table_trash/css/table_trash.admin.css @@ -0,0 +1,21 @@ +.decoration-params .form-item { + width: 30%; + display: inline-table; + margin: 5px 10px 1px 10px; +} + +.pages-and-selector { + margin-top: 20px; + background-color: #f8f8f8; + border: 1px dashed #cccccc; +} +.pages-and-selector .form-item { + width: 30%; + display: inline-table; + margin: 5px 10px 1px 10px; +} + +#global-settings-responsive .form-item { + margin-right: 15px; + display: inline-table; +} diff --git a/docroot/sites/all/modules/contrib/table_trash/css/table_trash.css b/docroot/sites/all/modules/contrib/table_trash/css/table_trash.css new file mode 100644 index 00000000..ad729956 --- /dev/null +++ b/docroot/sites/all/modules/contrib/table_trash/css/table_trash.css @@ -0,0 +1,27 @@ +/* + * W3C future alternative for + * @see http://webdesign.tutsplus.com/tutorials/htmlcss-tutorials/quick-tip-dont-forget-the-viewport-meta-tag + */ +@viewport { + width: extend-to-zoom; + zoom: 1.0; +} +@-ms-viewport { + width: extend-to-zoom; + zoom: 1.0; +} + +tr .sorting_asc, +tr .sorting_desc { + font-style: italic; +} + +.dataTables_filter label { + margin: -2px 0 5px; +} +.dataTables_filter label input { + padding: 1px; +} +.dataTables_paginate { + height: 2.2em; +} diff --git a/docroot/sites/all/modules/contrib/table_trash/drush/table_trash.drush.inc b/docroot/sites/all/modules/contrib/table_trash/drush/table_trash.drush.inc new file mode 100644 index 00000000..8fb9c015 --- /dev/null +++ b/docroot/sites/all/modules/contrib/table_trash/drush/table_trash.drush.inc @@ -0,0 +1,123 @@ + 'table_trash_drush_download_libraries', + 'description' => dt('Download and install the DataTables JS libraries.'), + 'bootstrap' => DRUSH_BOOTSTRAP_DRUSH, + 'arguments' => array( + 'path' => dt('Optional path to download DataTables JS libraries to. Defaults to "sites/all/libraries"'), + ), + 'aliases' => array('dl-dt'), + ); + return $items; +} + +/** + * Implementd hook_drush_help(). + * + * This function is called in response to: 'drush help dl-datatables' + */ +function table_trash_drush_help($section) { + switch ($section) { + case 'drush:dl-datatables': + return dt('Download the DataTables JS and DataTables Responsive JS libraries to thier appropriate places.'); + } +} + +/** + * Command to download the DataTables JS libraries. + */ +function table_trash_drush_download_libraries() { + $args = func_get_args(); + $lib_path = empty($args[0]) ? 'sites/all/libraries' : trim($args[0]); + + // Create the libraries directory if it does not exist. + if (!is_dir($lib_path)) { + drush_op('mkdir', $lib_path); + drush_log(dt('Directory @lib_path created.', array('@lib_path' => $lib_path)), 'notice'); + } + drush_log(dt('Starting downloads to @lib_path. This usually takes up to 30 seconds. Please wait...', array('@lib_path' => $lib_path)), 'success'); + + if ($zip = table_trash_download_zip(TT_DATATABLES_JS_LIB, $lib_path)) { + if (table_trash_rename_dir("$lib_path/" . basename($zip, '.zip'), "$lib_path/datatables")) { + if (table_trash_download_zip(TT_DATATABLES_RESPONSIVE_JS_LIB, $lib_path)) { + table_trash_rename_dir("$lib_path/datatables-responsive-master", "$lib_path/datatables-responsive"); + } + // drush_download_file() [without leading underscore] does not work here. + if (_drush_download_file(TT_DATATABLES_COLREORDER_WITH_RESIZE, "$lib_path/datatables/" . TABLE_TRASH_COLREORDER_WITH_RESIZE_JS, TRUE)) { + drush_log(dt('Column Reorder JS @url downloaded.', array('@url' => TT_DATATABLES_COLREORDER_WITH_RESIZE)), 'success'); + } + } + } +} + +/** + * Download a zipped library from the specified URL to a destination directory. + * + * @param string $url + * The url to the .zip to be downloaded. + * @param string $dest_path + * The path relative to the Drupal root to put the extracted .zip + * Defaults to sites/all/libraries + * + * @return boolean + * TRUE when the .zip could be downloaded AND extracted successfully + */ +function table_trash_download_zip($url, $dest_path = 'sites/all/libraries') { + $zip = drush_download_file($url); + if ($zip) { + if (drush_tarball_extract($zip, $dest_path)) { + drush_log(dt('Library @url downloaded and extracted.', array('@url' => $url)), 'success'); + } + else { + drush_log(dt('File @zip was downloaded, but could not be extracted.', array('@zip' => $zip)), 'error'); + return FALSE; + } + } + else { + drush_log(dt('Drush could not download @url', array('@url' => $url)), 'error'); + } + return $zip; +} + +/** + * Rename a directory. + * + * @param string $old_name + * Relative the Drupal root. + * @param string $new_name + * Relative to the Drupal root. + * + * @return boolean + * TRUE on success, FALSE otherwise + */ +function table_trash_rename_dir($old_name, $new_name) { + if (is_dir($new_name) && drush_delete_dir($new_name, TRUE)) { + drush_log(dt('The existing library directory @new_name was deleted.', array('@new_name' => $new_name)), 'notice'); + } + if (drush_move_dir($old_name, $new_name, TRUE)) { + drush_log(dt('The library directory was renamed to @new_name', array('@new_name' => $new_name)), 'notice'); + return TRUE; + } + drush_log(dt('The temporary library directory could not be renamed from @old_name to @new_name', array('@old_name' => $old_name, '@new_name' => $new_name)), 'error'); + return FALSE; +} \ No newline at end of file diff --git a/docroot/sites/all/modules/contrib/table_trash/js/table_trash.js b/docroot/sites/all/modules/contrib/table_trash/js/table_trash.js new file mode 100644 index 00000000..e9f69aff --- /dev/null +++ b/docroot/sites/all/modules/contrib/table_trash/js/table_trash.js @@ -0,0 +1,60 @@ +/** + * @file table_trash.js + * + * Takes parameters set on the configuration page and invokes the DataTables JS + * and DataTables-Responsive JS libraries. + */ +(function ($) { + Drupal.behaviors.table_trash_attach = { + + attach: function(context, settings) { + + $(settings.table_trash, context).each(function() { + // settings.table_trash is an array of params indexed by selectors as + // entered on the Table Trash config page. One selector per decoration. + $.each(this, function(selector, params) { + var tables = $(selector); + + if (tables.length > 0) { + if (params['iExpandCol'] >= 0) { + // Expand column specified: set up for responsive DataTables. + tables.find('th:eq(' + params['iExpandCol'] + ')').attr('data-class', 'expand'); + for (var i = 0; i < params['aiHideColsPhone'].length; i++) { + var th = tables.find('th:eq(' + params['aiHideColsPhone'][i] + ')'); + th.attr('data-hide', 'phone'); + } + for (var j = 0; j < params['aiHideColsTablet'].length; j++) { + var th = tables.find('th:eq(' + params['aiHideColsTablet'][j] + ')'); + th.attr('data-hide', th.attr('data-hide') ? 'phone,tablet' : 'tablet'); + } + params['bAutoWidth'] = false, + params['fnPreDrawCallback'] = function() { + if (!this.responsiveHelper) { + var breakpointDef = { phone: params['iBreakpointPhone'], tablet: params['iBreakpointTablet'] }; + this.responsiveHelper = new ResponsiveDatatablesHelper(this, breakpointDef); + } + }; + params['aaSorting'] = []; + params['fnRowCallback'] = function(nRow) { this.responsiveHelper.createExpandIcon(nRow); }; + params['fnDrawCallback'] = function() { this.responsiveHelper.respond(); }; + } + + var trashed_tables = tables.dataTable(params); + + if (params['sScrollXInner']) { + if (params['iFixedLeftColumns']) { + // trashed_tables[t] does not work for FixedColumns() + new FixedColumns(trashed_tables, { iLeftColumns: params['iFixedLeftColumns'] }); + } + } + else if (params['bFixedHeader']) { + for (var t = 0; t < trashed_tables.length; t++) { + new FixedHeader(trashed_tables[t]); + } + } + } + }); + }); + } + }; +}) (jQuery); diff --git a/docroot/sites/all/modules/contrib/table_trash/libraries/datatables-responsive.libraries.info b/docroot/sites/all/modules/contrib/table_trash/libraries/datatables-responsive.libraries.info new file mode 100644 index 00000000..ddb8deaa --- /dev/null +++ b/docroot/sites/all/modules/contrib/table_trash/libraries/datatables-responsive.libraries.info @@ -0,0 +1,25 @@ +name = DataTables-Responsive JS +description = Defines the files and variants that comprise the DataTables-Responsive JS library +core = 7.x + +vendor url = https://github.com/Comanche/datatables-responsive +download url = https://github.com/Comanche/datatables-responsive.git + +dependencies[] = datatables + +version arguments[pattern] = @[Vv]ersion[:]*\s+([0-9a-zA-Z\.\-]+)@ +version arguments[lines] = 10 + +files[css][] = files/1/css/datatables.responsive.css +files[js][] = files/1/js/datatables.responsive.js + +; The patched variant replaces just the datatables.responsive.js file +variants[bug-fixed][files][css][] = files/1/css/datatables.responsive.css +variants[bug-fixed][integration files][table_trash][js][] = libraries/variants/js/datatables.responsive.0.1.5-patched.js + +; Information added by Drupal.org packaging script on 2014-11-16 +version = "7.x-1.0-beta4" +core = "7.x" +project = "table_trash" +datestamp = "1416112082" + diff --git a/docroot/sites/all/modules/contrib/table_trash/libraries/datatables.libraries.info b/docroot/sites/all/modules/contrib/table_trash/libraries/datatables.libraries.info new file mode 100644 index 00000000..adf0f725 --- /dev/null +++ b/docroot/sites/all/modules/contrib/table_trash/libraries/datatables.libraries.info @@ -0,0 +1,43 @@ +name = DataTables JS +description = Defines the files and variants that comprise the DataTables JS library +core = 7.x + +vendor url = http://datatables.net +download url = http://datatables.net/download + +; We don't care what version number is used, but the Libraries module +; insists on finding one somewhere. With DataTables the version number is +; amongst the first 10 lines of the .js file to be loaded. +version arguments[pattern] = @[Vv]ersion[:]*\s+([0-9a-zA-Z\.\-]+)@ +version arguments[lines] = 10 + +; Files are relative to the lib path, i.e. sites/all/libraries/datatables +files[css][] = media/css/jquery.dataTables.css +files[css][] = extras/TableTools/media/css/TableTools.css +files[js][] = media/js/jquery.dataTables.min.js +files[js][] = extras/FixedColumns/media/js/FixedColumns.min.js +files[js][] = extras/FixedHeader/js/FixedHeader.min.js +files[js][] = extras/TableTools/media/js/TableTools.min.js + +; Integration files are relative to the module path +integration files[table_trash][css][] = css/table_trash.css +integration files[table_trash][js][] = js/table_trash.js + +; When the 'bug-fixed' variant is selected through the PHP code, the CSS and JS +; below will be imported instead of the versions above. +variants[bug-fixed][files][css][] = media/css/jquery.dataTables.css +variants[bug-fixed][files][css][] = extras/TableTools/media/css/TableTools.css +variants[bug-fixed][files][js][] = extras/FixedColumns/media/js/FixedColumns.min.js +variants[bug-fixed][files][js][] = extras/TableTools/media/js/TableTools.min.js + +variants[bug-fixed][integration files][table_trash][css][] = css/table_trash.css +variants[bug-fixed][integration files][table_trash][js][] = js/table_trash.js +variants[bug-fixed][integration files][table_trash][js][] = libraries/variants/js/jquery.dataTables.bugfixed.min.js +variants[bug-fixed][integration files][table_trash][js][] = libraries/variants/js/FixedHeader.bugfixed.min.js + +; Information added by Drupal.org packaging script on 2014-11-16 +version = "7.x-1.0-beta4" +core = "7.x" +project = "table_trash" +datestamp = "1416112082" + diff --git a/docroot/sites/all/modules/contrib/table_trash/libraries/variants/js/FixedHeader.bugfixed.js b/docroot/sites/all/modules/contrib/table_trash/libraries/variants/js/FixedHeader.bugfixed.js new file mode 100644 index 00000000..ee949c21 --- /dev/null +++ b/docroot/sites/all/modules/contrib/table_trash/libraries/variants/js/FixedHeader.bugfixed.js @@ -0,0 +1,944 @@ +/* + * File: FixedHeader.js + * Version: 2.0.6-patched-by-RdeBoer + * Description: "Fix" a header at the top of the table, so it scrolls with the table + * Author: Allan Jardine (www.sprymedia.co.uk) + * Created: Wed 16 Sep 2009 19:46:30 BST + * Language: Javascript + * License: GPL v2 or BSD 3 point style + * Project: Just a little bit of fun - enjoy :-) + * Contact: www.sprymedia.co.uk/contact + * + * Copyright 2009-2012 Allan Jardine, all rights reserved. + * + * This source file is free software, under either the GPL v2 license or a + * BSD style license, available at: + * http://datatables.net/license_gpl2 + * http://datatables.net/license_bsd + */ + +/** + * Overview of changes by RdeBoer for use with Drupal.7 + * o replace one occurrence of $() by jQuery() + * o checks for null/undefined + */ + +/* + * Function: FixedHeader + * Purpose: Provide 'fixed' header, footer and columns on an HTML table + * Returns: object:FixedHeader - must be called with 'new' + * Inputs: mixed:mTable - target table + * 1. DataTable object - when using FixedHeader with DataTables, or + * 2. HTML table node - when using FixedHeader without DataTables + * object:oInit - initialisation settings, with the following properties (each optional) + * bool:top - fix the header (default true) + * bool:bottom - fix the footer (default false) + * bool:left - fix the left most column (default false) + * bool:right - fix the right most column (default false) + * int:zTop - fixed header zIndex + * int:zBottom - fixed footer zIndex + * int:zLeft - fixed left zIndex + * int:zRight - fixed right zIndex + */ +var FixedHeader = function ( mTable, oInit ) { + /* Sanity check - you just know it will happen */ + if ( typeof this.fnInit != 'function' ) + { + alert( "FixedHeader warning: FixedHeader must be initialised with the 'new' keyword." ); + return; + } + + var that = this; + var oSettings = { + "aoCache": [], + "oSides": { + "top": true, + "bottom": false, + "left": false, + "right": false + }, + "oZIndexes": { + "top": 104, + "bottom": 103, + "left": 102, + "right": 101 + }, + "oMes": { + "iTableWidth": 0, + "iTableHeight": 0, + "iTableLeft": 0, + "iTableRight": 0, /* note this is left+width, not actually "right" */ + "iTableTop": 0, + "iTableBottom": 0 /* note this is top+height, not actually "bottom" */ + }, + "oOffset": { + "top": 0 + }, + "nTable": null, + "bUseAbsPos": false, + "bFooter": false + }; + + /* + * Function: fnGetSettings + * Purpose: Get the settings for this object + * Returns: object: - settings object + * Inputs: - + */ + this.fnGetSettings = function () { + return oSettings; + }; + + /* + * Function: fnUpdate + * Purpose: Update the positioning and copies of the fixed elements + * Returns: - + * Inputs: - + */ + this.fnUpdate = function () { + this._fnUpdateClones(); + this._fnUpdatePositions(); + }; + + /* + * Function: fnPosition + * Purpose: Update the positioning of the fixed elements + * Returns: - + * Inputs: - + */ + this.fnPosition = function () { + this._fnUpdatePositions(); + }; + + /* Let's do it */ + this.fnInit( mTable, oInit ); + + /* Store the instance on the DataTables object for easy access */ + if ( typeof mTable.fnSettings == 'function' ) + { + mTable._oPluginFixedHeader = this; + } +}; + + +/* + * Variable: FixedHeader + * Purpose: Prototype for FixedHeader + * Scope: global + */ +FixedHeader.prototype = { + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Initialisation + */ + + /* + * Function: fnInit + * Purpose: The "constructor" + * Returns: - + * Inputs: {as FixedHeader function} + */ + fnInit: function ( oTable, oInit ) + { + var s = this.fnGetSettings(); + var that = this; + + /* Record the user definable settings */ + this.fnInitSettings( s, oInit ); + + /* DataTables specific stuff */ + if ( typeof oTable.fnSettings == 'function' ) + { + if ( typeof oTable.fnVersionCheck == 'functon' && + oTable.fnVersionCheck( '1.6.0' ) !== true ) + { + alert( "FixedHeader 2 required DataTables 1.6.0 or later. "+ + "Please upgrade your DataTables installation" ); + return; + } + + var oDtSettings = oTable.fnSettings(); + // RdeBoer: added null check + if ( !oDtSettings || oDtSettings.oScroll.sX != "" || oDtSettings.oScroll.sY != "" ) + { + alert( "FixedHeader 2 is not supported with or DataTables' scrolling mode at this time" ); + return; + } + + s.nTable = oDtSettings.nTable; + oDtSettings.aoDrawCallback.push( { + "fn": function () { + FixedHeader.fnMeasure(); + that._fnUpdateClones.call(that); + that._fnUpdatePositions.call(that); + }, + "sName": "FixedHeader" + } ); + } + else + { + s.nTable = oTable; + } + + /* RdeBoer replaced $ by jQuery */ + s.bFooter = (jQuery('>tfoot', s.nTable).length > 0) ? true : false; + + /* "Detect" browsers that don't support absolute positioing - or have bugs */ + s.bUseAbsPos = (jQuery.browser.msie && (jQuery.browser.version=="6.0"||jQuery.browser.version=="7.0")); + + /* Add the 'sides' that are fixed */ + if ( s.oSides.top ) + { + s.aoCache.push( that._fnCloneTable( "fixedHeader", "FixedHeader_Header", that._fnCloneThead ) ); + } + if ( s.oSides.bottom ) + { + s.aoCache.push( that._fnCloneTable( "fixedFooter", "FixedHeader_Footer", that._fnCloneTfoot ) ); + } + if ( s.oSides.left ) + { + s.aoCache.push( that._fnCloneTable( "fixedLeft", "FixedHeader_Left", that._fnCloneTLeft ) ); + } + if ( s.oSides.right ) + { + s.aoCache.push( that._fnCloneTable( "fixedRight", "FixedHeader_Right", that._fnCloneTRight ) ); + } + + /* Event listeners for window movement */ + FixedHeader.afnScroll.push( function () { + that._fnUpdatePositions.call(that); + } ); + + jQuery(window).resize( function () { + FixedHeader.fnMeasure(); + that._fnUpdateClones.call(that); + that._fnUpdatePositions.call(that); + } ); + + /* Get things right to start with */ + FixedHeader.fnMeasure(); + that._fnUpdateClones(); + that._fnUpdatePositions(); + }, + + + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Support functions + */ + + /* + * Function: fnInitSettings + * Purpose: Take the user's settings and copy them to our local store + * Returns: - + * Inputs: object:s - the local settings object + * object:oInit - the user's settings object + */ + fnInitSettings: function ( s, oInit ) + { + if ( typeof oInit != 'undefined' ) + { + if ( typeof oInit.top != 'undefined' ) { + s.oSides.top = oInit.top; + } + if ( typeof oInit.bottom != 'undefined' ) { + s.oSides.bottom = oInit.bottom; + } + if ( typeof oInit.left != 'undefined' ) { + s.oSides.left = oInit.left; + } + if ( typeof oInit.right != 'undefined' ) { + s.oSides.right = oInit.right; + } + + if ( typeof oInit.zTop != 'undefined' ) { + s.oZIndexes.top = oInit.zTop; + } + if ( typeof oInit.zBottom != 'undefined' ) { + s.oZIndexes.bottom = oInit.zBottom; + } + if ( typeof oInit.zLeft != 'undefined' ) { + s.oZIndexes.left = oInit.zLeft; + } + if ( typeof oInit.zRight != 'undefined' ) { + s.oZIndexes.right = oInit.zRight; + } + + if ( typeof oInit.offsetTop != 'undefined' ) { + s.oOffset.top = oInit.offsetTop; + } + } + + /* Detect browsers which have poor position:fixed support so we can use absolute positions. + * This is much slower since the position must be updated for each scroll, but widens + * compatibility + */ + s.bUseAbsPos = (jQuery.browser.msie && + (jQuery.browser.version=="6.0"||jQuery.browser.version=="7.0")); + }, + + /* + * Function: _fnCloneTable + * Purpose: Clone the table node and do basic initialisation + * Returns: - + * Inputs: - + */ + _fnCloneTable: function ( sType, sClass, fnClone ) + { + var s = this.fnGetSettings(); + var nCTable; + + /* We know that the table _MUST_ has a DIV wrapped around it, because this is simply how + * DataTables works. Therefore, we can set this to be relatively position (if it is not + * alreadu absolute, and use this as the base point for the cloned header + */ + if ( jQuery(s.nTable.parentNode).css('position') != "absolute" ) + { + s.nTable.parentNode.style.position = "relative"; + } + + /* Just a shallow clone will do - we only want the table node */ + nCTable = s.nTable.cloneNode( false ); + nCTable.removeAttribute( 'id' ); + + var nDiv = document.createElement( 'div' ); + nDiv.style.position = "absolute"; + nDiv.style.top = "0px"; + nDiv.style.left = "0px"; + nDiv.className += " FixedHeader_Cloned "+sType+" "+sClass; + + /* Set the zIndexes */ + if ( sType == "fixedHeader" ) + { + nDiv.style.zIndex = s.oZIndexes.top; + } + if ( sType == "fixedFooter" ) + { + nDiv.style.zIndex = s.oZIndexes.bottom; + } + if ( sType == "fixedLeft" ) + { + nDiv.style.zIndex = s.oZIndexes.left; + } + else if ( sType == "fixedRight" ) + { + nDiv.style.zIndex = s.oZIndexes.right; + } + + /* remove margins since we are going to poistion it absolutely */ + nCTable.style.margin = "0"; + + /* Insert the newly cloned table into the DOM, on top of the "real" header */ + nDiv.appendChild( nCTable ); + document.body.appendChild( nDiv ); + + return { + "nNode": nCTable, + "nWrapper": nDiv, + "sType": sType, + "sPosition": "", + "sTop": "", + "sLeft": "", + "fnClone": fnClone + }; + }, + + /* + * Function: _fnUpdatePositions + * Purpose: Get the current positioning of the table in the DOM + * Returns: - + * Inputs: - + */ + _fnMeasure: function () + { + var + s = this.fnGetSettings(), + m = s.oMes, + jqTable = jQuery(s.nTable), + oOffset = jqTable.offset(), + iParentScrollTop = this._fnSumScroll( s.nTable.parentNode, 'scrollTop' ), + iParentScrollLeft = this._fnSumScroll( s.nTable.parentNode, 'scrollLeft' ); + + m.iTableWidth = jqTable.outerWidth(); + m.iTableHeight = jqTable.outerHeight(); + m.iTableLeft = oOffset.left + s.nTable.parentNode.scrollLeft; + m.iTableTop = oOffset.top + iParentScrollTop; + m.iTableRight = m.iTableLeft + m.iTableWidth; + m.iTableRight = FixedHeader.oDoc.iWidth - m.iTableLeft - m.iTableWidth; + m.iTableBottom = FixedHeader.oDoc.iHeight - m.iTableTop - m.iTableHeight; + }, + + /* + * Function: _fnSumScroll + * Purpose: Sum node parameters all the way to the top + * Returns: int: sum + * Inputs: node:n - node to consider + * string:side - scrollTop or scrollLeft + */ + _fnSumScroll: function ( n, side ) + { + var i = n[side]; + while ( n = n.parentNode ) + { + if ( n.nodeName == 'HTML' || n.nodeName == 'BODY' ) + { + break; + } + i = n[side]; + } + return i; + }, + + /* + * Function: _fnUpdatePositions + * Purpose: Loop over the fixed elements for this table and update their positions + * Returns: - + * Inputs: - + */ + _fnUpdatePositions: function () + { + var s = this.fnGetSettings(); + this._fnMeasure(); + + for ( var i=0, iLen=s.aoCache.length ; i oWin.iScrollTop + s.oOffset.top ) + { + /* Above the table */ + this._fnUpdateCache( oCache, 'sPosition', "absolute", 'position', nTable.style ); + this._fnUpdateCache( oCache, 'sTop', oMes.iTableTop+"px", 'top', nTable.style ); + this._fnUpdateCache( oCache, 'sLeft', oMes.iTableLeft+"px", 'left', nTable.style ); + } + else if ( oWin.iScrollTop + s.oOffset.top > oMes.iTableTop+iTbodyHeight ) + { + /* At the bottom of the table */ + this._fnUpdateCache( oCache, 'sPosition', "absolute", 'position', nTable.style ); + this._fnUpdateCache( oCache, 'sTop', (oMes.iTableTop+iTbodyHeight)+"px", 'top', nTable.style ); + this._fnUpdateCache( oCache, 'sLeft', oMes.iTableLeft+"px", 'left', nTable.style ); + } + else + { + /* In the middle of the table */ + if ( s.bUseAbsPos ) + { + this._fnUpdateCache( oCache, 'sPosition', "absolute", 'position', nTable.style ); + this._fnUpdateCache( oCache, 'sTop', oWin.iScrollTop+"px", 'top', nTable.style ); + this._fnUpdateCache( oCache, 'sLeft', oMes.iTableLeft+"px", 'left', nTable.style ); + } + else + { + this._fnUpdateCache( oCache, 'sPosition', 'fixed', 'position', nTable.style ); + this._fnUpdateCache( oCache, 'sTop', s.oOffset.top+"px", 'top', nTable.style ); + this._fnUpdateCache( oCache, 'sLeft', (oMes.iTableLeft-oWin.iScrollLeft)+"px", 'left', nTable.style ); + } + } + }, + + /* + * Function: _fnUpdateCache + * Purpose: Check the cache and update cache and value if needed + * Returns: - + * Inputs: object:oCache - local cache object + * string:sCache - cache property + * string:sSet - value to set + * string:sProperty - object property to set + * object:oObj - object to update + */ + _fnUpdateCache: function ( oCache, sCache, sSet, sProperty, oObj ) + { + if ( oCache[sCache] != sSet ) + { + oObj[sProperty] = sSet; + oCache[sCache] = sSet; + } + }, + + + + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Cloning functions + */ + + /* + * Function: _fnCloneThead + * Purpose: Clone the thead element + * Returns: - + * Inputs: object:oCache - the cahced values for this fixed element + */ + _fnCloneThead: function ( oCache ) + { + var s = this.fnGetSettings(); + var nTable = oCache.nNode; + + /* Set the wrapper width to match that of the cloned table */ + oCache.nWrapper.style.width = jQuery(s.nTable).outerWidth()+"px"; + + /* Remove any children the cloned table has */ + while ( nTable.childNodes.length > 0 ) + { + jQuery('thead th', nTable).unbind( 'click' ); + nTable.removeChild( nTable.childNodes[0] ); + } + + /* Clone the DataTables header */ + var nThead = jQuery('thead', s.nTable).clone(true)[0]; + nTable.appendChild( nThead ); + + /* Copy the widths across - apparently a clone isn't good enough for this */ + jQuery("thead>tr th", s.nTable).each( function (i) { + jQuery("thead>tr th:eq("+i+")", nTable).width( jQuery(this).width() ); + } ); + + jQuery("thead>tr td", s.nTable).each( function (i) { + jQuery("thead>tr td:eq("+i+")", nTable).width( jQuery(this).width() ); + } ); + }, + + /* + * Function: _fnCloneTfoot + * Purpose: Clone the tfoot element + * Returns: - + * Inputs: object:oCache - the cahced values for this fixed element + */ + _fnCloneTfoot: function ( oCache ) + { + var s = this.fnGetSettings(); + var nTable = oCache.nNode; + + /* Set the wrapper width to match that of the cloned table */ + oCache.nWrapper.style.width = jQuery(s.nTable).outerWidth()+"px"; + + /* Remove any children the cloned table has */ + while ( nTable.childNodes.length > 0 ) + { + nTable.removeChild( nTable.childNodes[0] ); + } + + /* Clone the DataTables footer */ + var nTfoot = jQuery('tfoot', s.nTable).clone(true)[0]; + nTable.appendChild( nTfoot ); + + /* Copy the widths across - apparently a clone isn't good enough for this */ + jQuery("tfoot:eq(0)>tr th", s.nTable).each( function (i) { + jQuery("tfoot:eq(0)>tr th:eq("+i+")", nTable).width( jQuery(this).width() ); + } ); + + jQuery("tfoot:eq(0)>tr td", s.nTable).each( function (i) { + jQuery("tfoot:eq(0)>tr th:eq("+i+")", nTable)[0].style.width( jQuery(this).width() ); + } ); + }, + + /* + * Function: _fnCloneTLeft + * Purpose: Clone the left column + * Returns: - + * Inputs: object:oCache - the cached values for this fixed element + */ + _fnCloneTLeft: function ( oCache ) + { + var s = this.fnGetSettings(); + var nTable = oCache.nNode; + var nBody = $('tbody', s.nTable)[0]; + var iCols = $('tbody tr:eq(0) td', s.nTable).length; + var bRubbishOldIE = ($.browser.msie && ($.browser.version == "6.0" || $.browser.version == "7.0")); + + /* Remove any children the cloned table has */ + while ( nTable.childNodes.length > 0 ) + { + nTable.removeChild( nTable.childNodes[0] ); + } + + /* Is this the most efficient way to do this - it looks horrible... */ + nTable.appendChild( jQuery("thead", s.nTable).clone(true)[0] ); + nTable.appendChild( jQuery("tbody", s.nTable).clone(true)[0] ); + if ( s.bFooter ) + { + nTable.appendChild( jQuery("tfoot", s.nTable).clone(true)[0] ); + } + + /* Remove unneeded cells */ + $('thead tr', nTable).each( function (k) { + $('th:gt(0)', this).remove(); + } ); + + $('tfoot tr', nTable).each( function (k) { + $('th:gt(0)', this).remove(); + } ); + + $('tbody tr', nTable).each( function (k) { + $('td:gt(0)', this).remove(); + } ); + + this.fnEqualiseHeights( 'tbody', nBody.parentNode, nTable ); + + var iWidth = jQuery('thead tr th:eq(0)', s.nTable).outerWidth(); + nTable.style.width = iWidth+"px"; + oCache.nWrapper.style.width = iWidth+"px"; + }, + + /* + * Function: _fnCloneTRight + * Purpose: Clone the right most colun + * Returns: - + * Inputs: object:oCache - the cahced values for this fixed element + */ + _fnCloneTRight: function ( oCache ) + { + var s = this.fnGetSettings(); + var nBody = $('tbody', s.nTable)[0]; + var nTable = oCache.nNode; + var iCols = jQuery('tbody tr:eq(0) td', s.nTable).length; + var bRubbishOldIE = ($.browser.msie && ($.browser.version == "6.0" || $.browser.version == "7.0")); + + /* Remove any children the cloned table has */ + while ( nTable.childNodes.length > 0 ) + { + nTable.removeChild( nTable.childNodes[0] ); + } + + /* Is this the most efficient way to do this - it looks horrible... */ + nTable.appendChild( jQuery("thead", s.nTable).clone(true)[0] ); + nTable.appendChild( jQuery("tbody", s.nTable).clone(true)[0] ); + if ( s.bFooter ) + { + nTable.appendChild( jQuery("tfoot", s.nTable).clone(true)[0] ); + } + jQuery('thead tr th:not(:nth-child('+iCols+'n))', nTable).remove(); + jQuery('tfoot tr th:not(:nth-child('+iCols+'n))', nTable).remove(); + + /* Remove unneeded cells */ + $('tbody tr', nTable).each( function (k) { + $('td:lt('+(iCols-1)+')', this).remove(); + } ); + + this.fnEqualiseHeights( 'tbody', nBody.parentNode, nTable ); + + var iWidth = jQuery('thead tr th:eq('+(iCols-1)+')', s.nTable).outerWidth(); + nTable.style.width = iWidth+"px"; + oCache.nWrapper.style.width = iWidth+"px"; + }, + + + /** + * Equalise the heights of the rows in a given table node in a cross browser way. Note that this + * is more or less lifted as is from FixedColumns + * @method fnEqualiseHeights + * @returns void + * @param {string} parent Node type - thead, tbody or tfoot + * @param {element} original Original node to take the heights from + * @param {element} clone Copy the heights to + * @private + */ + "fnEqualiseHeights": function ( parent, original, clone ) + { + var that = this, + jqBoxHack = $(parent+' tr:eq(0)', original).children(':eq(0)'), + iBoxHack = jqBoxHack.outerHeight() - jqBoxHack.height(), + bRubbishOldIE = ($.browser.msie && ($.browser.version == "6.0" || $.browser.version == "7.0")); + + /* Remove cells which are not needed and copy the height from the original table */ + $(parent+' tr', clone).each( function (k) { + /* Can we use some kind of object detection here?! This is very nasty - damn browsers */ + if ( $.browser.mozilla || $.browser.opera ) + { + $(this).children().height( $(parent+' tr:eq('+k+')', original).outerHeight() ); + } + else + { + $(this).children().height( $(parent+' tr:eq('+k+')', original).outerHeight() - iBoxHack ); + } + + if ( !bRubbishOldIE ) + { + $(parent+' tr:eq('+k+')', original).height( $(parent+' tr:eq('+k+')', original).outerHeight() ); + } + } ); + } +}; + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Static properties and methods + * We use these for speed! This information is common to all instances of FixedHeader, so no + * point if having them calculated and stored for each different instance. + */ + +/* + * Variable: oWin + * Purpose: Store information about the window positioning + * Scope: FixedHeader + */ +FixedHeader.oWin = { + "iScrollTop": 0, + "iScrollRight": 0, + "iScrollBottom": 0, + "iScrollLeft": 0, + "iHeight": 0, + "iWidth": 0 +}; + +/* + * Variable: oDoc + * Purpose: Store information about the document size + * Scope: FixedHeader + */ +FixedHeader.oDoc = { + "iHeight": 0, + "iWidth": 0 +}; + +/* + * Variable: afnScroll + * Purpose: Array of functions that are to be used for the scrolling components + * Scope: FixedHeader + */ +FixedHeader.afnScroll = []; + +/* + * Function: fnMeasure + * Purpose: Update the measurements for the window and document + * Returns: - + * Inputs: - + */ +FixedHeader.fnMeasure = function () +{ + var + jqWin = jQuery(window), + jqDoc = jQuery(document), + oWin = FixedHeader.oWin, + oDoc = FixedHeader.oDoc; + + oDoc.iHeight = jqDoc.height(); + oDoc.iWidth = jqDoc.width(); + + oWin.iHeight = jqWin.height(); + oWin.iWidth = jqWin.width(); + oWin.iScrollTop = jqWin.scrollTop(); + oWin.iScrollLeft = jqWin.scrollLeft(); + oWin.iScrollRight = oDoc.iWidth - oWin.iScrollLeft - oWin.iWidth; + oWin.iScrollBottom = oDoc.iHeight - oWin.iScrollTop - oWin.iHeight; +}; + + +FixedHeader.VERSION = "2.0.6"; +FixedHeader.prototype.VERSION = FixedHeader.VERSION; + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Global processing + */ + +/* + * Just one 'scroll' event handler in FixedHeader, which calls the required components. This is + * done as an optimisation, to reduce calculation and proagation time + */ +jQuery(window).scroll( function () { + FixedHeader.fnMeasure(); + for ( var i=0, iLen=FixedHeader.afnScroll.length ; i or DataTables' scrolling mode at this time");return}s.nTable=oDtSettings.nTable;oDtSettings.aoDrawCallback.push({"fn":function(){FixedHeader.fnMeasure();that._fnUpdateClones.call(that);that._fnUpdatePositions.call(that)},"sName":"FixedHeader"})}else{s.nTable=oTable}s.bFooter=(jQuery('>tfoot',s.nTable).length>0)?true:false;s.bUseAbsPos=(jQuery.browser.msie&&(jQuery.browser.version=="6.0"||jQuery.browser.version=="7.0"));if(s.oSides.top){s.aoCache.push(that._fnCloneTable("fixedHeader","FixedHeader_Header",that._fnCloneThead))}if(s.oSides.bottom){s.aoCache.push(that._fnCloneTable("fixedFooter","FixedHeader_Footer",that._fnCloneTfoot))}if(s.oSides.left){s.aoCache.push(that._fnCloneTable("fixedLeft","FixedHeader_Left",that._fnCloneTLeft))}if(s.oSides.right){s.aoCache.push(that._fnCloneTable("fixedRight","FixedHeader_Right",that._fnCloneTRight))}FixedHeader.afnScroll.push(function(){that._fnUpdatePositions.call(that)});jQuery(window).resize(function(){FixedHeader.fnMeasure();that._fnUpdateClones.call(that);that._fnUpdatePositions.call(that)});FixedHeader.fnMeasure();that._fnUpdateClones();that._fnUpdatePositions()},fnInitSettings:function(s,oInit){if(typeof oInit!='undefined'){if(typeof oInit.top!='undefined'){s.oSides.top=oInit.top}if(typeof oInit.bottom!='undefined'){s.oSides.bottom=oInit.bottom}if(typeof oInit.left!='undefined'){s.oSides.left=oInit.left}if(typeof oInit.right!='undefined'){s.oSides.right=oInit.right}if(typeof oInit.zTop!='undefined'){s.oZIndexes.top=oInit.zTop}if(typeof oInit.zBottom!='undefined'){s.oZIndexes.bottom=oInit.zBottom}if(typeof oInit.zLeft!='undefined'){s.oZIndexes.left=oInit.zLeft}if(typeof oInit.zRight!='undefined'){s.oZIndexes.right=oInit.zRight}if(typeof oInit.offsetTop!='undefined'){s.oOffset.top=oInit.offsetTop}}s.bUseAbsPos=(jQuery.browser.msie&&(jQuery.browser.version=="6.0"||jQuery.browser.version=="7.0"))},_fnCloneTable:function(sType,sClass,fnClone){var s=this.fnGetSettings();var nCTable;if(jQuery(s.nTable.parentNode).css('position')!="absolute"){s.nTable.parentNode.style.position="relative"}nCTable=s.nTable.cloneNode(false);nCTable.removeAttribute('id');var nDiv=document.createElement('div');nDiv.style.position="absolute";nDiv.style.top="0px";nDiv.style.left="0px";nDiv.className+=" FixedHeader_Cloned "+sType+" "+sClass;if(sType=="fixedHeader"){nDiv.style.zIndex=s.oZIndexes.top}if(sType=="fixedFooter"){nDiv.style.zIndex=s.oZIndexes.bottom}if(sType=="fixedLeft"){nDiv.style.zIndex=s.oZIndexes.left}else if(sType=="fixedRight"){nDiv.style.zIndex=s.oZIndexes.right}nCTable.style.margin="0";nDiv.appendChild(nCTable);document.body.appendChild(nDiv);return{"nNode":nCTable,"nWrapper":nDiv,"sType":sType,"sPosition":"","sTop":"","sLeft":"","fnClone":fnClone}},_fnMeasure:function(){var s=this.fnGetSettings(),m=s.oMes,jqTable=jQuery(s.nTable),oOffset=jqTable.offset(),iParentScrollTop=this._fnSumScroll(s.nTable.parentNode,'scrollTop'),iParentScrollLeft=this._fnSumScroll(s.nTable.parentNode,'scrollLeft');m.iTableWidth=jqTable.outerWidth();m.iTableHeight=jqTable.outerHeight();m.iTableLeft=oOffset.left+s.nTable.parentNode.scrollLeft;m.iTableTop=oOffset.top+iParentScrollTop;m.iTableRight=m.iTableLeft+m.iTableWidth;m.iTableRight=FixedHeader.oDoc.iWidth-m.iTableLeft-m.iTableWidth;m.iTableBottom=FixedHeader.oDoc.iHeight-m.iTableTop-m.iTableHeight},_fnSumScroll:function(n,side){var i=n[side];while(n=n.parentNode){if(n.nodeName=='HTML'||n.nodeName=='BODY'){break}i=n[side]}return i},_fnUpdatePositions:function(){var s=this.fnGetSettings();this._fnMeasure();for(var i=0,iLen=s.aoCache.length;ioWin.iScrollTop+s.oOffset.top){this._fnUpdateCache(oCache,'sPosition',"absolute",'position',nTable.style);this._fnUpdateCache(oCache,'sTop',oMes.iTableTop+"px",'top',nTable.style);this._fnUpdateCache(oCache,'sLeft',oMes.iTableLeft+"px",'left',nTable.style)}else if(oWin.iScrollTop+s.oOffset.top>oMes.iTableTop+iTbodyHeight){this._fnUpdateCache(oCache,'sPosition',"absolute",'position',nTable.style);this._fnUpdateCache(oCache,'sTop',(oMes.iTableTop+iTbodyHeight)+"px",'top',nTable.style);this._fnUpdateCache(oCache,'sLeft',oMes.iTableLeft+"px",'left',nTable.style)}else{if(s.bUseAbsPos){this._fnUpdateCache(oCache,'sPosition',"absolute",'position',nTable.style);this._fnUpdateCache(oCache,'sTop',oWin.iScrollTop+"px",'top',nTable.style);this._fnUpdateCache(oCache,'sLeft',oMes.iTableLeft+"px",'left',nTable.style)}else{this._fnUpdateCache(oCache,'sPosition','fixed','position',nTable.style);this._fnUpdateCache(oCache,'sTop',s.oOffset.top+"px",'top',nTable.style);this._fnUpdateCache(oCache,'sLeft',(oMes.iTableLeft-oWin.iScrollLeft)+"px",'left',nTable.style)}}},_fnUpdateCache:function(oCache,sCache,sSet,sProperty,oObj){if(oCache[sCache]!=sSet){oObj[sProperty]=sSet;oCache[sCache]=sSet}},_fnCloneThead:function(oCache){var s=this.fnGetSettings();var nTable=oCache.nNode;oCache.nWrapper.style.width=jQuery(s.nTable).outerWidth()+"px";while(nTable.childNodes.length>0){jQuery('thead th',nTable).unbind('click');nTable.removeChild(nTable.childNodes[0])}var nThead=jQuery('thead',s.nTable).clone(true)[0];nTable.appendChild(nThead);jQuery("thead>tr th",s.nTable).each(function(i){jQuery("thead>tr th:eq("+i+")",nTable).width(jQuery(this).width())});jQuery("thead>tr td",s.nTable).each(function(i){jQuery("thead>tr td:eq("+i+")",nTable).width(jQuery(this).width())})},_fnCloneTfoot:function(oCache){var s=this.fnGetSettings();var nTable=oCache.nNode;oCache.nWrapper.style.width=jQuery(s.nTable).outerWidth()+"px";while(nTable.childNodes.length>0){nTable.removeChild(nTable.childNodes[0])}var nTfoot=jQuery('tfoot',s.nTable).clone(true)[0];nTable.appendChild(nTfoot);jQuery("tfoot:eq(0)>tr th",s.nTable).each(function(i){jQuery("tfoot:eq(0)>tr th:eq("+i+")",nTable).width(jQuery(this).width())});jQuery("tfoot:eq(0)>tr td",s.nTable).each(function(i){jQuery("tfoot:eq(0)>tr th:eq("+i+")",nTable)[0].style.width(jQuery(this).width())})},_fnCloneTLeft:function(oCache){var s=this.fnGetSettings();var nTable=oCache.nNode;var nBody=$('tbody',s.nTable)[0];var iCols=$('tbody tr:eq(0) td',s.nTable).length;var bRubbishOldIE=($.browser.msie&&($.browser.version=="6.0"||$.browser.version=="7.0"));while(nTable.childNodes.length>0){nTable.removeChild(nTable.childNodes[0])}nTable.appendChild(jQuery("thead",s.nTable).clone(true)[0]);nTable.appendChild(jQuery("tbody",s.nTable).clone(true)[0]);if(s.bFooter){nTable.appendChild(jQuery("tfoot",s.nTable).clone(true)[0])}$('thead tr',nTable).each(function(k){$('th:gt(0)',this).remove()});$('tfoot tr',nTable).each(function(k){$('th:gt(0)',this).remove()});$('tbody tr',nTable).each(function(k){$('td:gt(0)',this).remove()});this.fnEqualiseHeights('tbody',nBody.parentNode,nTable);var iWidth=jQuery('thead tr th:eq(0)',s.nTable).outerWidth();nTable.style.width=iWidth+"px";oCache.nWrapper.style.width=iWidth+"px"},_fnCloneTRight:function(oCache){var s=this.fnGetSettings();var nBody=$('tbody',s.nTable)[0];var nTable=oCache.nNode;var iCols=jQuery('tbody tr:eq(0) td',s.nTable).length;var bRubbishOldIE=($.browser.msie&&($.browser.version=="6.0"||$.browser.version=="7.0"));while(nTable.childNodes.length>0){nTable.removeChild(nTable.childNodes[0])}nTable.appendChild(jQuery("thead",s.nTable).clone(true)[0]);nTable.appendChild(jQuery("tbody",s.nTable).clone(true)[0]);if(s.bFooter){nTable.appendChild(jQuery("tfoot",s.nTable).clone(true)[0])}jQuery('thead tr th:not(:nth-child('+iCols+'n))',nTable).remove();jQuery('tfoot tr th:not(:nth-child('+iCols+'n))',nTable).remove();$('tbody tr',nTable).each(function(k){$('td:lt('+(iCols-1)+')',this).remove()});this.fnEqualiseHeights('tbody',nBody.parentNode,nTable);var iWidth=jQuery('thead tr th:eq('+(iCols-1)+')',s.nTable).outerWidth();nTable.style.width=iWidth+"px";oCache.nWrapper.style.width=iWidth+"px"},"fnEqualiseHeights":function(parent,original,clone){var that=this,jqBoxHack=$(parent+' tr:eq(0)',original).children(':eq(0)'),iBoxHack=jqBoxHack.outerHeight()-jqBoxHack.height(),bRubbishOldIE=($.browser.msie&&($.browser.version=="6.0"||$.browser.version=="7.0"));$(parent+' tr',clone).each(function(k){if($.browser.mozilla||$.browser.opera){$(this).children().height($(parent+' tr:eq('+k+')',original).outerHeight())}else{$(this).children().height($(parent+' tr:eq('+k+')',original).outerHeight()-iBoxHack)}if(!bRubbishOldIE){$(parent+' tr:eq('+k+')',original).height($(parent+' tr:eq('+k+')',original).outerHeight())}})}};FixedHeader.oWin={"iScrollTop":0,"iScrollRight":0,"iScrollBottom":0,"iScrollLeft":0,"iHeight":0,"iWidth":0};FixedHeader.oDoc={"iHeight":0,"iWidth":0};FixedHeader.afnScroll=[];FixedHeader.fnMeasure=function(){var jqWin=jQuery(window),jqDoc=jQuery(document),oWin=FixedHeader.oWin,oDoc=FixedHeader.oDoc;oDoc.iHeight=jqDoc.height();oDoc.iWidth=jqDoc.width();oWin.iHeight=jqWin.height();oWin.iWidth=jqWin.width();oWin.iScrollTop=jqWin.scrollTop();oWin.iScrollLeft=jqWin.scrollLeft();oWin.iScrollRight=oDoc.iWidth-oWin.iScrollLeft-oWin.iWidth;oWin.iScrollBottom=oDoc.iHeight-oWin.iScrollTop-oWin.iHeight};FixedHeader.VERSION="2.0.6";FixedHeader.prototype.VERSION=FixedHeader.VERSION;jQuery(window).scroll(function(){FixedHeader.fnMeasure();for(var i=0,iLen=FixedHeader.afnScroll.length;i element.lowerLimit) && (!element.upperLimit || newWindowWidth <= element.upperLimit)) { + this.currentBreakpoint = element.name; + newColumnsToHide = element.columnsToHide; + } + } + + // Find out if a column show/hide should happen. + // Skip column show/hide if this window width change follows immediately + // after a previous column show/hide. This will help prevent a loop. + var columnShowHide = false; + if (!this.skipNextWindowsWidthChange) { + // Check difference in length + if (this.lastBreakpoint.length === 0 && newColumnsToHide.length) { + // No previous breakpoint and new breakpoint + columnShowHide = true; + } else if (this.lastBreakpoint != this.currentBreakpoint) { + // Different breakpoints + columnShowHide = true; + } else if (this.columnsHiddenIndexes.length !== newColumnsToHide.length) { + // Difference in number of hidden columns + columnShowHide = true; + } else { + // Possible same number of columns but check for difference in columns + var d1 = this.difference(this.columnsHiddenIndexes, newColumnsToHide).length; + var d2 = this.difference(newColumnsToHide, this.columnsHiddenIndexes).length; + columnShowHide = d1 + d2 > 0; + } + } + + if (columnShowHide) { + // Showing/hiding a column at breakpoint may cause a windows width + // change. Let's flag to skip the column show/hide that may be + // caused by the next windows width change. + this.skipNextWindowsWidthChange = true; + this.columnsHiddenIndexes = newColumnsToHide; + this.columnsShownIndexes = this.difference(this.columnIndexes, this.columnsHiddenIndexes); + this.showHideColumns(); + this.lastBreakpoint = this.currentBreakpoint; + this.setState(); + this.skipNextWindowsWidthChange = false; + } + + + // We don't skip this part. + // If one or more columns have been hidden, add the has-columns-hidden class to table. + // This class will show what state the table is in. + if (this.columnsHiddenIndexes.length) { + this.tableElement.addClass('has-columns-hidden'); + + // Show details for each row that is tagged with the class .detail-show. + jQuery('tr.detail-show', this.tableElement).each(function (index, element) { + var tr = jQuery(element); + if (tr.next('.row-detail').length === 0) { + ResponsiveDatatablesHelper.prototype.showRowDetail(that, tr); + } + }); + } else { + this.tableElement.removeClass('has-columns-hidden'); + jQuery('tr.row-detail').each(function (event) { + ResponsiveDatatablesHelper.prototype.hideRowDetail(that, jQuery(this).prev()); + }); + } +}; + +/** + * Show/hide datatables columns. + */ +ResponsiveDatatablesHelper.prototype.showHideColumns = function () { + // Calculate the columns to show + // Show columns that may have been previously hidden. + for (var i = 0, l = this.columnsShownIndexes.length; i < l; i++) { + this.tableElement.fnSetColumnVis(this.columnsShownIndexes[i], true, false); + } + + // Hide columns that may have been previously shown. + for (var i = 0, l = this.columnsHiddenIndexes.length; i < l; i++) { + this.tableElement.fnSetColumnVis(this.columnsHiddenIndexes[i], false, false); + } + + // Rebuild details to reflect shown/hidden column changes. + var that = this; + jQuery('tr.row-detail').each(function () { + ResponsiveDatatablesHelper.prototype.hideRowDetail(that, jQuery(this).prev()); + }); + if (this.tableElement.hasClass('has-columns-hidden')) { + jQuery('tr.detail-show', this.tableElement).each(function (index, element) { + ResponsiveDatatablesHelper.prototype.showRowDetail(that, jQuery(element)); + }); + } +}; + +/** + * Create the expand icon on the column with the data-class="expand" attribute + * defined for it's header. + * + * @param {Object} tr table row object + */ +ResponsiveDatatablesHelper.prototype.createExpandIcon = function (tr) { + if (this.disabled) { + return; + } + + // Get the td for tr with the same index as the th in the header tr + // that has the data-class="expand" attribute defined. + var tds = jQuery('td', tr); + // Loop through tds and create an expand icon on the td that has a column + // index equal to the expand column given. + for (var i = 0, l = tds.length; i < l; i++) { + var td = tds[i]; + var tdIndex = this.tableElement.fnGetPosition(td)[2]; + td = jQuery(td); + if (tdIndex === this.expandColumn) { + // Create expand icon if there isn't one already. + if (jQuery('span.responsiveExpander', td).length == 0) { + td.prepend(this.expandIconTemplate); + + // Respond to click event on expander icon. + // RdB: for compatibility with older jQuery versions, replace + // .on('click',... with .click(... + switch (this.options.clickOn) { + case 'cell': + //td.on('click', { responsiveDatatablesHelperInstance: this }, this.showRowDetailEventHandler); + td.click({ responsiveDatatablesHelperInstance: this }, this.showRowDetailEventHandler); + break; + case 'row': + //jQuery(tr).on('click', { responsiveDatatablesHelperInstance: this }, this.showRowDetailEventHandler); + jQuery(tr).click({ responsiveDatatablesHelperInstance: this }, this.showRowDetailEventHandler); + break; + default: + //td.on('click', 'span.responsiveExpander', { responsiveDatatablesHelperInstance: this }, this.showRowDetailEventHandler); + td.click({ responsiveDatatablesHelperInstance: this }, this.showRowDetailEventHandler); + break; + } + } + break; + } + } +}; + +/** + * Show row detail event handler. + * + * This handler is used to handle the click event of the expand icon defined in + * the table row data element. + * + * @param {Object} event jQuery event object + */ +ResponsiveDatatablesHelper.prototype.showRowDetailEventHandler = function (event) { + var responsiveDatatablesHelperInstance = event.data.responsiveDatatablesHelperInstance; + if (responsiveDatatablesHelperInstance.disabled) { + return; + } + + var td = jQuery(this); + + // Nothing to do if there are no columns hidden. + if (!td.closest('table').hasClass('has-columns-hidden')) { + return; + } + + // Get the parent tr of which this td belongs to. + var tr = td.closest('tr'); + + // Show/hide row details + if (tr.hasClass('detail-show')) { + ResponsiveDatatablesHelper.prototype.hideRowDetail(responsiveDatatablesHelperInstance, tr); + } else { + ResponsiveDatatablesHelper.prototype.showRowDetail(responsiveDatatablesHelperInstance, tr); + } + + tr.toggleClass('detail-show'); + + // Prevent click event from bubbling up to higher-level DOM elements. + event.stopPropagation(); +}; + +/** + * Show row details. + * + * @param {ResponsiveDatatablesHelper} responsiveDatatablesHelperInstance instance of ResponsiveDatatablesHelper + * @param {Object} tr jQuery wrapped set + */ +ResponsiveDatatablesHelper.prototype.showRowDetail = function (responsiveDatatablesHelperInstance, tr) { + // Get column because we need their titles. + var tableContainer = responsiveDatatablesHelperInstance.tableElement; + var columns = tableContainer.fnSettings().aoColumns; + + // Create the new tr. + var newTr = jQuery(responsiveDatatablesHelperInstance.rowTemplate); + + // Get the ul that we'll insert li's into. + var ul = jQuery('ul', newTr); + + // Loop through hidden columns and create an li for each of them. + for (var i = 0; i < responsiveDatatablesHelperInstance.columnsHiddenIndexes.length; i++) { + var index = responsiveDatatablesHelperInstance.columnsHiddenIndexes[i]; + + // Get row td + var rowIndex = tableContainer.fnGetPosition(tr[0]); + var td = tableContainer.fnGetTds(rowIndex)[index]; + + // Don't create li if contents are empty (depends on hideEmptyColumnsInRowDetail option). + if (!responsiveDatatablesHelperInstance.options.hideEmptyColumnsInRowDetail || td.innerHTML.trim().length) { + var li = jQuery(responsiveDatatablesHelperInstance.rowLiTemplate); + jQuery('.columnTitle', li).html(columns[index].nTh.innerHTML); + var contents = jQuery(td).contents(); + var clonedContents = contents.clone(); + + // Select elements' selectedIndex are not cloned. Do it manually. + for (var n = 0, m = contents.length; n < m; n++) { + var node = contents[n]; + if (node.nodeType === Node.ELEMENT_NODE && node.tagName === 'SELECT') { + clonedContents[n].selectedIndex = node.selectedIndex + } + } + + // Set the column contents. + jQuery('.columnValue', li).append(clonedContents).data('originalTdSource', td); + + // Copy index to data attribute, so we'll know where to put the value when the tr.row-detail is removed. + li.attr('data-column', index); + + // Copy td class to new li. + var tdClass = jQuery(td).attr('class'); + if (tdClass !== 'undefined' && tdClass !== false && tdClass !== '') { + li.addClass(tdClass) + } + + ul.append(li); + } + } + + // Create tr colspan attribute. + var colspan = responsiveDatatablesHelperInstance.columnIndexes.length - responsiveDatatablesHelperInstance.columnsHiddenIndexes.length; + newTr.find('> td').attr('colspan', colspan); + + // Append the new tr after the current tr. + tr.after(newTr); +}; + +/** + * Hide row details. + * + * @param {ResponsiveDatatablesHelper} responsiveDatatablesHelperInstance instance of ResponsiveDatatablesHelper + * @param {Object} tr jQuery wrapped set + */ +ResponsiveDatatablesHelper.prototype.hideRowDetail = function (responsiveDatatablesHelperInstance, tr) { + // If the value of an input has changed while in row detail, we need to copy its state back + // to the DataTables object so that value will persist when the tr.row-detail is removed. + tr.next('.row-detail').find('li').each(function () { + var columnValueContainer = jQuery(this).find('span.columnValue'); + var tdContents = columnValueContainer.contents(); + var td = columnValueContainer.data('originalTdSource'); + jQuery(td).empty().append(tdContents); + }); + tr.next('.row-detail').remove(); +}; + +/** + * Enable/disable responsive behavior and restores changes made. + * + * @param {Boolean} disable, default is true + */ +ResponsiveDatatablesHelper.prototype.disable = function (disable) { + this.disabled = (disable === undefined) || disable; + + if (this.disabled) { + // Remove windows resize handler. + this.setWindowsResizeHandler(false); + + // Remove all trs that have row details. + jQuery('tbody tr.row-detail', this.tableElement).remove(); + + // Remove all trs that are marked to have row details shown. + jQuery('tbody tr', this.tableElement).removeClass('detail-show'); + + // Remove all expander icons + jQuery('tbody tr span.responsiveExpander', this.tableElement).remove(); + + this.columnsHiddenIndexes = []; + this.columnsShownIndexes = this.columnIndexes; + this.showHideColumns(); + this.tableElement.removeClass('has-columns-hidden'); + + this.tableElement.off('click', 'span.responsiveExpander', this.showRowDetailEventHandler); + } else { + // Add windows resize handler + this.setWindowsResizeHandler(); + } +}; + +/** + * Get state from cookie. + */ +ResponsiveDatatablesHelper.prototype.getState = function () { + try { + var value = JSON.parse(decodeURIComponent(this.getCookie(this.cookieName))); + if (value) { + this.columnIndexes = value.columnIndexes; + this.breakpoints = value.breakpoints; + this.expandColumn = value.expandColumn; + this.lastBreakpoint = value.lastBreakpoint; + this.lastStateExists = true; + } + } catch (e) { + } +}; + +/** + * Saves state to cookie. + */ +ResponsiveDatatablesHelper.prototype.setState = function () { + var d1 = this.difference(this.lastColumnsHiddenIndexes, this.columnsHiddenIndexes).length; + var d2 = this.difference(this.columnsHiddenIndexes, this.lastColumnsHiddenIndexes).length; + + if (d1 + d2 > 0) { + var value = encodeURIComponent(JSON.stringify({ + columnIndexes: this.columnIndexes, + columnsHiddenIndexes: this.columnsHiddenIndexes, + breakpoints: this.breakpoints, + expandColumn: this.expandColumn, + lastBreakpoint: this.lastBreakpoint + })); + + this.setCookie(this.cookieName, value, 2 * 60 * 60 * 1000); + this.lastColumnsHiddenIndexes = this.columnsHiddenIndexes.slice(0); + } +}; + +/** + * Get cookie. + */ +ResponsiveDatatablesHelper.prototype.getCookie = function (cname) { + var name = cname + "="; + var ca = document.cookie.split(';'); + for (var i = 0; i < ca.length; i++) { + var c = ca[i].trim(); + if (c.indexOf(name) == 0) return c.substring(name.length, c.length); + } + return ""; +}; + +/** + * Set cookie. + */ +ResponsiveDatatablesHelper.prototype.setCookie = function (cname, cvalue, cexp) { + var d = new Date(); + d.setTime(d.getTime() + cexp); + var expires = "expires=" + d.toGMTString(); + document.cookie = cname + "=" + cvalue + "; " + expires; +}; + +/** + * Get Difference. + */ +ResponsiveDatatablesHelper.prototype.difference = function (a, b) { + var arr = [], i, hash = {}; + for (i = b.length - 1; i >= 0; i--) { + hash[b[i]] = true; + } + for (i = a.length - 1; i >= 0; i--) { + if (hash[a[i]] !== true) { + arr.push(a[i]); + } + } + return arr; +}; + + +(function ($) { + /** + * Get an array of TD nodes from DataTables for a given row, including any column elements which are hidden. + * + * Author: Allan Jardine + * http://datatables.net/plug-ins/api + * + * @param {Object} oSettings DataTables settings object + * @param {node} mTr TR node or aoData index + */ + $.fn.dataTableExt.oApi.fnGetTds = function (oSettings, mTr) { + var anTds = []; + var anVisibleTds = []; + var iCorrector = 0; + var nTd, iColumn, iColumns; + + /* Take either a TR node or aoData index as the mTr property */ + var iRow = (typeof mTr == 'object') ? + oSettings.oApi._fnNodeToDataIndex(oSettings, mTr) : mTr; + var nTr = oSettings.aoData[iRow].nTr; + + /* Get an array of the visible TD elements */ + for (iColumn = 0, iColumns = nTr.childNodes.length; iColumn < iColumns ; iColumn++) { + nTd = nTr.childNodes[iColumn]; + if (nTd.nodeName.toUpperCase() == "TD") { + anVisibleTds.push(nTd); + } + } + + /* Construct and array of the combined elements */ + for (iColumn = 0, iColumns = oSettings.aoColumns.length; iColumn < iColumns ; iColumn++) { + if (oSettings.aoColumns[iColumn].bVisible) { + anTds.push(anVisibleTds[iColumn - iCorrector]); + } + else { + anTds.push(oSettings.aoData[iRow]._anHidden[iColumn]); + iCorrector++; + } + } + + return anTds; + }; +})(jQuery); diff --git a/docroot/sites/all/modules/contrib/table_trash/libraries/variants/js/jquery.dataTables.bugfixed.js b/docroot/sites/all/modules/contrib/table_trash/libraries/variants/js/jquery.dataTables.bugfixed.js new file mode 100644 index 00000000..8e3aa930 --- /dev/null +++ b/docroot/sites/all/modules/contrib/table_trash/libraries/variants/js/jquery.dataTables.bugfixed.js @@ -0,0 +1,12116 @@ +/** + * @summary DataTables + * @description Paginate, search and sort HTML tables + * @version 1.9.4-patched-for-D7 + * @file jquery.dataTables.js + * @author Allan Jardine (www.sprymedia.co.uk) + * @contact www.sprymedia.co.uk/contact + * + * @copyright Copyright 2008-2012 Allan Jardine, all rights reserved. + * + * This source file is free software, under either the GPL v2 license or a + * BSD style license, available at: + * http://datatables.net/license_gpl2 + * http://datatables.net/license_bsd + * + * This source file 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 license files for details. + * + * For details please refer to: http://www.datatables.net + */ + +/** + * Overview of changes by RdeBoer for use with Drupal.7 + * o checks for null/undefined that may occur as result of use of colspan + */ + +/*jslint evil: true, undef: true, browser: true */ +/*globals $, jQuery,define,_fnExternApiFunc,_fnInitialise,_fnInitComplete,_fnLanguageCompat,_fnAddColumn,_fnColumnOptions,_fnAddData,_fnCreateTr,_fnGatherData,_fnBuildHead,_fnDrawHead,_fnDraw,_fnReDraw,_fnAjaxUpdate,_fnAjaxParameters,_fnAjaxUpdateDraw,_fnServerParams,_fnAddOptionsHtml,_fnFeatureHtmlTable,_fnScrollDraw,_fnAdjustColumnSizing,_fnFeatureHtmlFilter,_fnFilterComplete,_fnFilterCustom,_fnFilterColumn,_fnFilter,_fnBuildSearchArray,_fnBuildSearchRow,_fnFilterCreateSearch,_fnDataToSearch,_fnSort,_fnSortAttachListener,_fnSortingClasses,_fnFeatureHtmlPaginate,_fnPageChange,_fnFeatureHtmlInfo,_fnUpdateInfo,_fnFeatureHtmlLength,_fnFeatureHtmlProcessing,_fnProcessingDisplay,_fnVisibleToColumnIndex,_fnColumnIndexToVisible,_fnNodeToDataIndex,_fnVisbleColumns,_fnCalculateEnd,_fnConvertToWidth,_fnCalculateColumnWidths,_fnScrollingWidthAdjust,_fnGetWidestNode,_fnGetMaxLenString,_fnStringToCss,_fnDetectType,_fnSettingsFromNode,_fnGetDataMaster,_fnGetTrNodes,_fnGetTdNodes,_fnEscapeRegex,_fnDeleteIndex,_fnReOrderIndex,_fnColumnOrdering,_fnLog,_fnClearTable,_fnSaveState,_fnLoadState,_fnCreateCookie,_fnReadCookie,_fnDetectHeader,_fnGetUniqueThs,_fnScrollBarWidth,_fnApplyToChildren,_fnMap,_fnGetRowData,_fnGetCellData,_fnSetCellData,_fnGetObjectDataFn,_fnSetObjectDataFn,_fnApplyColumnDefs,_fnBindAction,_fnCallbackReg,_fnCallbackFire,_fnJsonString,_fnRender,_fnNodeToColumnIndex,_fnInfoMacros,_fnBrowserDetect,_fnGetColumns*/ + +(/** @lends */function( window, document, undefined ) { + +(function( factory ) { + "use strict"; + + // Define as an AMD module if possible + if ( typeof define === 'function' && define.amd ) + { + define( ['jquery'], factory ); + } + /* Define using browser globals otherwise + * Prevent multiple instantiations if the script is loaded twice + */ + else if ( jQuery && !jQuery.fn.dataTable ) + { + factory( jQuery ); + } +} +(/** @lends */function( $ ) { + "use strict"; + /** + * DataTables is a plug-in for the jQuery Javascript library. It is a + * highly flexible tool, based upon the foundations of progressive + * enhancement, which will add advanced interaction controls to any + * HTML table. For a full list of features please refer to + *
        DataTables.net. + * + * Note that the DataTable object is not a global variable but is + * aliased to jQuery.fn.DataTable and jQuery.fn.dataTable through which + * it may be accessed. + * + * @class + * @param {object} [oInit={}] Configuration object for DataTables. Options + * are defined by {@link DataTable.defaults} + * @requires jQuery 1.3+ + * + * @example + * // Basic initialisation + * $(document).ready( function { + * $('#example').dataTable(); + * } ); + * + * @example + * // Initialisation with configuration options - in this case, disable + * // pagination and sorting. + * $(document).ready( function { + * $('#example').dataTable( { + * "bPaginate": false, + * "bSort": false + * } ); + * } ); + */ + var DataTable = function( oInit ) + { + + + /** + * Add a column to the list used for the table with default values + * @param {object} oSettings dataTables settings object + * @param {node} nTh The th element for this column + * @memberof DataTable#oApi + */ + function _fnAddColumn( oSettings, nTh ) + { + var oDefaults = DataTable.defaults.columns; + var iCol = oSettings.aoColumns.length; + var oCol = $.extend( {}, DataTable.models.oColumn, oDefaults, { + "sSortingClass": oSettings.oClasses.sSortable, + "sSortingClassJUI": oSettings.oClasses.sSortJUI, + "nTh": nTh ? nTh : document.createElement('th'), + "sTitle": oDefaults.sTitle ? oDefaults.sTitle : nTh ? nTh.innerHTML : '', + "aDataSort": oDefaults.aDataSort ? oDefaults.aDataSort : [iCol], + "mData": oDefaults.mData ? oDefaults.oDefaults : iCol + } ); + oSettings.aoColumns.push( oCol ); + + /* Add a column specific filter */ + if ( oSettings.aoPreSearchCols[ iCol ] === undefined || oSettings.aoPreSearchCols[ iCol ] === null ) + { + oSettings.aoPreSearchCols[ iCol ] = $.extend( {}, DataTable.models.oSearch ); + } + else + { + var oPre = oSettings.aoPreSearchCols[ iCol ]; + + /* Don't require that the user must specify bRegex, bSmart or bCaseInsensitive */ + if ( oPre.bRegex === undefined ) + { + oPre.bRegex = true; + } + + if ( oPre.bSmart === undefined ) + { + oPre.bSmart = true; + } + + if ( oPre.bCaseInsensitive === undefined ) + { + oPre.bCaseInsensitive = true; + } + } + + /* Use the column options function to initialise classes etc */ + _fnColumnOptions( oSettings, iCol, null ); + } + + + /** + * Apply options for a column + * @param {object} oSettings dataTables settings object + * @param {int} iCol column index to consider + * @param {object} oOptions object with sType, bVisible and bSearchable etc + * @memberof DataTable#oApi + */ + function _fnColumnOptions( oSettings, iCol, oOptions ) + { + var oCol = oSettings.aoColumns[ iCol ]; + + /* User specified column options */ + if ( oOptions !== undefined && oOptions !== null ) + { + /* Backwards compatibility for mDataProp */ + if ( oOptions.mDataProp && !oOptions.mData ) + { + oOptions.mData = oOptions.mDataProp; + } + + if ( oOptions.sType !== undefined ) + { + oCol.sType = oOptions.sType; + oCol._bAutoType = false; + } + + $.extend( oCol, oOptions ); + _fnMap( oCol, oOptions, "sWidth", "sWidthOrig" ); + + /* iDataSort to be applied (backwards compatibility), but aDataSort will take + * priority if defined + */ + if ( oOptions.iDataSort !== undefined ) + { + oCol.aDataSort = [ oOptions.iDataSort ]; + } + _fnMap( oCol, oOptions, "aDataSort" ); + } + + /* Cache the data get and set functions for speed */ + var mRender = oCol.mRender ? _fnGetObjectDataFn( oCol.mRender ) : null; + var mData = _fnGetObjectDataFn( oCol.mData ); + + oCol.fnGetData = function (oData, sSpecific) { + var innerData = mData( oData, sSpecific ); + + if ( oCol.mRender && (sSpecific && sSpecific !== '') ) + { + return mRender( innerData, sSpecific, oData ); + } + return innerData; + }; + oCol.fnSetData = _fnSetObjectDataFn( oCol.mData ); + + /* Feature sorting overrides column specific when off */ + if ( !oSettings.oFeatures.bSort ) + { + oCol.bSortable = false; + } + + /* Check that the class assignment is correct for sorting */ + if ( !oCol.bSortable || + ($.inArray('asc', oCol.asSorting) == -1 && $.inArray('desc', oCol.asSorting) == -1) ) + { + oCol.sSortingClass = oSettings.oClasses.sSortableNone; + oCol.sSortingClassJUI = ""; + } + else if ( $.inArray('asc', oCol.asSorting) == -1 && $.inArray('desc', oCol.asSorting) == -1 ) + { + oCol.sSortingClass = oSettings.oClasses.sSortable; + oCol.sSortingClassJUI = oSettings.oClasses.sSortJUI; + } + else if ( $.inArray('asc', oCol.asSorting) != -1 && $.inArray('desc', oCol.asSorting) == -1 ) + { + oCol.sSortingClass = oSettings.oClasses.sSortableAsc; + oCol.sSortingClassJUI = oSettings.oClasses.sSortJUIAscAllowed; + } + else if ( $.inArray('asc', oCol.asSorting) == -1 && $.inArray('desc', oCol.asSorting) != -1 ) + { + oCol.sSortingClass = oSettings.oClasses.sSortableDesc; + oCol.sSortingClassJUI = oSettings.oClasses.sSortJUIDescAllowed; + } + } + + + /** + * Adjust the table column widths for new data. Note: you would probably want to + * do a redraw after calling this function! + * @param {object} oSettings dataTables settings object + * @memberof DataTable#oApi + */ + function _fnAdjustColumnSizing ( oSettings ) + { + /* Not interested in doing column width calculation if auto-width is disabled */ + if ( oSettings.oFeatures.bAutoWidth === false ) + { + return false; + } + + _fnCalculateColumnWidths( oSettings ); + for ( var i=0 , iLen=oSettings.aoColumns.length ; i
        ')[0]; + oSettings.nTable.parentNode.insertBefore( nHolding, oSettings.nTable ); + + /* + * All DataTables are wrapped in a div + */ + oSettings.nTableWrapper = $('
        ')[0]; + oSettings.nTableReinsertBefore = oSettings.nTable.nextSibling; + + /* Track where we want to insert the option */ + var nInsertNode = oSettings.nTableWrapper; + + /* Loop over the user set positioning and place the elements as needed */ + var aDom = oSettings.sDom.split(''); + var nTmp, iPushFeature, cOption, nNewNode, cNext, sAttr, j; + for ( var i=0 ; i
        ')[0]; + + /* Check to see if we should append an id and/or a class name to the container */ + cNext = aDom[i+1]; + if ( cNext == "'" || cNext == '"' ) + { + sAttr = ""; + j = 2; + while ( aDom[i+j] != cNext ) + { + sAttr += aDom[i+j]; + j++; + } + + /* Replace jQuery UI constants */ + if ( sAttr == "H" ) + { + sAttr = oSettings.oClasses.sJUIHeader; + } + else if ( sAttr == "F" ) + { + sAttr = oSettings.oClasses.sJUIFooter; + } + + /* The attribute can be in the format of "#id.class", "#id" or "class" This logic + * breaks the string into parts and applies them as needed + */ + if ( sAttr.indexOf('.') != -1 ) + { + var aSplit = sAttr.split('.'); + nNewNode.id = aSplit[0].substr(1, aSplit[0].length-1); + nNewNode.className = aSplit[1]; + } + else if ( sAttr.charAt(0) == "#" ) + { + nNewNode.id = sAttr.substr(1, sAttr.length-1); + } + else + { + nNewNode.className = sAttr; + } + + i += j; /* Move along the position array */ + } + + nInsertNode.appendChild( nNewNode ); + nInsertNode = nNewNode; + } + else if ( cOption == '>' ) + { + /* End container div */ + nInsertNode = nInsertNode.parentNode; + } + else if ( cOption == 'l' && oSettings.oFeatures.bPaginate && oSettings.oFeatures.bLengthChange ) + { + /* Length */ + nTmp = _fnFeatureHtmlLength( oSettings ); + iPushFeature = 1; + } + else if ( cOption == 'f' && oSettings.oFeatures.bFilter ) + { + /* Filter */ + nTmp = _fnFeatureHtmlFilter( oSettings ); + iPushFeature = 1; + } + else if ( cOption == 'r' && oSettings.oFeatures.bProcessing ) + { + /* pRocessing */ + nTmp = _fnFeatureHtmlProcessing( oSettings ); + iPushFeature = 1; + } + else if ( cOption == 't' ) + { + /* Table */ + nTmp = _fnFeatureHtmlTable( oSettings ); + iPushFeature = 1; + } + else if ( cOption == 'i' && oSettings.oFeatures.bInfo ) + { + /* Info */ + nTmp = _fnFeatureHtmlInfo( oSettings ); + iPushFeature = 1; + } + else if ( cOption == 'p' && oSettings.oFeatures.bPaginate ) + { + /* Pagination */ + nTmp = _fnFeatureHtmlPaginate( oSettings ); + iPushFeature = 1; + } + else if ( DataTable.ext.aoFeatures.length !== 0 ) + { + /* Plug-in features */ + var aoFeatures = DataTable.ext.aoFeatures; + for ( var k=0, kLen=aoFeatures.length ; k') : + sSearchStr==="" ? '' : sSearchStr+' '; + + var nFilter = document.createElement( 'div' ); + nFilter.className = oSettings.oClasses.sFilter; + nFilter.innerHTML = ''; + if ( !oSettings.aanFeatures.f ) + { + nFilter.id = oSettings.sTableId+'_filter'; + } + + var jqFilter = $('input[type="text"]', nFilter); + + // Store a reference to the input element, so other input elements could be + // added to the filter wrapper if needed (submit button for example) + nFilter._DT_Input = jqFilter[0]; + + jqFilter.val( oPreviousSearch.sSearch.replace('"','"') ); + jqFilter.bind( 'keyup.DT', function(e) { + /* Update all other filter input elements for the new display */ + var n = oSettings.aanFeatures.f; + var val = this.value==="" ? "" : this.value; // mental IE8 fix :-( + + for ( var i=0, iLen=n.length ; i=0 ; i-- ) + { + var sData = _fnDataToSearch( _fnGetCellData( oSettings, oSettings.aiDisplay[i], iColumn, 'filter' ), + oSettings.aoColumns[iColumn].sType ); + if ( ! rpSearch.test( sData ) ) + { + oSettings.aiDisplay.splice( i, 1 ); + iIndexCorrector++; + } + } + } + + + /** + * Filter the data table based on user input and draw the table + * @param {object} oSettings dataTables settings object + * @param {string} sInput string to filter on + * @param {int} iForce optional - force a research of the master array (1) or not (undefined or 0) + * @param {bool} bRegex treat as a regular expression or not + * @param {bool} bSmart perform smart filtering or not + * @param {bool} bCaseInsensitive Do case insenstive matching or not + * @memberof DataTable#oApi + */ + function _fnFilter( oSettings, sInput, iForce, bRegex, bSmart, bCaseInsensitive ) + { + var i; + var rpSearch = _fnFilterCreateSearch( sInput, bRegex, bSmart, bCaseInsensitive ); + var oPrevSearch = oSettings.oPreviousSearch; + + /* Check if we are forcing or not - optional parameter */ + if ( !iForce ) + { + iForce = 0; + } + + /* Need to take account of custom filtering functions - always filter */ + if ( DataTable.ext.afnFiltering.length !== 0 ) + { + iForce = 1; + } + + /* + * If the input is blank - we want the full data set + */ + if ( sInput.length <= 0 ) + { + oSettings.aiDisplay.splice( 0, oSettings.aiDisplay.length); + oSettings.aiDisplay = oSettings.aiDisplayMaster.slice(); + } + else + { + /* + * We are starting a new search or the new search string is smaller + * then the old one (i.e. delete). Search from the master array + */ + if ( oSettings.aiDisplay.length == oSettings.aiDisplayMaster.length || + oPrevSearch.sSearch.length > sInput.length || iForce == 1 || + sInput.indexOf(oPrevSearch.sSearch) !== 0 ) + { + /* Nuke the old display array - we are going to rebuild it */ + oSettings.aiDisplay.splice( 0, oSettings.aiDisplay.length); + + /* Force a rebuild of the search array */ + _fnBuildSearchArray( oSettings, 1 ); + + /* Search through all records to populate the search array + * The the oSettings.aiDisplayMaster and asDataSearch arrays have 1 to 1 + * mapping + */ + for ( i=0 ; i').html(sSearch).text(); + } + + // Strip newline characters + return sSearch.replace( /[\n\r]/g, " " ); + } + + /** + * Build a regular expression object suitable for searching a table + * @param {string} sSearch string to search for + * @param {bool} bRegex treat as a regular expression or not + * @param {bool} bSmart perform smart filtering or not + * @param {bool} bCaseInsensitive Do case insensitive matching or not + * @returns {RegExp} constructed object + * @memberof DataTable#oApi + */ + function _fnFilterCreateSearch( sSearch, bRegex, bSmart, bCaseInsensitive ) + { + var asSearch, sRegExpString; + + if ( bSmart ) + { + /* Generate the regular expression to use. Something along the lines of: + * ^(?=.*?\bone\b)(?=.*?\btwo\b)(?=.*?\bthree\b).*$ + */ + asSearch = bRegex ? sSearch.split( ' ' ) : _fnEscapeRegex( sSearch ).split( ' ' ); + sRegExpString = '^(?=.*?'+asSearch.join( ')(?=.*?' )+').*$'; + return new RegExp( sRegExpString, bCaseInsensitive ? "i" : "" ); + } + else + { + sSearch = bRegex ? sSearch : _fnEscapeRegex( sSearch ); + return new RegExp( sSearch, bCaseInsensitive ? "i" : "" ); + } + } + + + /** + * Convert raw data into something that the user can search on + * @param {string} sData data to be modified + * @param {string} sType data type + * @returns {string} search string + * @memberof DataTable#oApi + */ + function _fnDataToSearch ( sData, sType ) + { + if ( typeof DataTable.ext.ofnSearch[sType] === "function" ) + { + return DataTable.ext.ofnSearch[sType]( sData ); + } + else if ( sData === null ) + { + return ''; + } + else if ( sType == "html" ) + { + return sData.replace(/[\r\n]/g," ").replace( /<.*?>/g, "" ); + } + else if ( typeof sData === "string" ) + { + return sData.replace(/[\r\n]/g," "); + } + return sData; + } + + + /** + * scape a string such that it can be used in a regular expression + * @param {string} sVal string to escape + * @returns {string} escaped string + * @memberof DataTable#oApi + */ + function _fnEscapeRegex ( sVal ) + { + var acEscape = [ '/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\', '$', '^', '-' ]; + var reReplace = new RegExp( '(\\' + acEscape.join('|\\') + ')', 'g' ); + return sVal.replace(reReplace, '\\$1'); + } + + + /** + * Generate the node required for the info display + * @param {object} oSettings dataTables settings object + * @returns {node} Information element + * @memberof DataTable#oApi + */ + function _fnFeatureHtmlInfo ( oSettings ) + { + var nInfo = document.createElement( 'div' ); + nInfo.className = oSettings.oClasses.sInfo; + + /* Actions that are to be taken once only for this feature */ + if ( !oSettings.aanFeatures.i ) + { + /* Add draw callback */ + oSettings.aoDrawCallback.push( { + "fn": _fnUpdateInfo, + "sName": "information" + } ); + + /* Add id */ + nInfo.id = oSettings.sTableId+'_info'; + } + oSettings.nTable.setAttribute( 'aria-describedby', oSettings.sTableId+'_info' ); + + return nInfo; + } + + + /** + * Update the information elements in the display + * @param {object} oSettings dataTables settings object + * @memberof DataTable#oApi + */ + function _fnUpdateInfo ( oSettings ) + { + /* Show information about the table */ + if ( !oSettings.oFeatures.bInfo || oSettings.aanFeatures.i.length === 0 ) + { + return; + } + + var + oLang = oSettings.oLanguage, + iStart = oSettings._iDisplayStart+1, + iEnd = oSettings.fnDisplayEnd(), + iMax = oSettings.fnRecordsTotal(), + iTotal = oSettings.fnRecordsDisplay(), + sOut; + + if ( iTotal === 0 ) + { + /* Empty record set */ + sOut = oLang.sInfoEmpty; + } + else { + /* Normal record set */ + sOut = oLang.sInfo; + } + + if ( iTotal != iMax ) + { + /* Record set after filtering */ + sOut += ' ' + oLang.sInfoFiltered; + } + + // Convert the macros + sOut += oLang.sInfoPostFix; + sOut = _fnInfoMacros( oSettings, sOut ); + + if ( oLang.fnInfoCallback !== null ) + { + sOut = oLang.fnInfoCallback.call( oSettings.oInstance, + oSettings, iStart, iEnd, iMax, iTotal, sOut ); + } + + var n = oSettings.aanFeatures.i; + for ( var i=0, iLen=n.length ; i'; + var i, iLen; + var aLengthMenu = oSettings.aLengthMenu; + + if ( aLengthMenu.length == 2 && typeof aLengthMenu[0] === 'object' && + typeof aLengthMenu[1] === 'object' ) + { + for ( i=0, iLen=aLengthMenu[0].length ; i'+aLengthMenu[1][i]+''; + } + } + else + { + for ( i=0, iLen=aLengthMenu.length ; i'+aLengthMenu[i]+''; + } + } + sStdMenu += ''; + + var nLength = document.createElement( 'div' ); + if ( !oSettings.aanFeatures.l ) + { + nLength.id = oSettings.sTableId+'_length'; + } + nLength.className = oSettings.oClasses.sLength; + nLength.innerHTML = ''; + + /* + * Set the length to the current display length - thanks to Andrea Pavlovic for this fix, + * and Stefan Skopnik for fixing the fix! + */ + $('select option[value="'+oSettings._iDisplayLength+'"]', nLength).attr("selected", true); + + $('select', nLength).bind( 'change.DT', function(e) { + var iVal = $(this).val(); + + /* Update all other length options for the new display */ + var n = oSettings.aanFeatures.l; + for ( i=0, iLen=n.length ; i oSettings.aiDisplay.length || + oSettings._iDisplayLength == -1 ) + { + oSettings._iDisplayEnd = oSettings.aiDisplay.length; + } + else + { + oSettings._iDisplayEnd = oSettings._iDisplayStart + oSettings._iDisplayLength; + } + } + } + + + + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Note that most of the paging logic is done in + * DataTable.ext.oPagination + */ + + /** + * Generate the node required for default pagination + * @param {object} oSettings dataTables settings object + * @returns {node} Pagination feature node + * @memberof DataTable#oApi + */ + function _fnFeatureHtmlPaginate ( oSettings ) + { + if ( oSettings.oScroll.bInfinite ) + { + return null; + } + + var nPaginate = document.createElement( 'div' ); + nPaginate.className = oSettings.oClasses.sPaging+oSettings.sPaginationType; + + DataTable.ext.oPagination[ oSettings.sPaginationType ].fnInit( oSettings, nPaginate, + function( oSettings ) { + _fnCalculateEnd( oSettings ); + _fnDraw( oSettings ); + } + ); + + /* Add a draw callback for the pagination on first instance, to update the paging display */ + if ( !oSettings.aanFeatures.p ) + { + oSettings.aoDrawCallback.push( { + "fn": function( oSettings ) { + DataTable.ext.oPagination[ oSettings.sPaginationType ].fnUpdate( oSettings, function( oSettings ) { + _fnCalculateEnd( oSettings ); + _fnDraw( oSettings ); + } ); + }, + "sName": "pagination" + } ); + } + return nPaginate; + } + + + /** + * Alter the display settings to change the page + * @param {object} oSettings dataTables settings object + * @param {string|int} mAction Paging action to take: "first", "previous", "next" or "last" + * or page number to jump to (integer) + * @returns {bool} true page has changed, false - no change (no effect) eg 'first' on page 1 + * @memberof DataTable#oApi + */ + function _fnPageChange ( oSettings, mAction ) + { + var iOldStart = oSettings._iDisplayStart; + + if ( typeof mAction === "number" ) + { + oSettings._iDisplayStart = mAction * oSettings._iDisplayLength; + if ( oSettings._iDisplayStart > oSettings.fnRecordsDisplay() ) + { + oSettings._iDisplayStart = 0; + } + } + else if ( mAction == "first" ) + { + oSettings._iDisplayStart = 0; + } + else if ( mAction == "previous" ) + { + oSettings._iDisplayStart = oSettings._iDisplayLength>=0 ? + oSettings._iDisplayStart - oSettings._iDisplayLength : + 0; + + /* Correct for under-run */ + if ( oSettings._iDisplayStart < 0 ) + { + oSettings._iDisplayStart = 0; + } + } + else if ( mAction == "next" ) + { + if ( oSettings._iDisplayLength >= 0 ) + { + /* Make sure we are not over running the display array */ + if ( oSettings._iDisplayStart + oSettings._iDisplayLength < oSettings.fnRecordsDisplay() ) + { + oSettings._iDisplayStart += oSettings._iDisplayLength; + } + } + else + { + oSettings._iDisplayStart = 0; + } + } + else if ( mAction == "last" ) + { + if ( oSettings._iDisplayLength >= 0 ) + { + var iPages = parseInt( (oSettings.fnRecordsDisplay()-1) / oSettings._iDisplayLength, 10 ) + 1; + oSettings._iDisplayStart = (iPages-1) * oSettings._iDisplayLength; + } + else + { + oSettings._iDisplayStart = 0; + } + } + else + { + _fnLog( oSettings, 0, "Unknown paging action: "+mAction ); + } + $(oSettings.oInstance).trigger('page', oSettings); + + return iOldStart != oSettings._iDisplayStart; + } + + + + /** + * Generate the node required for the processing node + * @param {object} oSettings dataTables settings object + * @returns {node} Processing element + * @memberof DataTable#oApi + */ + function _fnFeatureHtmlProcessing ( oSettings ) + { + var nProcessing = document.createElement( 'div' ); + + if ( !oSettings.aanFeatures.r ) + { + nProcessing.id = oSettings.sTableId+'_processing'; + } + nProcessing.innerHTML = oSettings.oLanguage.sProcessing; + nProcessing.className = oSettings.oClasses.sProcessing; + oSettings.nTable.parentNode.insertBefore( nProcessing, oSettings.nTable ); + + return nProcessing; + } + + + /** + * Display or hide the processing indicator + * @param {object} oSettings dataTables settings object + * @param {bool} bShow Show the processing indicator (true) or not (false) + * @memberof DataTable#oApi + */ + function _fnProcessingDisplay ( oSettings, bShow ) + { + if ( oSettings.oFeatures.bProcessing ) + { + var an = oSettings.aanFeatures.r; + for ( var i=0, iLen=an.length ; i 0 ) + { + nCaption = nCaption[0]; + if ( nCaption._captionSide === "top" ) + { + nScrollHeadTable.appendChild( nCaption ); + } + else if ( nCaption._captionSide === "bottom" && nTfoot ) + { + nScrollFootTable.appendChild( nCaption ); + } + } + + /* + * Sizing + */ + /* When x-scrolling add the width and a scroller to move the header with the body */ + if ( oSettings.oScroll.sX !== "" ) + { + nScrollHead.style.width = _fnStringToCss( oSettings.oScroll.sX ); + nScrollBody.style.width = _fnStringToCss( oSettings.oScroll.sX ); + + if ( nTfoot !== null ) + { + nScrollFoot.style.width = _fnStringToCss( oSettings.oScroll.sX ); + } + + /* When the body is scrolled, then we also want to scroll the headers */ + $(nScrollBody).scroll( function (e) { + nScrollHead.scrollLeft = this.scrollLeft; + + if ( nTfoot !== null ) + { + nScrollFoot.scrollLeft = this.scrollLeft; + } + } ); + } + + /* When yscrolling, add the height */ + if ( oSettings.oScroll.sY !== "" ) + { + nScrollBody.style.height = _fnStringToCss( oSettings.oScroll.sY ); + } + + /* Redraw - align columns across the tables */ + oSettings.aoDrawCallback.push( { + "fn": _fnScrollDraw, + "sName": "scrolling" + } ); + + /* Infinite scrolling event handlers */ + if ( oSettings.oScroll.bInfinite ) + { + $(nScrollBody).scroll( function() { + /* Use a blocker to stop scrolling from loading more data while other data is still loading */ + if ( !oSettings.bDrawing && $(this).scrollTop() !== 0 ) + { + /* Check if we should load the next data set */ + if ( $(this).scrollTop() + $(this).height() > + $(oSettings.nTable).height() - oSettings.oScroll.iLoadGap ) + { + /* Only do the redraw if we have to - we might be at the end of the data */ + if ( oSettings.fnDisplayEnd() < oSettings.fnRecordsDisplay() ) + { + _fnPageChange( oSettings, 'next' ); + _fnCalculateEnd( oSettings ); + _fnDraw( oSettings ); + } + } + } + } ); + } + + oSettings.nScrollHead = nScrollHead; + oSettings.nScrollFoot = nScrollFoot; + + return nScroller; + } + + + /** + * Update the various tables for resizing. It's a bit of a pig this function, but + * basically the idea to: + * 1. Re-create the table inside the scrolling div + * 2. Take live measurements from the DOM + * 3. Apply the measurements + * 4. Clean up + * @param {object} o dataTables settings object + * @returns {node} Node to add to the DOM + * @memberof DataTable#oApi + */ + function _fnScrollDraw ( o ) + { + var + nScrollHeadInner = o.nScrollHead.getElementsByTagName('div')[0], + nScrollHeadTable = nScrollHeadInner.getElementsByTagName('table')[0], + nScrollBody = o.nTable.parentNode, + i, iLen, j, jLen, anHeadToSize, anHeadSizers, anFootSizers, anFootToSize, oStyle, iVis, + nTheadSize, nTfootSize, + iWidth, aApplied=[], aAppliedFooter=[], iSanityWidth, + nScrollFootInner = (o.nTFoot !== null) ? o.nScrollFoot.getElementsByTagName('div')[0] : null, + nScrollFootTable = (o.nTFoot !== null) ? nScrollFootInner.getElementsByTagName('table')[0] : null, + ie67 = o.oBrowser.bScrollOversize, + zeroOut = function(nSizer) { + oStyle = nSizer.style; + oStyle.paddingTop = "0"; + oStyle.paddingBottom = "0"; + oStyle.borderTopWidth = "0"; + oStyle.borderBottomWidth = "0"; + oStyle.height = 0; + }; + + /* + * 1. Re-create the table inside the scrolling div + */ + + /* Remove the old minimised thead and tfoot elements in the inner table */ + $(o.nTable).children('thead, tfoot').remove(); + + /* Clone the current header and footer elements and then place it into the inner table */ + nTheadSize = $(o.nTHead).clone()[0]; + o.nTable.insertBefore( nTheadSize, o.nTable.childNodes[0] ); + anHeadToSize = o.nTHead.getElementsByTagName('tr'); + anHeadSizers = nTheadSize.getElementsByTagName('tr'); + + if ( o.nTFoot !== null ) + { + nTfootSize = $(o.nTFoot).clone()[0]; + o.nTable.insertBefore( nTfootSize, o.nTable.childNodes[1] ); + anFootToSize = o.nTFoot.getElementsByTagName('tr'); + anFootSizers = nTfootSize.getElementsByTagName('tr'); + } + + /* + * 2. Take live measurements from the DOM - do not alter the DOM itself! + */ + + /* Remove old sizing and apply the calculated column widths + * Get the unique column headers in the newly created (cloned) header. We want to apply the + * calculated sizes to this header + */ + if ( o.oScroll.sX === "" ) + { + nScrollBody.style.width = '100%'; + nScrollHeadInner.parentNode.style.width = '100%'; + } + + var nThs = _fnGetUniqueThs( o, nTheadSize ); + for ( i=0, iLen=nThs.length ; i nScrollBody.offsetHeight || + $(nScrollBody).css('overflow-y') == "scroll") ) + { + o.nTable.style.width = _fnStringToCss( $(o.nTable).outerWidth() - o.oScroll.iBarWidth); + } + } + else + { + if ( o.oScroll.sXInner !== "" ) + { + /* x scroll inner has been given - use it */ + o.nTable.style.width = _fnStringToCss(o.oScroll.sXInner); + } + else if ( iSanityWidth == $(nScrollBody).width() && + $(nScrollBody).height() < $(o.nTable).height() ) + { + /* There is y-scrolling - try to take account of the y scroll bar */ + o.nTable.style.width = _fnStringToCss( iSanityWidth-o.oScroll.iBarWidth ); + if ( $(o.nTable).outerWidth() > iSanityWidth-o.oScroll.iBarWidth ) + { + /* Not possible to take account of it */ + o.nTable.style.width = _fnStringToCss( iSanityWidth ); + } + } + else + { + /* All else fails */ + o.nTable.style.width = _fnStringToCss( iSanityWidth ); + } + } + + /* Recalculate the sanity width - now that we've applied the required width, before it was + * a temporary variable. This is required because the column width calculation is done + * before this table DOM is created. + */ + iSanityWidth = $(o.nTable).outerWidth(); + + /* We want the hidden header to have zero height, so remove padding and borders. Then + * set the width based on the real headers + */ + + // Apply all styles in one pass. Invalidates layout only once because we don't read any + // DOM properties. + _fnApplyToChildren( zeroOut, anHeadSizers ); + + // Read all widths in next pass. Forces layout only once because we do not change + // any DOM properties. + _fnApplyToChildren( function(nSizer) { + aApplied.push( _fnStringToCss( $(nSizer).width() ) ); + }, anHeadSizers ); + + // Apply all widths in final pass. Invalidates layout only once because we do not + // read any DOM properties. + _fnApplyToChildren( function(nToSize, i) { + nToSize.style.width = aApplied[i]; + }, anHeadToSize ); + + $(anHeadSizers).height(0); + + /* Same again with the footer if we have one */ + if ( o.nTFoot !== null ) + { + _fnApplyToChildren( zeroOut, anFootSizers ); + + _fnApplyToChildren( function(nSizer) { + aAppliedFooter.push( _fnStringToCss( $(nSizer).width() ) ); + }, anFootSizers ); + + _fnApplyToChildren( function(nToSize, i) { + nToSize.style.width = aAppliedFooter[i]; + }, anFootToSize ); + + $(anFootSizers).height(0); + } + + /* + * 3. Apply the measurements + */ + + /* "Hide" the header and footer that we used for the sizing. We want to also fix their width + * to what they currently are + */ + _fnApplyToChildren( function(nSizer, i) { + nSizer.innerHTML = ""; + nSizer.style.width = aApplied[i]; + }, anHeadSizers ); + + if ( o.nTFoot !== null ) + { + _fnApplyToChildren( function(nSizer, i) { + nSizer.innerHTML = ""; + nSizer.style.width = aAppliedFooter[i]; + }, anFootSizers ); + } + + /* Sanity check that the table is of a sensible width. If not then we are going to get + * misalignment - try to prevent this by not allowing the table to shrink below its min width + */ + if ( $(o.nTable).outerWidth() < iSanityWidth ) + { + /* The min width depends upon if we have a vertical scrollbar visible or not */ + var iCorrection = ((nScrollBody.scrollHeight > nScrollBody.offsetHeight || + $(nScrollBody).css('overflow-y') == "scroll")) ? + iSanityWidth+o.oScroll.iBarWidth : iSanityWidth; + + /* IE6/7 are a law unto themselves... */ + if ( ie67 && (nScrollBody.scrollHeight > + nScrollBody.offsetHeight || $(nScrollBody).css('overflow-y') == "scroll") ) + { + o.nTable.style.width = _fnStringToCss( iCorrection-o.oScroll.iBarWidth ); + } + + /* Apply the calculated minimum width to the table wrappers */ + nScrollBody.style.width = _fnStringToCss( iCorrection ); + o.nScrollHead.style.width = _fnStringToCss( iCorrection ); + + if ( o.nTFoot !== null ) + { + o.nScrollFoot.style.width = _fnStringToCss( iCorrection ); + } + + /* And give the user a warning that we've stopped the table getting too small */ + if ( o.oScroll.sX === "" ) + { + _fnLog( o, 1, "The table cannot fit into the current element which will cause column"+ + " misalignment. The table has been drawn at its minimum possible width." ); + } + else if ( o.oScroll.sXInner !== "" ) + { + _fnLog( o, 1, "The table cannot fit into the current element which will cause column"+ + " misalignment. Increase the sScrollXInner value or remove it to allow automatic"+ + " calculation" ); + } + } + else + { + nScrollBody.style.width = _fnStringToCss( '100%' ); + o.nScrollHead.style.width = _fnStringToCss( '100%' ); + + if ( o.nTFoot !== null ) + { + o.nScrollFoot.style.width = _fnStringToCss( '100%' ); + } + } + + + /* + * 4. Clean up + */ + if ( o.oScroll.sY === "" ) + { + /* IE7< puts a vertical scrollbar in place (when it shouldn't be) due to subtracting + * the scrollbar height from the visible display, rather than adding it on. We need to + * set the height in order to sort this. Don't want to do it in any other browsers. + */ + if ( ie67 ) + { + nScrollBody.style.height = _fnStringToCss( o.nTable.offsetHeight+o.oScroll.iBarWidth ); + } + } + + if ( o.oScroll.sY !== "" && o.oScroll.bCollapse ) + { + nScrollBody.style.height = _fnStringToCss( o.oScroll.sY ); + + var iExtra = (o.oScroll.sX !== "" && o.nTable.offsetWidth > nScrollBody.offsetWidth) ? + o.oScroll.iBarWidth : 0; + if ( o.nTable.offsetHeight < nScrollBody.offsetHeight ) + { + nScrollBody.style.height = _fnStringToCss( o.nTable.offsetHeight+iExtra ); + } + } + + /* Finally set the width's of the header and footer tables */ + var iOuterWidth = $(o.nTable).outerWidth(); + nScrollHeadTable.style.width = _fnStringToCss( iOuterWidth ); + nScrollHeadInner.style.width = _fnStringToCss( iOuterWidth ); + + // Figure out if there are scrollbar present - if so then we need a the header and footer to + // provide a bit more space to allow "overflow" scrolling (i.e. past the scrollbar) + var bScrolling = $(o.nTable).height() > nScrollBody.clientHeight || $(nScrollBody).css('overflow-y') == "scroll"; + nScrollHeadInner.style.paddingRight = bScrolling ? o.oScroll.iBarWidth+"px" : "0px"; + + if ( o.nTFoot !== null ) + { + nScrollFootTable.style.width = _fnStringToCss( iOuterWidth ); + nScrollFootInner.style.width = _fnStringToCss( iOuterWidth ); + nScrollFootInner.style.paddingRight = bScrolling ? o.oScroll.iBarWidth+"px" : "0px"; + } + + /* Adjust the position of the header in case we loose the y-scrollbar */ + $(nScrollBody).scroll(); + + /* If sorting or filtering has occurred, jump the scrolling back to the top */ + if ( o.bSorted || o.bFiltered ) + { + nScrollBody.scrollTop = 0; + } + } + + + /** + * Apply a given function to the display child nodes of an element array (typically + * TD children of TR rows + * @param {function} fn Method to apply to the objects + * @param array {nodes} an1 List of elements to look through for display children + * @param array {nodes} an2 Another list (identical structure to the first) - optional + * @memberof DataTable#oApi + */ + function _fnApplyToChildren( fn, an1, an2 ) + { + var index=0, i=0, iLen=an1.length; + var nNode1, nNode2; + + while ( i < iLen ) + { + nNode1 = an1[i].firstChild; + nNode2 = an2 ? an2[i].firstChild : null; + while ( nNode1 ) + { + if ( nNode1.nodeType === 1 ) + { + if ( an2 ) + { + fn( nNode1, nNode2, index ); + } + else + { + fn( nNode1, index ); + } + index++; + } + nNode1 = nNode1.nextSibling; + nNode2 = an2 ? nNode2.nextSibling : null; + } + i++; + } + } + + /** + * Convert a CSS unit width to pixels (e.g. 2em) + * @param {string} sWidth width to be converted + * @param {node} nParent parent to get the with for (required for relative widths) - optional + * @returns {int} iWidth width in pixels + * @memberof DataTable#oApi + */ + function _fnConvertToWidth ( sWidth, nParent ) + { + if ( !sWidth || sWidth === null || sWidth === '' ) + { + return 0; + } + + if ( !nParent ) + { + nParent = document.body; + } + + var iWidth; + var nTmp = document.createElement( "div" ); + nTmp.style.width = _fnStringToCss( sWidth ); + + nParent.appendChild( nTmp ); + iWidth = nTmp.offsetWidth; + nParent.removeChild( nTmp ); + + return ( iWidth ); + } + + + /** + * Calculate the width of columns for the table + * @param {object} oSettings dataTables settings object + * @memberof DataTable#oApi + */ + function _fnCalculateColumnWidths ( oSettings ) + { + var iTableWidth = oSettings.nTable.offsetWidth; + var iUserInputs = 0; + var iTmpWidth; + var iVisibleColumns = 0; + var iColums = oSettings.aoColumns.length; + var i, iIndex, iCorrector, iWidth; + var oHeaders = $('th', oSettings.nTHead); + var widthAttr = oSettings.nTable.getAttribute('width'); + var nWrapper = oSettings.nTable.parentNode; + + /* Convert any user input sizes into pixel sizes */ + for ( i=0 ; itd', nCalcTmp); + } + + /* Apply custom sizing to the cloned header */ + var nThs = _fnGetUniqueThs( oSettings, nTheadClone ); + iCorrector = 0; + for ( i=0 ; i 0 ) + { + oSettings.aoColumns[i].sWidth = _fnStringToCss( iWidth ); + } + iCorrector++; + } + } + + var cssWidth = $(nCalcTmp).css('width'); + oSettings.nTable.style.width = (cssWidth.indexOf('%') !== -1) ? + cssWidth : _fnStringToCss( $(nCalcTmp).outerWidth() ); + nCalcTmp.parentNode.removeChild( nCalcTmp ); + } + + if ( widthAttr ) + { + oSettings.nTable.style.width = _fnStringToCss( widthAttr ); + } + } + + + /** + * Adjust a table's width to take account of scrolling + * @param {object} oSettings dataTables settings object + * @param {node} n table node + * @memberof DataTable#oApi + */ + function _fnScrollingWidthAdjust ( oSettings, n ) + { + if ( oSettings.oScroll.sX === "" && oSettings.oScroll.sY !== "" ) + { + /* When y-scrolling only, we want to remove the width of the scroll bar so the table + * + scroll bar will fit into the area avaialble. + */ + var iOrigWidth = $(n).width(); + n.style.width = _fnStringToCss( $(n).outerWidth()-oSettings.oScroll.iBarWidth ); + } + else if ( oSettings.oScroll.sX !== "" ) + { + /* When x-scrolling both ways, fix the table at it's current size, without adjusting */ + n.style.width = _fnStringToCss( $(n).outerWidth() ); + } + } + + + /** + * Get the widest node + * @param {object} oSettings dataTables settings object + * @param {int} iCol column of interest + * @returns {node} widest table node + * @memberof DataTable#oApi + */ + function _fnGetWidestNode( oSettings, iCol ) + { + var iMaxIndex = _fnGetMaxLenString( oSettings, iCol ); + if ( iMaxIndex < 0 ) + { + return null; + } + + if ( oSettings.aoData[iMaxIndex].nTr === null ) + { + var n = document.createElement('td'); + n.innerHTML = _fnGetCellData( oSettings, iMaxIndex, iCol, '' ); + return n; + } + return _fnGetTdNodes(oSettings, iMaxIndex)[iCol]; + } + + + /** + * Get the maximum strlen for each data column + * @param {object} oSettings dataTables settings object + * @param {int} iCol column of interest + * @returns {string} max string length for each column + * @memberof DataTable#oApi + */ + function _fnGetMaxLenString( oSettings, iCol ) + { + var iMax = -1; + var iMaxIndex = -1; + + for ( var i=0 ; i/g, "" ); + if ( s.length > iMax ) + { + iMax = s.length; + iMaxIndex = i; + } + } + + return iMaxIndex; + } + + + /** + * Append a CSS unit (only if required) to a string + * @param {array} aArray1 first array + * @param {array} aArray2 second array + * @returns {int} 0 if match, 1 if length is different, 2 if no match + * @memberof DataTable#oApi + */ + function _fnStringToCss( s ) + { + if ( s === null ) + { + return "0px"; + } + + if ( typeof s == 'number' ) + { + if ( s < 0 ) + { + return "0px"; + } + return s+"px"; + } + + /* Check if the last character is not 0-9 */ + var c = s.charCodeAt( s.length-1 ); + if (c < 0x30 || c > 0x39) + { + return s; + } + return s+"px"; + } + + + /** + * Get the width of a scroll bar in this browser being used + * @returns {int} width in pixels + * @memberof DataTable#oApi + */ + function _fnScrollBarWidth () + { + var inner = document.createElement('p'); + var style = inner.style; + style.width = "100%"; + style.height = "200px"; + style.padding = "0px"; + + var outer = document.createElement('div'); + style = outer.style; + style.position = "absolute"; + style.top = "0px"; + style.left = "0px"; + style.visibility = "hidden"; + style.width = "200px"; + style.height = "150px"; + style.padding = "0px"; + style.overflow = "hidden"; + outer.appendChild(inner); + + document.body.appendChild(outer); + var w1 = inner.offsetWidth; + outer.style.overflow = 'scroll'; + var w2 = inner.offsetWidth; + if ( w1 == w2 ) + { + w2 = outer.clientWidth; + } + + document.body.removeChild(outer); + return (w1 - w2); + } + + /** + * Change the order of the table + * @param {object} oSettings dataTables settings object + * @param {bool} bApplyClasses optional - should we apply classes or not + * @memberof DataTable#oApi + */ + function _fnSort ( oSettings, bApplyClasses ) + { + var + i, iLen, j, jLen, k, kLen, + sDataType, nTh, + aaSort = [], + aiOrig = [], + oSort = DataTable.ext.oSort, + aoData = oSettings.aoData, + aoColumns = oSettings.aoColumns, + oAria = oSettings.oLanguage.oAria; + + /* No sorting required if server-side or no sorting array */ + if ( !oSettings.oFeatures.bServerSide && + (oSettings.aaSorting.length !== 0 || oSettings.aaSortingFixed !== null) ) + { + aaSort = ( oSettings.aaSortingFixed !== null ) ? + oSettings.aaSortingFixed.concat( oSettings.aaSorting ) : + oSettings.aaSorting.slice(); + + /* If there is a sorting data type, and a function belonging to it, then we need to + * get the data from the developer's function and apply it for this column + */ + for ( i=0 ; i/g, "" ); + nTh = aoColumns[i].nTh; + nTh.removeAttribute('aria-sort'); + nTh.removeAttribute('aria-label'); + + /* In ARIA only the first sorting column can be marked as sorting - no multi-sort option */ + if ( aoColumns[i].bSortable ) + { + if ( aaSort.length > 0 && aaSort[0][0] == i ) + { + nTh.setAttribute('aria-sort', aaSort[0][1]=="asc" ? "ascending" : "descending" ); + + var nextSort = (aoColumns[i].asSorting[ aaSort[0][2]+1 ]) ? + aoColumns[i].asSorting[ aaSort[0][2]+1 ] : aoColumns[i].asSorting[0]; + nTh.setAttribute('aria-label', sTitle+ + (nextSort=="asc" ? oAria.sSortAscending : oAria.sSortDescending) ); + } + else + { + nTh.setAttribute('aria-label', sTitle+ + (aoColumns[i].asSorting[0]=="asc" ? oAria.sSortAscending : oAria.sSortDescending) ); + } + } + else + { + nTh.setAttribute('aria-label', sTitle); + } + } + + /* Tell the draw function that we have sorted the data */ + oSettings.bSorted = true; + $(oSettings.oInstance).trigger('sort', oSettings); + + /* Copy the master data into the draw array and re-draw */ + if ( oSettings.oFeatures.bFilter ) + { + /* _fnFilter() will redraw the table for us */ + _fnFilterComplete( oSettings, oSettings.oPreviousSearch, 1 ); + } + else + { + oSettings.aiDisplay = oSettings.aiDisplayMaster.slice(); + oSettings._iDisplayStart = 0; /* reset display back to page 0 */ + _fnCalculateEnd( oSettings ); + _fnDraw( oSettings ); + } + } + + + /** + * Attach a sort handler (click) to a node + * @param {object} oSettings dataTables settings object + * @param {node} nNode node to attach the handler to + * @param {int} iDataIndex column sorting index + * @param {function} [fnCallback] callback function + * @memberof DataTable#oApi + */ + function _fnSortAttachListener ( oSettings, nNode, iDataIndex, fnCallback ) + { + _fnBindAction( nNode, {}, function (e) { + /* If the column is not sortable - don't to anything */ + if ( oSettings.aoColumns[iDataIndex].bSortable === false ) + { + return; + } + + /* + * This is a little bit odd I admit... I declare a temporary function inside the scope of + * _fnBuildHead and the click handler in order that the code presented here can be used + * twice - once for when bProcessing is enabled, and another time for when it is + * disabled, as we need to perform slightly different actions. + * Basically the issue here is that the Javascript engine in modern browsers don't + * appear to allow the rendering engine to update the display while it is still executing + * it's thread (well - it does but only after long intervals). This means that the + * 'processing' display doesn't appear for a table sort. To break the js thread up a bit + * I force an execution break by using setTimeout - but this breaks the expected + * thread continuation for the end-developer's point of view (their code would execute + * too early), so we only do it when we absolutely have to. + */ + var fnInnerSorting = function () { + var iColumn, iNextSort; + + /* If the shift key is pressed then we are multiple column sorting */ + if ( e.shiftKey ) + { + /* Are we already doing some kind of sort on this column? */ + var bFound = false; + for ( var i=0 ; i 0 && sCurrentClass.indexOf(sNewClass) == -1 ) + { + /* We need to add a class */ + nTds[i].className = sCurrentClass + " " + sNewClass; + } + } + } + } + + + + /** + * Save the state of a table in a cookie such that the page can be reloaded + * @param {object} oSettings dataTables settings object + * @memberof DataTable#oApi + */ + function _fnSaveState ( oSettings ) + { + if ( !oSettings.oFeatures.bStateSave || oSettings.bDestroying ) + { + return; + } + + /* Store the interesting variables */ + var i, iLen, bInfinite=oSettings.oScroll.bInfinite; + var oState = { + "iCreate": new Date().getTime(), + "iStart": (bInfinite ? 0 : oSettings._iDisplayStart), + "iEnd": (bInfinite ? oSettings._iDisplayLength : oSettings._iDisplayEnd), + "iLength": oSettings._iDisplayLength, + "aaSorting": $.extend( true, [], oSettings.aaSorting ), + "oSearch": $.extend( true, {}, oSettings.oPreviousSearch ), + "aoSearchCols": $.extend( true, [], oSettings.aoPreSearchCols ), + "abVisCols": [] + }; + + for ( i=0, iLen=oSettings.aoColumns.length ; i 4096 ) /* Magic 10 for padding */ + { + for ( var i=0, iLen=aCookies.length ; i 4096 ) { + if ( aOldCookies.length === 0 ) { + // Deleted all DT cookies and still not enough space. Can't state save + return; + } + + var old = aOldCookies.pop(); + document.cookie = old.name+"=; expires=Thu, 01-Jan-1970 00:00:01 GMT; path="+ + aParts.join('/') + "/"; + } + } + + document.cookie = sFullCookie; + } + + + /** + * Read an old cookie to get a cookie with an old table state + * @param {string} sName name of the cookie to read + * @returns {string} contents of the cookie - or null if no cookie with that name found + * @memberof DataTable#oApi + */ + function _fnReadCookie ( sName ) + { + var + aParts = window.location.pathname.split('/'), + sNameEQ = sName + '_' + aParts[aParts.length-1].replace(/[\/:]/g,"").toLowerCase() + '=', + sCookieContents = document.cookie.split(';'); + + for( var i=0 ; i=0 ; i-- ) + { + aRet.push( aoStore[i].fn.apply( oSettings.oInstance, aArgs ) ); + } + + if ( sTrigger !== null ) + { + $(oSettings.oInstance).trigger(sTrigger, aArgs); + } + + return aRet; + } + + + /** + * JSON stringify. If JSON.stringify it provided by the browser, json2.js or any other + * library, then we use that as it is fast, safe and accurate. If the function isn't + * available then we need to built it ourselves - the inspiration for this function comes + * from Craig Buckler ( http://www.sitepoint.com/javascript-json-serialization/ ). It is + * not perfect and absolutely should not be used as a replacement to json2.js - but it does + * do what we need, without requiring a dependency for DataTables. + * @param {object} o JSON object to be converted + * @returns {string} JSON string + * @memberof DataTable#oApi + */ + var _fnJsonString = (window.JSON) ? JSON.stringify : function( o ) + { + /* Not an object or array */ + var sType = typeof o; + if (sType !== "object" || o === null) + { + // simple data type + if (sType === "string") + { + o = '"'+o+'"'; + } + return o+""; + } + + /* If object or array, need to recurse over it */ + var + sProp, mValue, + json = [], + bArr = $.isArray(o); + + for (sProp in o) + { + mValue = o[sProp]; + sType = typeof mValue; + + if (sType === "string") + { + mValue = '"'+mValue+'"'; + } + else if (sType === "object" && mValue !== null) + { + mValue = _fnJsonString(mValue); + } + + json.push((bArr ? "" : '"'+sProp+'":') + mValue); + } + + return (bArr ? "[" : "{") + json + (bArr ? "]" : "}"); + }; + + + /** + * From some browsers (specifically IE6/7) we need special handling to work around browser + * bugs - this function is used to detect when these workarounds are needed. + * @param {object} oSettings dataTables settings object + * @memberof DataTable#oApi + */ + function _fnBrowserDetect( oSettings ) + { + /* IE6/7 will oversize a width 100% element inside a scrolling element, to include the + * width of the scrollbar, while other browsers ensure the inner element is contained + * without forcing scrolling + */ + var n = $( + '
        '+ + '
        '+ + '
        '+ + '
        '+ + '
        ')[0]; + + document.body.appendChild( n ); + oSettings.oBrowser.bScrollOversize = $('#DT_BrowserTest', n)[0].offsetWidth === 100 ? true : false; + document.body.removeChild( n ); + } + + + /** + * Perform a jQuery selector action on the table's TR elements (from the tbody) and + * return the resulting jQuery object. + * @param {string|node|jQuery} sSelector jQuery selector or node collection to act on + * @param {object} [oOpts] Optional parameters for modifying the rows to be included + * @param {string} [oOpts.filter=none] Select TR elements that meet the current filter + * criterion ("applied") or all TR elements (i.e. no filter). + * @param {string} [oOpts.order=current] Order of the TR elements in the processed array. + * Can be either 'current', whereby the current sorting of the table is used, or + * 'original' whereby the original order the data was read into the table is used. + * @param {string} [oOpts.page=all] Limit the selection to the currently displayed page + * ("current") or not ("all"). If 'current' is given, then order is assumed to be + * 'current' and filter is 'applied', regardless of what they might be given as. + * @returns {object} jQuery object, filtered by the given selector. + * @dtopt API + * + * @example + * $(document).ready(function() { + * var oTable = $('#example').dataTable(); + * + * // Highlight every second row + * oTable.$('tr:odd').css('backgroundColor', 'blue'); + * } ); + * + * @example + * $(document).ready(function() { + * var oTable = $('#example').dataTable(); + * + * // Filter to rows with 'Webkit' in them, add a background colour and then + * // remove the filter, thus highlighting the 'Webkit' rows only. + * oTable.fnFilter('Webkit'); + * oTable.$('tr', {"filter": "applied"}).css('backgroundColor', 'blue'); + * oTable.fnFilter(''); + * } ); + */ + this.$ = function ( sSelector, oOpts ) + { + var i, iLen, a = [], tr; + var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); + var aoData = oSettings.aoData; + var aiDisplay = oSettings.aiDisplay; + var aiDisplayMaster = oSettings.aiDisplayMaster; + + if ( !oOpts ) + { + oOpts = {}; + } + + oOpts = $.extend( {}, { + "filter": "none", // applied + "order": "current", // "original" + "page": "all" // current + }, oOpts ); + + // Current page implies that order=current and fitler=applied, since it is fairly + // senseless otherwise + if ( oOpts.page == 'current' ) + { + for ( i=oSettings._iDisplayStart, iLen=oSettings.fnDisplayEnd() ; i + *
      • 1D array of data - add a single row with the data provided
      • + *
      • 2D array of arrays - add multiple rows in a single call
      • + *
      • object - data object when using mData
      • + *
      • array of objects - multiple data objects when using mData
      • + * + * @param {bool} [bRedraw=true] redraw the table or not + * @returns {array} An array of integers, representing the list of indexes in + * aoData ({@link DataTable.models.oSettings}) that have been added to + * the table. + * @dtopt API + * + * @example + * // Global var for counter + * var giCount = 2; + * + * $(document).ready(function() { + * $('#example').dataTable(); + * } ); + * + * function fnClickAddRow() { + * $('#example').dataTable().fnAddData( [ + * giCount+".1", + * giCount+".2", + * giCount+".3", + * giCount+".4" ] + * ); + * + * giCount++; + * } + */ + this.fnAddData = function( mData, bRedraw ) + { + if ( mData.length === 0 ) + { + return []; + } + + var aiReturn = []; + var iTest; + + /* Find settings from table node */ + var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); + + /* Check if we want to add multiple rows or not */ + if ( typeof mData[0] === "object" && mData[0] !== null ) + { + for ( var i=0 ; i= oSettings.fnRecordsDisplay() ) + { + oSettings._iDisplayStart -= oSettings._iDisplayLength; + if ( oSettings._iDisplayStart < 0 ) + { + oSettings._iDisplayStart = 0; + } + } + + if ( bRedraw === undefined || bRedraw ) + { + _fnCalculateEnd( oSettings ); + _fnDraw( oSettings ); + } + + return oData; + }; + + + /** + * Restore the table to it's original state in the DOM by removing all of DataTables + * enhancements, alterations to the DOM structure of the table and event listeners. + * @param {boolean} [bRemove=false] Completely remove the table from the DOM + * @dtopt API + * + * @example + * $(document).ready(function() { + * // This example is fairly pointless in reality, but shows how fnDestroy can be used + * var oTable = $('#example').dataTable(); + * oTable.fnDestroy(); + * } ); + */ + this.fnDestroy = function ( bRemove ) + { + var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); + var nOrig = oSettings.nTableWrapper.parentNode; + var nBody = oSettings.nTBody; + var i, iLen; + + bRemove = (bRemove===undefined) ? false : bRemove; + + /* Flag to note that the table is currently being destroyed - no action should be taken */ + oSettings.bDestroying = true; + + /* Fire off the destroy callbacks for plug-ins etc */ + _fnCallbackFire( oSettings, "aoDestroyCallback", "destroy", [oSettings] ); + + /* If the table is not being removed, restore the hidden columns */ + if ( !bRemove ) + { + for ( i=0, iLen=oSettings.aoColumns.length ; itr>td.'+oSettings.oClasses.sRowEmpty, oSettings.nTable).parent().remove(); + + /* When scrolling we had to break the table up - restore it */ + if ( oSettings.nTable != oSettings.nTHead.parentNode ) + { + $(oSettings.nTable).children('thead').remove(); + oSettings.nTable.appendChild( oSettings.nTHead ); + } + + if ( oSettings.nTFoot && oSettings.nTable != oSettings.nTFoot.parentNode ) + { + $(oSettings.nTable).children('tfoot').remove(); + oSettings.nTable.appendChild( oSettings.nTFoot ); + } + + /* Remove the DataTables generated nodes, events and classes */ + oSettings.nTable.parentNode.removeChild( oSettings.nTable ); + $(oSettings.nTableWrapper).remove(); + + oSettings.aaSorting = []; + oSettings.aaSortingFixed = []; + _fnSortingClasses( oSettings ); + + $(_fnGetTrNodes( oSettings )).removeClass( oSettings.asStripeClasses.join(' ') ); + + $('th, td', oSettings.nTHead).removeClass( [ + oSettings.oClasses.sSortable, + oSettings.oClasses.sSortableAsc, + oSettings.oClasses.sSortableDesc, + oSettings.oClasses.sSortableNone ].join(' ') + ); + if ( oSettings.bJUI ) + { + $('th span.'+oSettings.oClasses.sSortIcon + + ', td span.'+oSettings.oClasses.sSortIcon, oSettings.nTHead).remove(); + + $('th, td', oSettings.nTHead).each( function () { + var jqWrapper = $('div.'+oSettings.oClasses.sSortJUIWrapper, this); + var kids = jqWrapper.contents(); + $(this).append( kids ); + jqWrapper.remove(); + } ); + } + + /* Add the TR elements back into the table in their original order */ + if ( !bRemove && oSettings.nTableReinsertBefore ) + { + nOrig.insertBefore( oSettings.nTable, oSettings.nTableReinsertBefore ); + } + else if ( !bRemove ) + { + nOrig.appendChild( oSettings.nTable ); + } + + for ( i=0, iLen=oSettings.aoData.length ; i
        ')[0];oSettings.nTable.parentNode.insertBefore(nHolding,oSettings.nTable);oSettings.nTableWrapper=$('
        ')[0];oSettings.nTableReinsertBefore=oSettings.nTable.nextSibling;var nInsertNode=oSettings.nTableWrapper;var aDom=oSettings.sDom.split('');var nTmp,iPushFeature,cOption,nNewNode,cNext,sAttr,j;for(var i=0;i
        ')[0];cNext=aDom[i+1];if(cNext=="'"||cNext=='"'){sAttr="";j=2;while(aDom[i+j]!=cNext){sAttr+=aDom[i+j];j++}if(sAttr=="H"){sAttr=oSettings.oClasses.sJUIHeader}else if(sAttr=="F"){sAttr=oSettings.oClasses.sJUIFooter}if(sAttr.indexOf('.')!=-1){var aSplit=sAttr.split('.');nNewNode.id=aSplit[0].substr(1,aSplit[0].length-1);nNewNode.className=aSplit[1]}else if(sAttr.charAt(0)=="#"){nNewNode.id=sAttr.substr(1,sAttr.length-1)}else{nNewNode.className=sAttr}i+=j}nInsertNode.appendChild(nNewNode);nInsertNode=nNewNode}else if(cOption=='>'){nInsertNode=nInsertNode.parentNode}else if(cOption=='l'&&oSettings.oFeatures.bPaginate&&oSettings.oFeatures.bLengthChange){nTmp=_fnFeatureHtmlLength(oSettings);iPushFeature=1}else if(cOption=='f'&&oSettings.oFeatures.bFilter){nTmp=_fnFeatureHtmlFilter(oSettings);iPushFeature=1}else if(cOption=='r'&&oSettings.oFeatures.bProcessing){nTmp=_fnFeatureHtmlProcessing(oSettings);iPushFeature=1}else if(cOption=='t'){nTmp=_fnFeatureHtmlTable(oSettings);iPushFeature=1}else if(cOption=='i'&&oSettings.oFeatures.bInfo){nTmp=_fnFeatureHtmlInfo(oSettings);iPushFeature=1}else if(cOption=='p'&&oSettings.oFeatures.bPaginate){nTmp=_fnFeatureHtmlPaginate(oSettings);iPushFeature=1}else if(DataTable.ext.aoFeatures.length!==0){var aoFeatures=DataTable.ext.aoFeatures;for(var k=0,kLen=aoFeatures.length;k'):sSearchStr===""?'':sSearchStr+' ';var nFilter=document.createElement('div');nFilter.className=oSettings.oClasses.sFilter;nFilter.innerHTML='';if(!oSettings.aanFeatures.f){nFilter.id=oSettings.sTableId+'_filter'}var jqFilter=$('input[type="text"]',nFilter);nFilter._DT_Input=jqFilter[0];jqFilter.val(oPreviousSearch.sSearch.replace('"','"'));jqFilter.bind('keyup.DT',function(e){var n=oSettings.aanFeatures.f;var val=this.value===""?"":this.value;for(var i=0,iLen=n.length;i=0;i--){var sData=_fnDataToSearch(_fnGetCellData(oSettings,oSettings.aiDisplay[i],iColumn,'filter'),oSettings.aoColumns[iColumn].sType);if(!rpSearch.test(sData)){oSettings.aiDisplay.splice(i,1);iIndexCorrector++}}}function _fnFilter(oSettings,sInput,iForce,bRegex,bSmart,bCaseInsensitive){var i;var rpSearch=_fnFilterCreateSearch(sInput,bRegex,bSmart,bCaseInsensitive);var oPrevSearch=oSettings.oPreviousSearch;if(!iForce){iForce=0}if(DataTable.ext.afnFiltering.length!==0){iForce=1}if(sInput.length<=0){oSettings.aiDisplay.splice(0,oSettings.aiDisplay.length);oSettings.aiDisplay=oSettings.aiDisplayMaster.slice()}else{if(oSettings.aiDisplay.length==oSettings.aiDisplayMaster.length||oPrevSearch.sSearch.length>sInput.length||iForce==1||sInput.indexOf(oPrevSearch.sSearch)!==0){oSettings.aiDisplay.splice(0,oSettings.aiDisplay.length);_fnBuildSearchArray(oSettings,1);for(i=0;i').html(sSearch).text()}return sSearch.replace(/[\n\r]/g," ")}function _fnFilterCreateSearch(sSearch,bRegex,bSmart,bCaseInsensitive){var asSearch,sRegExpString;if(bSmart){asSearch=bRegex?sSearch.split(' '):_fnEscapeRegex(sSearch).split(' ');sRegExpString='^(?=.*?'+asSearch.join(')(?=.*?')+').*$';return new RegExp(sRegExpString,bCaseInsensitive?"i":"")}else{sSearch=bRegex?sSearch:_fnEscapeRegex(sSearch);return new RegExp(sSearch,bCaseInsensitive?"i":"")}}function _fnDataToSearch(sData,sType){if(typeof DataTable.ext.ofnSearch[sType]==="function"){return DataTable.ext.ofnSearch[sType](sData)}else if(sData===null){return''}else if(sType=="html"){return sData.replace(/[\r\n]/g," ").replace(/<.*?>/g,"")}else if(typeof sData==="string"){return sData.replace(/[\r\n]/g," ")}return sData}function _fnEscapeRegex(sVal){var acEscape=['/','.','*','+','?','|','(',')','[',']','{','}','\\','$','^','-'];var reReplace=new RegExp('(\\'+acEscape.join('|\\')+')','g');return sVal.replace(reReplace,'\\$1')}function _fnFeatureHtmlInfo(oSettings){var nInfo=document.createElement('div');nInfo.className=oSettings.oClasses.sInfo;if(!oSettings.aanFeatures.i){oSettings.aoDrawCallback.push({"fn":_fnUpdateInfo,"sName":"information"});nInfo.id=oSettings.sTableId+'_info'}oSettings.nTable.setAttribute('aria-describedby',oSettings.sTableId+'_info');return nInfo}function _fnUpdateInfo(oSettings){if(!oSettings.oFeatures.bInfo||oSettings.aanFeatures.i.length===0){return}var oLang=oSettings.oLanguage,iStart=oSettings._iDisplayStart+1,iEnd=oSettings.fnDisplayEnd(),iMax=oSettings.fnRecordsTotal(),iTotal=oSettings.fnRecordsDisplay(),sOut;if(iTotal===0){sOut=oLang.sInfoEmpty}else{sOut=oLang.sInfo}if(iTotal!=iMax){sOut+=' '+oLang.sInfoFiltered}sOut+=oLang.sInfoPostFix;sOut=_fnInfoMacros(oSettings,sOut);if(oLang.fnInfoCallback!==null){sOut=oLang.fnInfoCallback.call(oSettings.oInstance,oSettings,iStart,iEnd,iMax,iTotal,sOut)}var n=oSettings.aanFeatures.i;for(var i=0,iLen=n.length;i';var i,iLen;var aLengthMenu=oSettings.aLengthMenu;if(aLengthMenu.length==2&&typeof aLengthMenu[0]==='object'&&typeof aLengthMenu[1]==='object'){for(i=0,iLen=aLengthMenu[0].length;i'+aLengthMenu[1][i]+''}}else{for(i=0,iLen=aLengthMenu.length;i'+aLengthMenu[i]+''}}sStdMenu+='';var nLength=document.createElement('div');if(!oSettings.aanFeatures.l){nLength.id=oSettings.sTableId+'_length'}nLength.className=oSettings.oClasses.sLength;nLength.innerHTML='';$('select option[value="'+oSettings._iDisplayLength+'"]',nLength).attr("selected",true);$('select',nLength).bind('change.DT',function(e){var iVal=$(this).val();var n=oSettings.aanFeatures.l;for(i=0,iLen=n.length;ioSettings.aiDisplay.length||oSettings._iDisplayLength==-1){oSettings._iDisplayEnd=oSettings.aiDisplay.length}else{oSettings._iDisplayEnd=oSettings._iDisplayStart+oSettings._iDisplayLength}}}function _fnFeatureHtmlPaginate(oSettings){if(oSettings.oScroll.bInfinite){return null}var nPaginate=document.createElement('div');nPaginate.className=oSettings.oClasses.sPaging+oSettings.sPaginationType;DataTable.ext.oPagination[oSettings.sPaginationType].fnInit(oSettings,nPaginate,function(oSettings){_fnCalculateEnd(oSettings);_fnDraw(oSettings)});if(!oSettings.aanFeatures.p){oSettings.aoDrawCallback.push({"fn":function(oSettings){DataTable.ext.oPagination[oSettings.sPaginationType].fnUpdate(oSettings,function(oSettings){_fnCalculateEnd(oSettings);_fnDraw(oSettings)})},"sName":"pagination"})}return nPaginate}function _fnPageChange(oSettings,mAction){var iOldStart=oSettings._iDisplayStart;if(typeof mAction==="number"){oSettings._iDisplayStart=mAction*oSettings._iDisplayLength;if(oSettings._iDisplayStart>oSettings.fnRecordsDisplay()){oSettings._iDisplayStart=0}}else if(mAction=="first"){oSettings._iDisplayStart=0}else if(mAction=="previous"){oSettings._iDisplayStart=oSettings._iDisplayLength>=0?oSettings._iDisplayStart-oSettings._iDisplayLength:0;if(oSettings._iDisplayStart<0){oSettings._iDisplayStart=0}}else if(mAction=="next"){if(oSettings._iDisplayLength>=0){if(oSettings._iDisplayStart+oSettings._iDisplayLength=0){var iPages=parseInt((oSettings.fnRecordsDisplay()-1)/oSettings._iDisplayLength,10)+1;oSettings._iDisplayStart=(iPages-1)*oSettings._iDisplayLength}else{oSettings._iDisplayStart=0}}else{_fnLog(oSettings,0,"Unknown paging action: "+mAction)}$(oSettings.oInstance).trigger('page',oSettings);return iOldStart!=oSettings._iDisplayStart}function _fnFeatureHtmlProcessing(oSettings){var nProcessing=document.createElement('div');if(!oSettings.aanFeatures.r){nProcessing.id=oSettings.sTableId+'_processing'}nProcessing.innerHTML=oSettings.oLanguage.sProcessing;nProcessing.className=oSettings.oClasses.sProcessing;oSettings.nTable.parentNode.insertBefore(nProcessing,oSettings.nTable);return nProcessing}function _fnProcessingDisplay(oSettings,bShow){if(oSettings.oFeatures.bProcessing){var an=oSettings.aanFeatures.r;for(var i=0,iLen=an.length;i0){nCaption=nCaption[0];if(nCaption._captionSide==="top"){nScrollHeadTable.appendChild(nCaption)}else if(nCaption._captionSide==="bottom"&&nTfoot){nScrollFootTable.appendChild(nCaption)}}if(oSettings.oScroll.sX!==""){nScrollHead.style.width=_fnStringToCss(oSettings.oScroll.sX);nScrollBody.style.width=_fnStringToCss(oSettings.oScroll.sX);if(nTfoot!==null){nScrollFoot.style.width=_fnStringToCss(oSettings.oScroll.sX)}$(nScrollBody).scroll(function(e){nScrollHead.scrollLeft=this.scrollLeft;if(nTfoot!==null){nScrollFoot.scrollLeft=this.scrollLeft}})}if(oSettings.oScroll.sY!==""){nScrollBody.style.height=_fnStringToCss(oSettings.oScroll.sY)}oSettings.aoDrawCallback.push({"fn":_fnScrollDraw,"sName":"scrolling"});if(oSettings.oScroll.bInfinite){$(nScrollBody).scroll(function(){if(!oSettings.bDrawing&&$(this).scrollTop()!==0){if($(this).scrollTop()+$(this).height()>$(oSettings.nTable).height()-oSettings.oScroll.iLoadGap){if(oSettings.fnDisplayEnd()nScrollBody.offsetHeight||$(nScrollBody).css('overflow-y')=="scroll")){o.nTable.style.width=_fnStringToCss($(o.nTable).outerWidth()-o.oScroll.iBarWidth)}}else{if(o.oScroll.sXInner!==""){o.nTable.style.width=_fnStringToCss(o.oScroll.sXInner)}else if(iSanityWidth==$(nScrollBody).width()&&$(nScrollBody).height()<$(o.nTable).height()){o.nTable.style.width=_fnStringToCss(iSanityWidth-o.oScroll.iBarWidth);if($(o.nTable).outerWidth()>iSanityWidth-o.oScroll.iBarWidth){o.nTable.style.width=_fnStringToCss(iSanityWidth)}}else{o.nTable.style.width=_fnStringToCss(iSanityWidth)}}iSanityWidth=$(o.nTable).outerWidth();_fnApplyToChildren(zeroOut,anHeadSizers);_fnApplyToChildren(function(nSizer){aApplied.push(_fnStringToCss($(nSizer).width()))},anHeadSizers);_fnApplyToChildren(function(nToSize,i){nToSize.style.width=aApplied[i]},anHeadToSize);$(anHeadSizers).height(0);if(o.nTFoot!==null){_fnApplyToChildren(zeroOut,anFootSizers);_fnApplyToChildren(function(nSizer){aAppliedFooter.push(_fnStringToCss($(nSizer).width()))},anFootSizers);_fnApplyToChildren(function(nToSize,i){nToSize.style.width=aAppliedFooter[i]},anFootToSize);$(anFootSizers).height(0)}_fnApplyToChildren(function(nSizer,i){nSizer.innerHTML="";nSizer.style.width=aApplied[i]},anHeadSizers);if(o.nTFoot!==null){_fnApplyToChildren(function(nSizer,i){nSizer.innerHTML="";nSizer.style.width=aAppliedFooter[i]},anFootSizers)}if($(o.nTable).outerWidth()nScrollBody.offsetHeight||$(nScrollBody).css('overflow-y')=="scroll"))?iSanityWidth+o.oScroll.iBarWidth:iSanityWidth;if(ie67&&(nScrollBody.scrollHeight>nScrollBody.offsetHeight||$(nScrollBody).css('overflow-y')=="scroll")){o.nTable.style.width=_fnStringToCss(iCorrection-o.oScroll.iBarWidth)}nScrollBody.style.width=_fnStringToCss(iCorrection);o.nScrollHead.style.width=_fnStringToCss(iCorrection);if(o.nTFoot!==null){o.nScrollFoot.style.width=_fnStringToCss(iCorrection)}if(o.oScroll.sX===""){_fnLog(o,1,"The table cannot fit into the current element which will cause column"+" misalignment. The table has been drawn at its minimum possible width.")}else if(o.oScroll.sXInner!==""){_fnLog(o,1,"The table cannot fit into the current element which will cause column"+" misalignment. Increase the sScrollXInner value or remove it to allow automatic"+" calculation")}}else{nScrollBody.style.width=_fnStringToCss('100%');o.nScrollHead.style.width=_fnStringToCss('100%');if(o.nTFoot!==null){o.nScrollFoot.style.width=_fnStringToCss('100%')}}if(o.oScroll.sY===""){if(ie67){nScrollBody.style.height=_fnStringToCss(o.nTable.offsetHeight+o.oScroll.iBarWidth)}}if(o.oScroll.sY!==""&&o.oScroll.bCollapse){nScrollBody.style.height=_fnStringToCss(o.oScroll.sY);var iExtra=(o.oScroll.sX!==""&&o.nTable.offsetWidth>nScrollBody.offsetWidth)?o.oScroll.iBarWidth:0;if(o.nTable.offsetHeightnScrollBody.clientHeight||$(nScrollBody).css('overflow-y')=="scroll";nScrollHeadInner.style.paddingRight=bScrolling?o.oScroll.iBarWidth+"px":"0px";if(o.nTFoot!==null){nScrollFootTable.style.width=_fnStringToCss(iOuterWidth);nScrollFootInner.style.width=_fnStringToCss(iOuterWidth);nScrollFootInner.style.paddingRight=bScrolling?o.oScroll.iBarWidth+"px":"0px"}$(nScrollBody).scroll();if(o.bSorted||o.bFiltered){nScrollBody.scrollTop=0}}function _fnApplyToChildren(fn,an1,an2){var index=0,i=0,iLen=an1.length;var nNode1,nNode2;while(itd',nCalcTmp)}var nThs=_fnGetUniqueThs(oSettings,nTheadClone);iCorrector=0;for(i=0;i0){oSettings.aoColumns[i].sWidth=_fnStringToCss(iWidth)}iCorrector++}}var cssWidth=$(nCalcTmp).css('width');oSettings.nTable.style.width=(cssWidth.indexOf('%')!==-1)?cssWidth:_fnStringToCss($(nCalcTmp).outerWidth());nCalcTmp.parentNode.removeChild(nCalcTmp)}if(widthAttr){oSettings.nTable.style.width=_fnStringToCss(widthAttr)}}function _fnScrollingWidthAdjust(oSettings,n){if(oSettings.oScroll.sX===""&&oSettings.oScroll.sY!==""){var iOrigWidth=$(n).width();n.style.width=_fnStringToCss($(n).outerWidth()-oSettings.oScroll.iBarWidth)}else if(oSettings.oScroll.sX!==""){n.style.width=_fnStringToCss($(n).outerWidth())}}function _fnGetWidestNode(oSettings,iCol){var iMaxIndex=_fnGetMaxLenString(oSettings,iCol);if(iMaxIndex<0){return null}if(oSettings.aoData[iMaxIndex].nTr===null){var n=document.createElement('td');n.innerHTML=_fnGetCellData(oSettings,iMaxIndex,iCol,'');return n}return _fnGetTdNodes(oSettings,iMaxIndex)[iCol]}function _fnGetMaxLenString(oSettings,iCol){var iMax=-1;var iMaxIndex=-1;for(var i=0;i/g,"");if(s.length>iMax){iMax=s.length;iMaxIndex=i}}return iMaxIndex}function _fnStringToCss(s){if(s===null){return"0px"}if(typeof s=='number'){if(s<0){return"0px"}return s+"px"}var c=s.charCodeAt(s.length-1);if(c<0x30||c>0x39){return s}return s+"px"}function _fnScrollBarWidth(){var inner=document.createElement('p');var style=inner.style;style.width="100%";style.height="200px";style.padding="0px";var outer=document.createElement('div');style=outer.style;style.position="absolute";style.top="0px";style.left="0px";style.visibility="hidden";style.width="200px";style.height="150px";style.padding="0px";style.overflow="hidden";outer.appendChild(inner);document.body.appendChild(outer);var w1=inner.offsetWidth;outer.style.overflow='scroll';var w2=inner.offsetWidth;if(w1==w2){w2=outer.clientWidth}document.body.removeChild(outer);return(w1-w2)}function _fnSort(oSettings,bApplyClasses){var i,iLen,j,jLen,k,kLen,sDataType,nTh,aaSort=[],aiOrig=[],oSort=DataTable.ext.oSort,aoData=oSettings.aoData,aoColumns=oSettings.aoColumns,oAria=oSettings.oLanguage.oAria;if(!oSettings.oFeatures.bServerSide&&(oSettings.aaSorting.length!==0||oSettings.aaSortingFixed!==null)){aaSort=(oSettings.aaSortingFixed!==null)?oSettings.aaSortingFixed.concat(oSettings.aaSorting):oSettings.aaSorting.slice();for(i=0;i/g,"");nTh=aoColumns[i].nTh;nTh.removeAttribute('aria-sort');nTh.removeAttribute('aria-label');if(aoColumns[i].bSortable){if(aaSort.length>0&&aaSort[0][0]==i){nTh.setAttribute('aria-sort',aaSort[0][1]=="asc"?"ascending":"descending");var nextSort=(aoColumns[i].asSorting[aaSort[0][2]+1])?aoColumns[i].asSorting[aaSort[0][2]+1]:aoColumns[i].asSorting[0];nTh.setAttribute('aria-label',sTitle+(nextSort=="asc"?oAria.sSortAscending:oAria.sSortDescending))}else{nTh.setAttribute('aria-label',sTitle+(aoColumns[i].asSorting[0]=="asc"?oAria.sSortAscending:oAria.sSortDescending))}}else{nTh.setAttribute('aria-label',sTitle)}}oSettings.bSorted=true;$(oSettings.oInstance).trigger('sort',oSettings);if(oSettings.oFeatures.bFilter){_fnFilterComplete(oSettings,oSettings.oPreviousSearch,1)}else{oSettings.aiDisplay=oSettings.aiDisplayMaster.slice();oSettings._iDisplayStart=0;_fnCalculateEnd(oSettings);_fnDraw(oSettings)}}function _fnSortAttachListener(oSettings,nNode,iDataIndex,fnCallback){_fnBindAction(nNode,{},function(e){if(oSettings.aoColumns[iDataIndex].bSortable===false){return}var fnInnerSorting=function(){var iColumn,iNextSort;if(e.shiftKey){var bFound=false;for(var i=0;i0&&sCurrentClass.indexOf(sNewClass)==-1){nTds[i].className=sCurrentClass+" "+sNewClass}}}}function _fnSaveState(oSettings){if(!oSettings.oFeatures.bStateSave||oSettings.bDestroying){return}var i,iLen,bInfinite=oSettings.oScroll.bInfinite;var oState={"iCreate":new Date().getTime(),"iStart":(bInfinite?0:oSettings._iDisplayStart),"iEnd":(bInfinite?oSettings._iDisplayLength:oSettings._iDisplayEnd),"iLength":oSettings._iDisplayLength,"aaSorting":$.extend(true,[],oSettings.aaSorting),"oSearch":$.extend(true,{},oSettings.oPreviousSearch),"aoSearchCols":$.extend(true,[],oSettings.aoPreSearchCols),"abVisCols":[]};for(i=0,iLen=oSettings.aoColumns.length;i4096){for(var i=0,iLen=aCookies.length;i4096){if(aOldCookies.length===0){return}var old=aOldCookies.pop();document.cookie=old.name+"=; expires=Thu, 01-Jan-1970 00:00:01 GMT; path="+aParts.join('/')+"/"}}document.cookie=sFullCookie}function _fnReadCookie(sName){var aParts=window.location.pathname.split('/'),sNameEQ=sName+'_'+aParts[aParts.length-1].replace(/[\/:]/g,"").toLowerCase()+'=',sCookieContents=document.cookie.split(';');for(var i=0;i=0;i--){aRet.push(aoStore[i].fn.apply(oSettings.oInstance,aArgs))}if(sTrigger!==null){$(oSettings.oInstance).trigger(sTrigger,aArgs)}return aRet}var _fnJsonString=(window.JSON)?JSON.stringify:function(o){var sType=typeof o;if(sType!=="object"||o===null){if(sType==="string"){o='"'+o+'"'}return o+""}var sProp,mValue,json=[],bArr=$.isArray(o);for(sProp in o){mValue=o[sProp];sType=typeof mValue;if(sType==="string"){mValue='"'+mValue+'"'}else if(sType==="object"&&mValue!==null){mValue=_fnJsonString(mValue)}json.push((bArr?"":'"'+sProp+'":')+mValue)}return(bArr?"[":"{")+json+(bArr?"]":"}")};function _fnBrowserDetect(oSettings){var n=$('
        '+'
        '+'
        '+'
        '+'
        ')[0];document.body.appendChild(n);oSettings.oBrowser.bScrollOversize=$('#DT_BrowserTest',n)[0].offsetWidth===100?true:false;document.body.removeChild(n)}this.$=function(sSelector,oOpts){var i,iLen,a=[],tr;var oSettings=_fnSettingsFromNode(this[DataTable.ext.iApiIndex]);var aoData=oSettings.aoData;var aiDisplay=oSettings.aiDisplay;var aiDisplayMaster=oSettings.aiDisplayMaster;if(!oOpts){oOpts={}}oOpts=$.extend({},{"filter":"none","order":"current","page":"all"},oOpts);if(oOpts.page=='current'){for(i=oSettings._iDisplayStart,iLen=oSettings.fnDisplayEnd();i=oSettings.fnRecordsDisplay()){oSettings._iDisplayStart-=oSettings._iDisplayLength;if(oSettings._iDisplayStart<0){oSettings._iDisplayStart=0}}if(bRedraw===undefined||bRedraw){_fnCalculateEnd(oSettings);_fnDraw(oSettings)}return oData};this.fnDestroy=function(bRemove){var oSettings=_fnSettingsFromNode(this[DataTable.ext.iApiIndex]);var nOrig=oSettings.nTableWrapper.parentNode;var nBody=oSettings.nTBody;var i,iLen;bRemove=(bRemove===undefined)?false:bRemove;oSettings.bDestroying=true;_fnCallbackFire(oSettings,"aoDestroyCallback","destroy",[oSettings]);if(!bRemove){for(i=0,iLen=oSettings.aoColumns.length;itr>td.'+oSettings.oClasses.sRowEmpty,oSettings.nTable).parent().remove();if(oSettings.nTable!=oSettings.nTHead.parentNode){$(oSettings.nTable).children('thead').remove();oSettings.nTable.appendChild(oSettings.nTHead)}if(oSettings.nTFoot&&oSettings.nTable!=oSettings.nTFoot.parentNode){$(oSettings.nTable).children('tfoot').remove();oSettings.nTable.appendChild(oSettings.nTFoot)}oSettings.nTable.parentNode.removeChild(oSettings.nTable);$(oSettings.nTableWrapper).remove();oSettings.aaSorting=[];oSettings.aaSortingFixed=[];_fnSortingClasses(oSettings);$(_fnGetTrNodes(oSettings)).removeClass(oSettings.asStripeClasses.join(' '));$('th, td',oSettings.nTHead).removeClass([oSettings.oClasses.sSortable,oSettings.oClasses.sSortableAsc,oSettings.oClasses.sSortableDesc,oSettings.oClasses.sSortableNone].join(' '));if(oSettings.bJUI){$('th span.'+oSettings.oClasses.sSortIcon+', td span.'+oSettings.oClasses.sSortIcon,oSettings.nTHead).remove();$('th, td',oSettings.nTHead).each(function(){var jqWrapper=$('div.'+oSettings.oClasses.sSortJUIWrapper,this);var kids=jqWrapper.contents();$(this).append(kids);jqWrapper.remove()})}if(!bRemove&&oSettings.nTableReinsertBefore){nOrig.insertBefore(oSettings.nTable,oSettings.nTableReinsertBefore)}else if(!bRemove){nOrig.appendChild(oSettings.nTable)}for(i=0,iLen=oSettings.aoData.length;i=_fnVisbleColumns(oSettings));if(!bAppend){for(i=iCol;it<"F"ip>'}}else{$.extend(oSettings.oClasses,DataTable.ext.oStdClasses)}$(this).addClass(oSettings.oClasses.sTable);if(oSettings.oScroll.sX!==""||oSettings.oScroll.sY!==""){oSettings.oScroll.iBarWidth=_fnScrollBarWidth()}if(oSettings.iInitDisplayStart===undefined){oSettings.iInitDisplayStart=oInit.iDisplayStart;oSettings._iDisplayStart=oInit.iDisplayStart}if(oInit.bStateSave){oSettings.oFeatures.bStateSave=true;_fnLoadState(oSettings,oInit);_fnCallbackReg(oSettings,'aoDrawCallback',_fnSaveState,'state_save')}if(oInit.iDeferLoading!==null){oSettings.bDeferLoading=true;var tmp=$.isArray(oInit.iDeferLoading);oSettings._iRecordsDisplay=tmp?oInit.iDeferLoading[0]:oInit.iDeferLoading;oSettings._iRecordsTotal=tmp?oInit.iDeferLoading[1]:oInit.iDeferLoading}if(oInit.aaData!==null){bUsePassedData=true}if(oInit.oLanguage.sUrl!==""){oSettings.oLanguage.sUrl=oInit.oLanguage.sUrl;$.getJSON(oSettings.oLanguage.sUrl,null,function(json){_fnLanguageCompat(json);$.extend(true,oSettings.oLanguage,oInit.oLanguage,json);_fnInitialise(oSettings)});bInitHandedOff=true}else{$.extend(true,oSettings.oLanguage,oInit.oLanguage)}if(oInit.asStripeClasses===null){oSettings.asStripeClasses=[oSettings.oClasses.sStripeOdd,oSettings.oClasses.sStripeEven]}iLen=oSettings.asStripeClasses.length;oSettings.asDestroyStripes=[];if(iLen){var bStripeRemove=false;var anRows=$(this).children('tbody').children('tr:lt('+iLen+')');for(i=0;i=oSettings.aoColumns.length){oSettings.aaSorting[i][0]=0}var oColumn=oSettings.aoColumns[oSettings.aaSorting[i][0]];if(oSettings.aaSorting[i][2]===undefined){oSettings.aaSorting[i][2]=0}if(oInit.aaSorting===undefined&&oSettings.saved_aaSorting===undefined){oSettings.aaSorting[i][1]=oColumn.asSorting[0]}for(j=0,jLen=oColumn.asSorting.length;j0&&(oSettings.oScroll.sX!==""||oSettings.oScroll.sY!=="")){tfoot=[document.createElement('tfoot')];this.appendChild(tfoot[0])}if(tfoot.length>0){oSettings.nTFoot=tfoot[0];_fnDetectHeader(oSettings.aoFooter,oSettings.nTFoot)}if(bUsePassedData){for(i=0;i=parseInt(sThat,10)};DataTable.fnIsDataTable=function(nTable){var o=DataTable.settings;for(var i=0;i'+oLang.sPrevious+''+''+oLang.sNext+'':''+'';$(nPaging).append(sAppend);var els=$('a',nPaging);var nPrevious=els[0],nNext=els[1];oSettings.oApi._fnBindAction(nPrevious,{action:"previous"},fnClickHandler);oSettings.oApi._fnBindAction(nNext,{action:"next"},fnClickHandler);if(!oSettings.aanFeatures.p){nPaging.id=oSettings.sTableId+'_paginate';nPrevious.id=oSettings.sTableId+'_previous';nNext.id=oSettings.sTableId+'_next';nPrevious.setAttribute('aria-controls',oSettings.sTableId);nNext.setAttribute('aria-controls',oSettings.sTableId)}},"fnUpdate":function(oSettings,fnCallbackDraw){if(!oSettings.aanFeatures.p){return}var oClasses=oSettings.oClasses;var an=oSettings.aanFeatures.p;var nNode;for(var i=0,iLen=an.length;i'+oLang.sFirst+''+''+oLang.sPrevious+''+''+''+oLang.sNext+''+''+oLang.sLast+'');var els=$('a',nPaging);var nFirst=els[0],nPrev=els[1],nNext=els[2],nLast=els[3];oSettings.oApi._fnBindAction(nFirst,{action:"first"},fnClickHandler);oSettings.oApi._fnBindAction(nPrev,{action:"previous"},fnClickHandler);oSettings.oApi._fnBindAction(nNext,{action:"next"},fnClickHandler);oSettings.oApi._fnBindAction(nLast,{action:"last"},fnClickHandler);if(!oSettings.aanFeatures.p){nPaging.id=oSettings.sTableId+'_paginate';nFirst.id=oSettings.sTableId+'_first';nPrev.id=oSettings.sTableId+'_previous';nNext.id=oSettings.sTableId+'_next';nLast.id=oSettings.sTableId+'_last'}},"fnUpdate":function(oSettings,fnCallbackDraw){if(!oSettings.aanFeatures.p){return}var iPageCount=DataTable.ext.oPagination.iFullNumbersShowPages;var iPageCountHalf=Math.floor(iPageCount/2);var iPages=Math.ceil((oSettings.fnRecordsDisplay())/oSettings._iDisplayLength);var iCurrentPage=Math.ceil(oSettings._iDisplayStart/oSettings._iDisplayLength)+1;var sList="";var iStartButton,iEndButton,i,iLen;var oClasses=oSettings.oClasses;var anButtons,anStatic,nPaginateList,nNode;var an=oSettings.aanFeatures.p;var fnBind=function(j){oSettings.oApi._fnBindAction(this,{"page":j+iStartButton-1},function(e){oSettings.oApi._fnPageChange(oSettings,e.data.page);fnCallbackDraw(oSettings);e.preventDefault()})};if(oSettings._iDisplayLength===-1){iStartButton=1;iEndButton=1;iCurrentPage=1}else if(iPages=(iPages-iPageCountHalf)){iStartButton=iPages-iPageCount+1;iEndButton=iPages}else{iStartButton=iCurrentPage-Math.ceil(iPageCount/2)+1;iEndButton=iStartButton+iPageCount-1}for(i=iStartButton;i<=iEndButton;i++){sList+=(iCurrentPage!==i)?''+oSettings.fnFormatNumber(i)+'':''+oSettings.fnFormatNumber(i)+''}for(i=0,iLen=an.length;iy)?1:0))},"string-desc":function(x,y){return((xy)?-1:0))},"html-pre":function(a){return a.replace(/<.*?>/g,"").toLowerCase()},"html-asc":function(x,y){return((xy)?1:0))},"html-desc":function(x,y){return((xy)?-1:0))},"date-pre":function(a){var x=Date.parse(a);if(isNaN(x)||x===""){x=Date.parse("01/01/1970 00:00:00")}return x},"date-asc":function(x,y){return x-y},"date-desc":function(x,y){return y-x},"numeric-pre":function(a){return(a=="-"||a==="")?0:a*1},"numeric-asc":function(x,y){return x-y},"numeric-desc":function(x,y){return y-x}});$.extend(DataTable.ext.aTypes,[function(sData){if(typeof sData==='number'){return'numeric'}else if(typeof sData!=='string'){return null}var sValidFirstChars="0123456789-";var sValidChars="0123456789.";var Char;var bDecimal=false;Char=sData.charAt(0);if(sValidFirstChars.indexOf(Char)==-1){return null}for(var i=1;i')!=-1){return'html'}return null}]);$.fn.DataTable=DataTable;$.fn.dataTable=DataTable;$.fn.dataTableSettings=DataTable.settings;$.fn.dataTableExt=DataTable.ext}))}(window,document)); \ No newline at end of file diff --git a/docroot/sites/all/modules/contrib/table_trash/table_trash.admin.inc b/docroot/sites/all/modules/contrib/table_trash/table_trash.admin.inc new file mode 100644 index 00000000..6f7e4a8f --- /dev/null +++ b/docroot/sites/all/modules/contrib/table_trash/table_trash.admin.inc @@ -0,0 +1,328 @@ + 'fieldset', + '#collapsible' => FALSE, + '#title' => t('Table decorations on this site'), + // The following id refers to the #ajax wrappers below. + '#prefix' => '
        ', + '#suffix' => '
        ', + ); + $form['decorations']['#attached']['css'][] = drupal_get_path('module', 'table_trash') . '/css/table_trash.admin.css'; + + for ($i = 1; $i <= $form_state['num-decorations']; $i++) { + $form['decorations'][$i] = array( + '#type' => 'fieldset', + '#collapsible' => TRUE, + '#title' => t('Table decoration #@no', array('@no' => $i)), + ); + $decoration_params = $decorations[$i]['decoration-params']; + $form['decorations'][$i]['decoration-params'] = array( + '#type' => 'markup', + '#prefix' => '
        ', + '#suffix' => '
        ', + ); + $form['decorations'][$i]['decoration-params']['search-box'] = array( + '#type' => 'checkbox', + '#title' => t('Display search-box'), + '#default_value' => isset($decoration_params['search-box']) ? $decoration_params['search-box'] : TRUE, + '#description' => t('The search-box allows the visitor to filter the table by keywords they enter.'), + ); + $form['decorations'][$i]['decoration-params']['column-reorder'] = array( + '#type' => 'checkbox', + '#title' => t('Reorder and/or resize columns'), + '#default_value' => isset($decoration_params['column-reorder']) ? $decoration_params['column-reorder'] : TRUE, + '#description' => t('Reposition and adjust widths of columns by clicking and dragging the headers.'), + ); + $form['decorations'][$i]['decoration-params']['export-buttons'] = array( + '#type' => 'checkbox', + '#title' => t('Add export buttons'), + '#default_value' => isset($decoration_params['export-buttons']) ? $decoration_params['export-buttons'] : TRUE, + '#description' => t('Copy-to-clipboard, CSV, Excel, PDF, Print.'), + ); + $form['decorations'][$i]['decoration-params']['retrieve-data'] = array( + '#type' => 'checkbox', + '#title' => t('Allow AJAX updates of targeted tables'), + '#default_value' => isset($decoration_params['retrieve-data']) ? $decoration_params['retrieve-data'] : FALSE, + '#description' => t('Tick if you get error messages using Exposed Filters on tabular Views with Use AJAX: Yes. Do not tick if you do not have any issues, as there is a small performance penalty to pay.'), + ); + $form['decorations'][$i]['decoration-params']['pager-style'] = array( + '#type' => 'select', + '#multiple' => FALSE, + '#title' => t('Pager style'), + '#options' => array( + '' => t('No pager'), + 'two_button' => t('Prev/Next buttons only'), + 'full_numbers' => t('Prev/Next, First/Last and page counts'), + ), + '#default_value' => isset($decoration_params['pager-style']) ? $decoration_params['pager-style'] : '', + '#description' => t('If you use this client-side pager, it is recommended you switch off the server-side pager (as provided by Views).'), + ); + $form['decorations'][$i]['decoration-params']['page-height'] = array( + '#type' => 'textfield', + '#size' => 4, + '#maxlength' => 4, + '#title' => t('Page height'), + '#default_value' => isset($decoration_params['page-height']) ? $decoration_params['page-height'] : '', + '#description' => t('If paged, number of rows per page.'), + ); + $form['decorations'][$i]['decoration-params']['dont-sort-columns'] = array( + '#type' => 'textfield', + '#size' => 32, + '#title' => t('Columns NOT sortable'), + '#default_value' => isset($decoration_params['dont-sort-columns']) ? $decoration_params['dont-sort-columns'] : '', + '#description' => t('All columns are sortable by default. Enter a comma-separated list of column numbers for which client-side sorting is to be disabled. The leftmost column is number 1. Enter 0 to switch off column-sorting altogether.'), + ); + $form['decorations'][$i]['decoration-params']['x-scroll'] = array( + '#type' => 'textfield', + '#size' => 4, + '#title' => t('Oversize and scroll horizontally'), + '#default_value' => isset($decoration_params['x-scroll']) ? $decoration_params['x-scroll'] : '', + '#description' => t('Enter the desired width of the widened table. May be expressed in pixels or as a percentage of its original width. Example: 150%'), + ); + $form['decorations'][$i]['decoration-params']['fixed-left-columns'] = array( + '#type' => 'textfield', + '#size' => 4, + '#maxlength' => 2, + '#title' => t('Fix left column(s)'), + '#default_value' => isset($decoration_params['fixed-left-columns']) ? $decoration_params['fixed-left-columns'] : '', + '#description' => t('Works in conjunction with Oversize and scroll horizontally. Enter the number of left columns to fix in position when scrolling horizontally. Example: 1'), + ); + $form['decorations'][$i]['decoration-params']['fixed-header'] = array( + '#type' => 'checkbox', + '#title' => t('Fix table header on scroll'), + '#default_value' => isset($decoration_params['fixed-header']) ? $decoration_params['fixed-header'] : FALSE, + '#description' => t('Fix the header to the top of the window when vertically scrolling tall tables. Cannot be used with Oversize and scroll horizontally or AJAX.'), + ); + + $form['decorations'][$i]['decoration-params']['responsive'] = array( + '#type' => 'fieldset', + '#collapsible' => TRUE, + '#collapsed' => TRUE, + '#title' => t('Responsive tables feature'), + '#description' => t('Responsively hides selected columns on small windows. Hidden cell content is revealed when the "expand" icon is clicked. Does not work in combination with Oversize and scroll horizontally.'), + ); + $responsive = $decoration_params['responsive']; + $form['decorations'][$i]['decoration-params']['responsive']['responsive-expand-col'] = array( + '#type' => 'textfield', + '#size' => 4, + '#title' => t('"Expand" column'), + '#default_value' => isset($responsive['responsive-expand-col']) ? $responsive['responsive-expand-col'] : '', + '#description' => t("Typically you'd pick the title column for this. The leftmost column is number 1. Leave empty to disallow tables from responding to small window-sizes."), + ); + $form['decorations'][$i]['decoration-params']['responsive']['responsive-collapse-cols-phone'] = array( + '#type' => 'textfield', + '#size' => 32, + '#maxsize' => 256, + '#title' => t('Columns to hide when width of window is phone-size'), + '#default_value' => isset($responsive['responsive-collapse-cols-phone']) ? $responsive['responsive-collapse-cols-phone'] : '', + ); + $form['decorations'][$i]['decoration-params']['responsive']['responsive-collapse-cols-tablet'] = array( + '#type' => 'textfield', + '#size' => 32, + '#maxsize' => 256, + '#title' => t('Columns to hide when width of window is tablet-size'), + '#default_value' => isset($responsive['responsive-collapse-cols-tablet']) ? $responsive['responsive-collapse-cols-tablet'] : '', + '#description' => t('This is usually a subset of the columns specified for phone-sized windows.'), + ); + + $form['decorations'][$i]['pages-and-selector'] = array( + '#type' => 'markup', + '#prefix' => '
        ', + '#suffix' => '
        ', + ); + $pages_and_selector = $decorations[$i]['pages-and-selector']; + $form['decorations'][$i]['pages-and-selector']['include-pages'] = array( + '#type' => 'textarea', + '#rows' => 2, + '#title' => t('Pages to be adorned with all of the above'), + '#default_value' => isset($pages_and_selector['include-pages']) ? $pages_and_selector['include-pages'] : TABLE_TRASH_DEFAULT_PAGE_INCLUSIONS, + '#description' => t("Enter relative paths, one per line. Do not start with a slash. You may use path aliases. <front> means the front page. The asterisk * is the wildcard character, i.e. admin/* denotes all pages that have a path starting with admin/"), + '#required' => TRUE, + ); + $form['decorations'][$i]['pages-and-selector']['exclude-pages'] = array( + '#type' => 'textarea', + '#rows' => 3, + '#title' => t('Exceptions: pages excluded from wildcards on the left'), + '#default_value' => isset($pages_and_selector['exclude-pages']) ? $pages_and_selector['exclude-pages'] : TABLE_TRASH_DEFAULT_PAGE_EXCLUSIONS, + '#description' => t('One relative path per line.'), + ); + $form['decorations'][$i]['pages-and-selector']['table-selector'] = array( + '#type' => 'textfield', + '#size' => 32, + '#title' => t('CSS-selector for tables targeted'), + '#default_value' => isset($pages_and_selector['table-selector']) ? $pages_and_selector['table-selector'] : '', + '#description' => t('Empty defaults to @default-selector and will usually be ok. If you want to decorate say a Views block and a Views attachment, but no other tables on that page, then target the individual tables. Like this: .view-display-id-block_1 table, .view-display-id-attachment_1 table', array( + '@views' => url('http://drupal.org/project/views'), + '@default-selector' => TABLE_TRASH_DEFAULT_TABLE_SELECTOR) + ), + ); + } + + $form['decorations']['add-another'] = array( + '#type' => 'submit', + '#value' => empty($form_state['num-decorations']) ? t('Add table decoration') : t('Add another table decoration'), + '#weight' => 1, + '#submit' => array('_table_trash_add_decoration_submit'), + '#ajax' => array( + 'callback' => '_table_trash_decoration_js', + 'wrapper' => 'decorations-wrapper', + // 'fade', 'none' or 'slide'. + 'effect' => 'fade', + // 'fast', 'slow' or number of millisec. + 'speed' => 'slow', + ), + ); + if ($form_state['num-decorations'] > 0) { + $form['decorations']['remove'] = array( + '#type' => 'submit', + '#value' => t('Remove last decoration'), + '#weight' => 2, + '#submit' => array('_table_trash_remove_decoration_submit'), + '#ajax' => array( + 'callback' => '_table_trash_decoration_js', + 'wrapper' => 'decorations-wrapper', + // 'fade', 'none' or 'slide'. + 'effect' => 'fade', + // 'fast', 'slow' or number of millisec. + 'speed' => 'fast', + ), + ); + } + + $form['global-settings'] = array( + '#type' => 'fieldset', + '#collapsible' => TRUE, + '#collapsed' => TRUE, + '#title' => t('Global settings'), + ); + $global_settings = variable_get('table_trash_global_settings', array()); + + $form['global-settings']['responsive'] = array( + '#type' => 'markup', + '#prefix' => '
        ', + '#suffix' => '
        ', + ); + $form['global-settings']['responsive']['responsive-breakpoint-phone'] = array( + '#type' => 'textfield', + '#size' => 4, + '#maxlength' => 4, + '#field_suffix' => t('px'), + '#title' => t('Responsive width breakpoint for phone-sized windows'), + '#default_value' => isset($global_settings['responsive']['responsive-breakpoint-phone']) ? $global_settings['responsive']['responsive-breakpoint-phone'] : '', + '#description' => t('The default width for phones is %px.', array('%px' => TABLE_TRASH_DEFAULT_BREAKPOINT_PHONE)), + ); + $form['global-settings']['responsive']['responsive-breakpoint-tablet'] = array( + '#type' => 'textfield', + '#size' => 4, + '#maxlength' => 4, + '#field_suffix' => t('px'), + '#title' => t('Responsive width breakpoint for tablet-sized windows'), + '#default_value' => isset($global_settings['responsive']['responsive-breakpoint-tablet']) ? $global_settings['responsive']['responsive-breakpoint-tablet'] : '', + '#description' => t('The default width for tablets is %px.', array('%px' => TABLE_TRASH_DEFAULT_BREAKPOINT_TABLET)), + ); + + $form['global-settings']['use-bug-fixed-library'] = array( + '#type' => 'checkbox', + '#title' => t('Use the bug-fixed variants of the required JS libraries.'), + '#default_value' => isset($global_settings['use-bug-fixed-library']) ? $global_settings['use-bug-fixed-library'] : TRUE, + '#description' => t('The bug-fixed parts come included with this module. They do not need to be downloaded. However you still need the original DataTables JS libraries as well.'), + ); + $form['global-settings']['use-datatables-css'] = array( + '#type' => 'checkbox', + '#title' => t('Add native DataTables styling'), + '#default_value' => isset($global_settings['use-datatables-css']) ? $global_settings['use-datatables-css'] : TRUE, + ); + $form['global-settings']['use-module-css'] = array( + '#type' => 'checkbox', + '#title' => t('Add Table Trash styling'), + '#default_value' => isset($global_settings['use-module-css']) ? $global_settings['use-module-css'] : TRUE, + ); + + $form['actions']['#type'] = 'actions'; + $form['actions']['submit'] = array( + '#type' => 'submit', + '#value' => t('Save configuration'), + ); + $form['#submit'][] = 'table_trash_admin_configure_form_submit'; + $form['#theme'] = 'system_settings_form'; + return $form; +} + +/** + * Submit handler for the "Add another decoration" button. + * + * Increments the counter and forces a form rebuild. + */ +function _table_trash_add_decoration_submit($form, &$form_state) { + $form_state['num-decorations']++; + $form_state['rebuild'] = TRUE; +} + +/** + * Submit handler for the "Remove" button. + * + * Decrements the counter and forces a form rebuild. + */ +function _table_trash_remove_decoration_submit($form, &$form_state) { + if ($form_state['num-decorations'] > 0) { + $form_state['num-decorations']--; + $form_state['rebuild'] = TRUE; + } +} + +/** + * Ajax callback in response to new rows. + * + * At this point the $form has already been rebuilt. All we have to do here is + * tell AJAX what part of the browser form needs to be updated. + */ +function _table_trash_decoration_js($form, &$form_state) { + // Return the updated table, so that ajax.inc can issue commands to the + // browser to update only the targeted sections of the page. + return $form['decorations']; +} + +/** + * Form submit handler for admin settings. + * + * @param array $form + * The form + * @param array $form_state + * The form state + */ +function table_trash_admin_configure_form_submit($form, &$form_state) { + + // Clear out the form from stuff, like buttons, we do not wish to save. + // @todo recursively sanitize (check_plain) all leaf values?) + form_state_values_clean($form_state); + + variable_set('table_trash_decorations', $form_state['values']['decorations']); + variable_set('table_trash_global_settings', $form_state['values']['global-settings']); + + // A change in the library files to be included requires clearing of the + // Libraries cache. A call to libraries_flush_caches() is not sufficient here. + cache_clear_all('*', 'cache_libraries', TRUE); + + drupal_set_message(t('Table decorations and global configuration have been saved.')); +} diff --git a/docroot/sites/all/modules/contrib/table_trash/table_trash.info b/docroot/sites/all/modules/contrib/table_trash/table_trash.info new file mode 100644 index 00000000..788c551c --- /dev/null +++ b/docroot/sites/all/modules/contrib/table_trash/table_trash.info @@ -0,0 +1,13 @@ +name = Table Trash +description = Decorates <tables> with client-side bells and whistles for mobile responsiveness, filtering, sorting, paging, scrolling and column rearrangement. +core = 7.x +package = Trash +dependencies[] = libraries +configure = admin/config/content/table_trash + +; Information added by Drupal.org packaging script on 2014-11-16 +version = "7.x-1.0-beta4" +core = "7.x" +project = "table_trash" +datestamp = "1416112082" + diff --git a/docroot/sites/all/modules/contrib/table_trash/table_trash.install b/docroot/sites/all/modules/contrib/table_trash/table_trash.install new file mode 100644 index 00000000..dfb1871f --- /dev/null +++ b/docroot/sites/all/modules/contrib/table_trash/table_trash.install @@ -0,0 +1,84 @@ +table decoration and you're done.", array( + '@url' => url('admin/config/content/table_trash')) + )); +} + +/** + * Implements hook_requirements(). + */ +function table_trash_requirements($phase) { + $requirements = array(); + if ($phase != 'runtime') { + return $requirements; + } + $global_settings = variable_get('table_trash_global_settings', array()); + $library_variant = empty($global_settings['use-bug-fixed-library']) ? NULL : 'bug-fixed'; + + $base_library = libraries_load('datatables', $library_variant); + $responsive_library = libraries_load('datatables-responsive', $library_variant); + + // Is this required for the runtime phase? + $t = get_t(); + + $requirements['table_trash'] = array( + 'title' => $t('Table Trash'), + 'value' => $t('Library variant requested: %variant.', array( + '%variant' => empty($library_variant) ? $t('original') : $t('bug-fixed'), + )), + 'severity' => REQUIREMENT_OK, + ); + if (empty($base_library['error'])) { + $requirements['table_trash']['value'] .= '
        ' . $t('@name library version %version installed.', array( + '@name' => $base_library['name'], + '%version' => $base_library['version'], + )); + } + else { + $requirements['table_trash']['value'] .= ' ' . $base_library['error message']; + $requirements['table_trash']['severity'] = REQUIREMENT_ERROR; + } + if (empty($responsive_library['error'])) { + $requirements['table_trash']['value'] .= '
        ' . $t('@name library version %version installed.', array( + '@name' => $responsive_library['name'], + '%version' => $responsive_library['version'], + )); + } + else { + $requirements['table_trash']['value'] .= '
        ' . $responsive_library['error message']; + $requirements['table_trash']['severity'] = REQUIREMENT_ERROR; + } + $colreorder_js = $base_library['library path'] . '/' . TABLE_TRASH_COLREORDER_WITH_RESIZE_JS; + if (!$colreorder_with_resize = file_exists($colreorder_js)) { + $colreorder_js = $base_library['library path'] . '/' . TABLE_TRASH_COLREORDER_JS; + $colreorder_error = !file_exists($colreorder_js); + } + if (empty($colreorder_error)) { + $requirements['table_trash']['value'] .= '
        ' . ($colreorder_with_resize + ? $t('Column Reorder JS enabled with resize option, installed through %file', array('%file' => $colreorder_js)) + : $t('Column Reorder JS enabled without resize option, installed through %file', array('%file' => $colreorder_js))); + } + else { + $requirements['table_trash']['value'] .= '
        ' . $t('Column Reorder JS not found.'); + $requirements['table_trash']['severity'] = REQUIREMENT_ERROR; + } + return $requirements; +} + +/** + * Implements hook_uninstall(). + */ +function table_trash_uninstall() { + variable_del('table_trash_decorations'); + variable_del('table_trash_global_settings'); +} diff --git a/docroot/sites/all/modules/contrib/table_trash/table_trash.module b/docroot/sites/all/modules/contrib/table_trash/table_trash.module new file mode 100644 index 00000000..bff56798 --- /dev/null +++ b/docroot/sites/all/modules/contrib/table_trash/table_trash.module @@ -0,0 +1,308 @@ + for s that do not have it? + } + } + } + } +} + +/** + * Implements hook_menu(). + */ +function table_trash_menu() { + // Put the administrative settings under Content on the Configuration page. + $items['admin/config/content/table_trash'] = array( + 'title' => 'Table Trash', + 'description' => 'Configure table decorations and global settings.', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('table_trash_admin_configure'), + 'access arguments' => array('configure table decorations'), + 'file' => 'table_trash.admin.inc', + ); + return $items; +} + +/** + * Implements hook_permission(). + */ +function table_trash_permission() { + return array( + 'configure table decorations' => array( + 'title' => t('Add and configure table decorations'), + ), + ); +} + +/** + * Implements hook_help(). + */ +function table_trash_help($path, $arg) { + switch ($path) { + case 'admin/help#table_trash': + $t = t('Configuration instructions and tips are in this README file.
        Known issues and solutions may be found on the Table Trash project page.', array( + '@README' => url(drupal_get_path('module', 'table_trash') . '/README.txt'), + '@table_trash' => url('http://drupal.org/project/table_trash'))); + break; + + case 'admin/config/content/table_trash': + $t = t('A table decoration consists of a set of table features, selected below, to be added to one or more tables on this site. Apart from the features you wish to include in each decoration, you specify the pages and tables the decoration applies to.'); + break; + } + return empty($t) ? '' : '

        ' . $t . '

        '; +} + +/** + * Implements hook_libraries_info_file_paths(). + * + * Using the .libraries.info files instead of hook_libraries_info(). + */ +function table_trash_libraries_info_file_paths() { + return array(drupal_get_path('module', 'table_trash') . '/libraries'); +} + +/** + * Implements hook_libraries_info_alter(). + * + * This is a dynamic appendix to the .libraries.info files. + * Through the configuration page, the user may opt for a variant. + * They can also drop in an alternative version of ColReorder.js. + */ +function table_trash_libraries_info_alter(&$libraries) { + if (!isset($libraries['datatables'])) { + return; + } + // The packaging script unfortunately adds to the .libraries.info file the + // version number of the table_trash module in the same way as it does for + // table_trash.info. This is bad news for us, as once set, the Libraries + // module will not attempt to read it from the specified .js files. So unset. + unset($libraries['datatables']['version']); + unset($libraries['datatables-responsive']['version']); + + $global_settings = variable_get('table_trash_global_settings', array()); + $variant = empty($global_settings['use-bug-fixed-library']) ? NULL : 'bug-fixed'; + + // Based on the variant, the version number is found in a different file. + // Not only is the file where we obtain the version different, so is its path. + // We deal with this in our own version callback + // table_trash_libraries_get_version() + $libraries['datatables']['version callback'] = 'table_trash_libraries_get_version'; + $libraries['datatables']['version arguments']['file'] = ($variant == 'bug-fixed') + ? 'libraries/variants/js/jquery.dataTables.bugfixed.min.js' + : 'media/js/jquery.dataTables.min.js'; + + $libraries['datatables-responsive']['version callback'] = 'table_trash_libraries_get_version'; + $libraries['datatables-responsive']['version arguments']['file'] = ($variant == 'bug-fixed') + ? 'libraries/variants/js/datatables.responsive.0.1.5-patched.js' + : 'files/1/js/datatables.responsive.js'; + + $colreorder_with_resize = file_exists(libraries_get_path('datatables') . '/' . TABLE_TRASH_COLREORDER_WITH_RESIZE_JS); + $colreorder_js = $colreorder_with_resize ? TABLE_TRASH_COLREORDER_WITH_RESIZE_JS : TABLE_TRASH_COLREORDER_JS; + $libraries['datatables']['files']['js'][] = $colreorder_js; + $libraries['datatables']['variants']['bug-fixed']['files']['js'][] = $colreorder_js; + + if (empty($global_settings['use-datatables-css'])) { + unset($libraries['datatables']['files']['css']); + unset($libraries['datatables']['variants']['bug-fixed']['files']['css']); + } + if (empty($global_settings['use-module-css'])) { + unset($libraries['datatables']['integration files']['table_trash']['css']); + unset($libraries['datatables']['variants']['bug-fixed']['integration files']['table_trash']['css']); + } +} + +/** + * Override of libraries_get_version(). + * + * This was necessary only because of the way the Libraries module works. While + * accepting 'variants' it assumes that each variant is always retrieved from a + * file in the same 'library path'. In our case, when using th 'bug-fixed' + * variant, the version comes from a file in the 'bug-fixed' library path, this + * being the path to the table_trash module. + * + * @param array $library + * contains the 'library path' that we may want to change in case of a variant + * @param arrau $options + * regexp pattern matching options + * + * @return array + * string containing the version of the library. + */ +function table_trash_libraries_get_version($library, $options) { + $global_settings = variable_get('table_trash_global_settings', array()); + if (!empty($global_settings['use-bug-fixed-library'])) { + $library['library path'] = drupal_get_path('module', 'table_trash'); + } + return libraries_get_version($library, $options); +} + +/** + * Adds a tag to the . + * + * Add inside the tag the following meta-tag essential for mobiles: + * + */ +function table_trash_add_html_head() { + $data = array( + '#tag' => 'meta', + '#attributes' => array( + 'name' => 'viewport', + 'content' => 'initial-scale=1', + ), + ); + drupal_add_html_head($data, 'system_meta_viewport'); +} + +/** + * Set up an array of configurations for the DataTables JS call. + * + * @param array $decoration + * An array of DataTable settings, indexed by the table selector + */ +function table_trash_pass_datatables_selectors_and_config($decoration) { + + $global_settings = variable_get('table_trash_global_settings', array()); + $library_variant = empty($global_settings['use-bug-fixed-library']) ? NULL : 'bug-fixed'; + + // Equivalent to core's drupal_add_library('table_trash', 'datatables'), + // this loads what is set up in the .libraries.info file, rather than core's + // hook_library(). The format of the array returned is similar. + $base_library = libraries_load('datatables', $library_variant); + if (!empty($base_library['error'])) { + drupal_set_message($base_library['error message'], 'warning'); + } + + $table_selector = empty($decoration['pages-and-selector']['table-selector']) ? TABLE_TRASH_DEFAULT_TABLE_SELECTOR : $decoration['pages-and-selector']['table-selector']; + $decoration_params = empty($decoration['decoration-params']) ? array() : $decoration['decoration-params']; + $dont_sort_columns = isset($decoration_params['dont-sort-columns']) ? trim($decoration_params['dont-sort-columns']) : ''; + + /* 'sDom' is used to specify where in the DOM to inject the various controls + * DataTables adds to the page. For example you might want the pagination + * controls at the top of the table. The following order is the default: + * + * 'l' - length changing + * 'f' - filtering input + * 'r' - processing + * 't' - the table + * 'i' - information + * 'p' - pagination + * + * @see http://datatables.net/usage/options#sDom + */ + $settings[$table_selector] = array( + 'sDom' => 'lfrtip', + 'bFilter' => isset($decoration_params['search-box']) ? $decoration_params['search-box'] : TRUE, + 'bSort' => $dont_sort_columns !== '0', + 'bPaginate' => !empty($decoration_params['pager-style']) && !empty($decoration_params['page-height']), + 'sPaginationType' => isset($decoration_params['pager-style']) ? $decoration_params['pager-style'] : '', + 'iDisplayLength' => empty($decoration_params['page-height']) ? -1 : (int) $decoration_params['page-height'], + 'bLengthChange' => FALSE, + 'bRetrieve' => !empty($decoration_params['retrieve-data']), + 'bDestroy' => TRUE, + ); + if (!empty($dont_sort_columns)) { + $dont_sort_columns = explode(',', $dont_sort_columns); + foreach ($dont_sort_columns as &$column_number) { + // DataTables starts numbering at zero, whereas we start at 1. + --$column_number; + } + $settings[$table_selector]['aoColumnDefs'] = array( + array( + 'bSortable' => FALSE, + 'aTargets' => $dont_sort_columns, + ), + ); + } + if (!empty($decoration_params['x-scroll'])) { + $settings[$table_selector]['sScrollX'] = '100%'; + $settings[$table_selector]['sScrollXInner'] = $decoration_params['x-scroll']; + $settings[$table_selector]['bScrollCollapse'] = FALSE; + } + // DataTables ColReorder plugin. + if (!empty($decoration_params['column-reorder'])) { + $settings[$table_selector]['sDom'] .= 'R'; + } + // DataTables FixedColumns plugin. + if (!empty($decoration_params['fixed-left-columns'])) { + $settings[$table_selector]['iFixedLeftColumns'] = (int) $decoration_params['fixed-left-columns']; + } + // DataTables FixedHeader plugin. + $settings[$table_selector]['bFixedHeader'] = !empty($decoration_params['fixed-header']); + // DataTables TableTools plugin. + if (!empty($decoration_params['export-buttons'])) { + // Insert buttons before anything else, via T and
        + $settings[$table_selector]['sDom'] = 'T<"clear">' . $settings[$table_selector]['sDom']; + $lib_path = base_path() . libraries_get_path('datatables'); + $settings[$table_selector]['oTableTools'] = array( + 'sSwfPath' => "$lib_path/extras/TableTools/media/swf/copy_csv_xls_pdf.swf", + ); + } + + // DataTables-Responsive library. + if (!empty($decoration_params['responsive']['responsive-expand-col'])) { + $responsive_library = libraries_load('datatables-responsive', $library_variant); + if (!empty($responsive_library['error'])) { + drupal_set_message($responsive_library['error message'], 'warning'); + } + $responsive_params = $decoration_params['responsive']; + $settings[$table_selector]['iExpandCol'] = (int) $responsive_params['responsive-expand-col'] - 1; + $settings[$table_selector]['iBreakpointPhone'] = empty($global_settings['responsive']['responsive-breakpoint-phone']) ? TABLE_TRASH_DEFAULT_BREAKPOINT_PHONE : (int) $global_settings['responsive']['responsive-breakpoint-phone']; + $settings[$table_selector]['iBreakpointTablet'] = empty($global_settings['responsive']['responsive-breakpoint-tablet']) ? TABLE_TRASH_DEFAULT_BREAKPOINT_TABLET : (int) $global_settings['responsive']['responsive-breakpoint-tablet']; + + // Convert comma-separated string of column numbers into array. + $settings[$table_selector]['aiHideColsPhone'] = $settings[$table_selector]['aiHideColsTablet'] = array(); + if (!empty($responsive_params['responsive-collapse-cols-phone'])) { + $settings[$table_selector]['aiHideColsPhone'] = explode(',', $responsive_params['responsive-collapse-cols-phone']); + foreach ($settings[$table_selector]['aiHideColsPhone'] as &$column_number) { + --$column_number; + } + } + if (!empty($responsive_params['responsive-collapse-cols-tablet'])) { + $settings[$table_selector]['aiHideColsTablet'] = explode(',', $responsive_params['responsive-collapse-cols-tablet']); + foreach ($settings[$table_selector]['aiHideColsTablet'] as &$column_number) { + --$column_number; + } + } + } + + drupal_add_js(array('table_trash' => $settings), array('type' => 'setting')); +} diff --git a/docroot/sites/all/modules/contrib/views_aggregator/LICENSE.txt b/docroot/sites/all/modules/contrib/views_aggregator/LICENSE.txt new file mode 100644 index 00000000..d159169d --- /dev/null +++ b/docroot/sites/all/modules/contrib/views_aggregator/LICENSE.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 2 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, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/docroot/sites/all/modules/contrib/views_aggregator/README.txt b/docroot/sites/all/modules/contrib/views_aggregator/README.txt new file mode 100644 index 00000000..2b58f279 --- /dev/null +++ b/docroot/sites/all/modules/contrib/views_aggregator/README.txt @@ -0,0 +1,185 @@ + +VIEWS AGGREGATOR PLUS +===================== +Because the Views and ViewsCalc modules rely on the database to perform +aggregation, you only have limited options at your disposal. That is where this +module comes in. Unlike Views and ViewsCalc, this module: +o enumerates group members (see https://drupal.org/node/1300900) +o produces tallies (textual histograms, see http://drupal.org/node/1256716) +o can aggregate on ViewsPHP code-snippets +o can filter out rows on regular expressions (regexp) +o can aggregate across entire columns (e.g show column data range at the top) +o lets you add your own custom aggregation functions to the existing set +o aggregation functions can take parameters, as currently employed by "Filter + rows", "Count" and "Label" +o on Views of type "Webform submissions" the module supports the field "Webform + submission data: Value" (requires Webform 7.x-4.x) + +Basics Recap: what is aggregation again? +---------------------------------------- +In the context of Views and this module, aggregation is the process of grouping +and collapsing result rows on the identical values of ONE column, while at the +same time applying "summary" functions on other columns. For example you can +group the result set on a taxonomy term, so that all rows sharing the same +value of the taxonomy column are represented as single rows, with aggregation +functions, like TALLY, SUM, or ENUMERATE applied to the remaining columns. + +Example +------- +Say the original View based on raw database results looks like below. + +Industry|Company Name | Turnover | +--------|-------------|--------------| +IT | AquiB | $25,000,000 | +Clothing| Cenneton | $99,000,000 | +Food | Heiny | $66,000,000 | +IT |PreviousBest | $ 5,000,000 | +Food | McRonalds | $500,000,000 | + +Then with the grouping taking place on, say Industry, and aggregation functions +COUNT and SUM applied on Company Name and Turnover respectively, the final +result will display like below. A descending sort was applied to +Turnover and the display name of "Company Name" was changed to "Comp. Count". + +Industry| Comp. Count | Turnover | +--------|-------------|--------------| +Food | 2 | $566,000,000 | +Clothing| 1 | $99,000,000 | +IT | 2 | $30,000,000 | + +That's the basics and you can do the above with Views. But with Views +Aggregator Plus (VAgg+) you can also aggregate like below, using its TALLY and +ENUMERATE group aggregation functions, as well as LABEL, COUNT and SUM for the +added bottom row. + +Industry |Companies | Turnover | +------------|--------------------|--------------| +Food (2) |Heiny, McRonalds | $566,000,000 | +Clothing (1)|Cenneton | $99,000,000 | +IT (2) |AcquiB, PreviousBest| $30,000,000 | +------------|--------------------|--------------| +Totals | 5 | $695,000,000 | +------------------------------------------------ + +But that's just the beginning. Remember, you can aggregate on ViewsPHP +expressions, so the possibilities are endless! Say you have a content type +"event" that has a date range field on it with both start and end components +active. Let's say its machine name is "field_duration". The code snippet below +entered in the "Output code" area of a Views PHP field will output in Views for +each event whether it is in progress, closed or not started yet. + +field_field_duration[0]['raw']['value']); + $end_date = strtotime($data->field_field_duration[0]['raw']['value2']); + echo time() < $start_date ? 'not started' : (time() < $end_date ? 'underway' : 'closed'); +?> + +Next you can use VAgg+ to group on the expression and count or enumerate the +event titles in each of these categories. + +HOW TO USE +---------- +On the main Views UI page, admin/structure/views/view/YOUR-VIEW/edit/page, +under Format, click and select "Table with aggregation options". Having arrived +at the Settings page, follow the hints under the header "Style Options". +All group aggregation functions, except "Filter rows" require exactly one field +to be assigned the "Group and compress" function. +Column aggregation functions may be used independently of group aggregation +functions. If a column aggregation function requires an argument, it may take +it from the corresponding group aggregation function, if also enabled. + +There are no permissions or global module configurations. + +Views Aggregator Plus does not combine well with Views' native aggregation. +So in the Advanced section (upper right) set "Use aggregation: No". + +Keep in mind that the process of grouping and aggregation as performed by this +module is different from the Grouping option in Views. With Grouping in Views +the total number of rows remains the same, but the rows are grouped in separate +tables. With this module, the number of rows is reduced as they are grouped and +collapsed, but the end result is always a single table. + +FUNCTION PARAMETERS +------------------- +Functions marked with an asterisk take an optional parameter. + +"Group and Compress" takes an optional keyword 'case-insensitive' (in English or +in the translated language on your site) to perform grouping in a +case-insensitive manner. The default is case-sensitive. + +"Average" takes an optional precision: the number of decimals to round to after +calculating the average. + +"Range", "Tally members" and the two "Enumerate" functions use their parameter +to specify the separator. The default is an HTML line-break,
        , for "Tally" +and "Enumerate" and ' - ' for "Range". + +"Filter rows" and "Count" take a regular expression. This is explained below. + +REGEXPS +------- +Some aggregation functions, like "Filter rows" and "Count" take a regular +expression as a parameter. In its simplest form a regular expression is a word +or part of a word you want to filter on. If you use regexps in this way, you may +omit the special delimiters around the parameter, most commonly a pair of +forward slashes. So "red" and "/red/" are equivalent. +Here are some more regexps: + +/RED/i targets rows that contain the word "red" in the field specified, + case-insensitive +/red|blue/ rows with either the word "red" or "blue" in the field +/^(Red|Blue)/ rows where the specified field begins with "Red" or "Blue" +/Z[0-9]+/ the letter Z followed by one or more digits + +Ref: http://work.lauralemay.com/samples/perl.html (for PERL, but quite good) + +LIMITATIONS +----------- +o If an aggregation function result does not display correctly, try changing the + field formatter. For example use "Plain text", rather than "Default". +o Views-style table grouping, whereby the original table is split into smaller + ones, interferes with this plugin, so is not available. +o When you have an aggregated View AND a normal View attachment on the same + page AND you click-sort on Global:Math Expression the normal View attachment + will temporarily disappear. This is because the sort is passed to BOTH + displays and normal Views do not support sorting on Math Expressions. +o When you apply two aggregation functions on the same field, the 2nd function + gets applied on the results of the first -- not always what you want. +o Grouping, tallying and other functions may not work correctly when you have + the "Theme Developer" module enabled. + +TIPS FOR USING VIEWS PHP MODULE +------------------------------- +Use "Output code", not "Value code", as in the "Value code" area few Views +results are available. Here are some examples of the syntax to use for various +field types for access in the "Output code" text area. Note that to display +these values you need to put "echo" in front of the expression and place the + "brackets" around everything. + +// General fields, say a field named "Total", machine name: "field_total" +Raw value: $data->field_field_total[0]['raw']['value'] // 1000 +Rendered value (i.e. marked-up for display): +$data->field_field_total[0]['rendered']['#markup'] // $ 1,000.00 + +// Dates, machine name "field_duration" (start & end dates), +Raw start: $data->field_field_duration[0]['raw']['value']// 2013-06-02 00:00:00 +Raw end: $data->field_field_duration[0]['raw']['value2'] // 2013-06-04 00:00:00 +Rendered: $data->field_field_duration[0]['rendered']['#markup']; //"Sun + 02-Jun-2013 to Wed 04-Jun-2013" + +// Taxonomy terms, machine name: "field_industry" +Raw: $data->field_field_industry[0]['raw']['tid'] +Rendered: $data->field_field_industry[0]['rendered']['#title'] + +ACKNOWLEDGMENT +-------------- +The UI of this module borrows heavily from Views Calc and the work by the +authors and contributors done on that module is gratefully acknowledged. + +REFs +---- +https://drupal.org/node/1219356#comment-4782582 +https://drupal.org/node/1219356#comment-6909160 +https://drupal.org/node/1300900 +https://drupal.org/node/1791796 +https://drupal.org/node/1140896#comment-7657061 diff --git a/docroot/sites/all/modules/contrib/views_aggregator/views/theme_views_aggregator_plugin_style_table.inc b/docroot/sites/all/modules/contrib/views_aggregator/views/theme_views_aggregator_plugin_style_table.inc new file mode 100644 index 00000000..40f49958 --- /dev/null +++ b/docroot/sites/all/modules/contrib/views_aggregator/views/theme_views_aggregator_plugin_style_table.inc @@ -0,0 +1,103 @@ + t('Sortable'), + 'align' => 'center', + ), + array( + 'data' => t('Default sort'), + 'align' => 'center', + ), + array( + 'data' => t('Default order'), + 'align' => 'center', + ), + array( + 'data' => t('Hide empty column'), + 'align' => 'center', + ), + ); + + $rows = array(); + foreach (element_children($form['columns']) as $id) { + $row = array(); + $row[] = drupal_render($form['info'][$id]['name']); + $row[] = drupal_render($form['info'][$id]['align']); + $row[] + = drupal_render($form['info'][$id]['has_aggr']) + . drupal_render($form['info'][$id]['aggr']) + . drupal_render($form['info'][$id]['aggr_par']); + $row[] + = drupal_render($form['info'][$id]['has_aggr_column']) + . drupal_render($form['info'][$id]['aggr_column']) + . drupal_render($form['info'][$id]['aggr_par_column']); + $row[] = drupal_render($form['columns'][$id]); + $row[] = drupal_render($form['info'][$id]['separator']); + if (!empty($form['info'][$id]['sortable'])) { + $row[] = array( + 'data' => drupal_render($form['info'][$id]['sortable']), + 'align' => 'center', + ); + $row[] = array( + 'data' => drupal_render($form['default'][$id]), + 'align' => 'center', + ); + $row[] = array( + 'data' => drupal_render($form['info'][$id]['default_sort_order']), + 'align' => 'center', + ); + } + else { + $row[] = ''; + $row[] = ''; + $row[] = ''; + } + $row[] = array( + 'data' => drupal_render($form['info'][$id]['empty_column']), + 'align' => 'center', + ); + $rows[] = $row; + } + // Add the special 'None' row. + $rows[] = array( + t('None'), + '', + '', + '', + '', + '', + '', + array( + 'align' => 'center', + 'data' => drupal_render($form['default'][-1]), + ), + '', + '', + ); + $output .= theme('table', array('header' => $header, 'rows' => $rows)); + $output .= drupal_render_children($form); + return $output; +} diff --git a/docroot/sites/all/modules/contrib/views_aggregator/views/views-aggregator-results-table.tpl.php b/docroot/sites/all/modules/contrib/views_aggregator/views/views-aggregator-results-table.tpl.php new file mode 100644 index 00000000..c046212a --- /dev/null +++ b/docroot/sites/all/modules/contrib/views_aggregator/views/views-aggregator-results-table.tpl.php @@ -0,0 +1,100 @@ + +
        class=""> + + + + + + + $label): + $hclasses = isset($header_classes[$field]) ? $header_classes[$field] : ''; + if ($field === $grouping_field) { + $hclasses .= " $grouping_field_class"; + } + ?> + + + + + + class=""> + + + + + + + + $row): ?> + class=""> + $content): + $td_class = empty($field_classes[$field][$r]) ? '' : $field_classes[$field][$r]; + if ($field === $grouping_field) { + $td_class .= " $grouping_field_class"; + } + ?> + + + + + + + + class=""> + + + + + + +
        class=""> + +
        class=""> + +
        class="" + > + +
        class=""> + +
        diff --git a/docroot/sites/all/modules/contrib/views_aggregator/views/views_aggregator.views.inc b/docroot/sites/all/modules/contrib/views_aggregator/views/views_aggregator.views.inc new file mode 100644 index 00000000..3da5fd54 --- /dev/null +++ b/docroot/sites/all/modules/contrib/views_aggregator/views/views_aggregator.views.inc @@ -0,0 +1,32 @@ + t('Table with aggregation options'), + 'help' => t('Creates a tabular UI for the user to define aggregation functions.'), + 'handler' => 'views_aggregator_plugin_style_table', + // 'theme' name implies views-aggregator-results-table.tpl.php + // and template_preprocess_views_aggregator_results_table($vars) + 'theme' => 'views_aggregator_results_table', + // 'theme path' applies to .tpl.php and 'theme file', unless overriden + // by hook_theme(). + 'theme path' => $base_path . '/views', + // 'theme file' => 'theme_views_aggregator_plugin_style_table.inc', + 'uses row plugin' => FALSE, + 'uses row class' => TRUE, + 'uses fields' => TRUE, + 'uses options' => TRUE, + 'type' => 'normal', + 'help topic' => 'style-table', + ); + return $plugins; +} diff --git a/docroot/sites/all/modules/contrib/views_aggregator/views/views_aggregator_plugin_style_table.inc b/docroot/sites/all/modules/contrib/views_aggregator/views/views_aggregator_plugin_style_table.inc new file mode 100644 index 00000000..da58d1e8 --- /dev/null +++ b/docroot/sites/all/modules/contrib/views_aggregator/views/views_aggregator_plugin_style_table.inc @@ -0,0 +1,1094 @@ + array( + 'grouping_field_class' => array('default' => ''), + ) + ); + $options['column_aggregation'] = array( + 'contains' => array( + 'totals_per_page' => array('default' => TRUE), + 'totals_row_position' => array('default' => array(1 => 0, 2 => 2)), + 'totals_row_class' => array('default' => ''), + 'precision' => array('default' => 2), + ) + ); + return $options; + } + + /** + * Create the tabular form with the aggregation options. + */ + public function options_form(&$form, &$form_state) { + + $handlers = $this->display->handler->get_handlers('field'); + $columns = $this->sanitize_columns($this->options['columns']); + + foreach ($columns as $field => $column) { + if ($field == $column) { + // Make all columns potentially sortable, including Math Expressions. + // Do this before parent::options_form($form, $form_state); + $handlers[$field]->definition['click sortable'] = TRUE; + } + } + // Note: bulk of form is provided by superclass views_plugin_style_table. + parent::options_form($form, $form_state); + + // See function views_aggregator_theme(). + $form['#theme'] = 'views_aggregator_plugin_style_table'; + + // Views style of grouping (splitting table into many) interferes, so + // get rid of the form. + unset($form['grouping']); + + $form['description_markup'] = array( + '#markup' => '
        ' . t('Column aggregation functions may be enabled independently of group aggregation functions. Every group aggregation function, except Filter rows (by regexp), requires exactly one field to be assigned the Group and compress function. With that done, select any of the other aggregation functions for some or all of the fields. Functions marked with an asterisk take an optional parameter. For the aggregation functions Enumerate, Range and Tally the optional parameter is a delimiter to separate items.
        You may combine multiple fields into the same render column. If you do, the separator specified will be used to separate the fields. You can control column order and field labels in the Fields section of the main configuration page. For the column aggregation function Math expression you may use the tokens from that same page as documented in the "Replacement patterns" in the section "Rewrite the output of this field".') . '
        ', + ); + + foreach ($columns as $field => $column) { + + $form['info'][$field]['has_aggr'] = array( + '#type' => 'checkbox', + '#title' => t('Apply group function'), + '#default_value' => isset($this->options['info'][$field]['has_aggr']) ? $this->options['info'][$field]['has_aggr'] : FALSE, + ); + + $group_options = array(); + $column_options = array(); + foreach (views_aggregator_get_aggregation_functions_info() as $function => $display_names) { + if (!empty($display_names['group'])) { + $group_options[$function] = $display_names['group']; + } + if (!empty($display_names['column'])) { + $column_options[$function] = $display_names['column']; + } + } + $form['info'][$field]['aggr'] = array( + '#type' => 'select', + '#options' => $group_options, + '#multiple' => TRUE, + '#default_value' => empty($this->options['info'][$field]['aggr']) ? array('views_aggregator_first') : $this->options['info'][$field]['aggr'], + '#states' => array( + 'visible' => array( + 'input[name="style_options[info][' . $field . '][has_aggr]"]' => array( + 'checked' => TRUE, + ), + ), + ), + ); + // Optional parameter for the selected aggregation function. + $parameter_label = t('Parameter'); + $form['info'][$field]['aggr_par'] = array( + '#type' => 'textfield', + '#size' => 23, + '#title' => $parameter_label, + '#default_value' => isset($this->options['info'][$field]['aggr_par']) ? $this->options['info'][$field]['aggr_par'] : '', + '#states' => array( + 'visible' => array( + 'input[name="style_options[info][' . $field . '][has_aggr]"]' => array( + 'checked' => TRUE, + ), + //'select[name="style_options[info][' . $field . '][aggr][]"]' => array( + // 'value' => array('views_aggregator_sum'), + //), + ), + ), + ); + + $form['info'][$field]['has_aggr_column'] = array( + '#type' => 'checkbox', + '#title' => t('Apply column function'), + '#default_value' => isset($this->options['info'][$field]['has_aggr_column']) ? $this->options['info'][$field]['has_aggr_column'] : FALSE, + ); + $form['info'][$field]['aggr_column'] = array( + '#type' => 'select', + '#options' => $column_options, + '#multiple' => FALSE, + '#default_value' => empty($this->options['info'][$field]['aggr_column']) ? 'views_aggregator_sum' : $this->options['info'][$field]['aggr_column'], + '#states' => array( + 'visible' => array( + 'input[name="style_options[info][' . $field . '][has_aggr_column]"]' => array( + 'checked' => TRUE, + ), + ), + ), + ); + // Optional parameter for the selected column aggregation function. + $form['info'][$field]['aggr_par_column'] = array( + '#type' => 'textfield', + '#size' => 24, + '#title' => $parameter_label, + '#default_value' => isset($this->options['info'][$field]['aggr_par_column']) ? $this->options['info'][$field]['aggr_par_column'] : '', + '#states' => array( + 'visible' => array( + 'input[name="style_options[info][' . $field . '][has_aggr_column]"]' => array( + 'checked' => TRUE, + ), + ), + ), + ); + } + + $form['group_aggregation'] = array( + '#type' => 'fieldset', + '#title' => t('Group aggregation options'), + '#weight' => -2, + ); + $form['group_aggregation']['grouping_field_class'] = array( + '#title' => t('Grouping field cell class'), + '#type' => 'textfield', + '#description' => t('The CSS class to provide on each cell of the column belonging to the field that is being Grouped and compressed.'), + '#default_value' => $this->options['group_aggregation']['grouping_field_class'], + ); + + $form['column_aggregation'] = array( + '#type' => 'fieldset', + '#title' => t('Column aggregation options'), + '#weight' => -1, + ); + $form['column_aggregation']['totals_row_position'] = array( + '#title' => t('Column aggregation row position'), + '#type' => 'checkboxes', + '#options' => array( + 1 => t('in the table header'), + 2 => t('in the table footer'), + ), + '#default_value' => $this->options['column_aggregation']['totals_row_position'], + ); + $form['column_aggregation']['totals_per_page'] = array( + '#title' => t('Column aggregation row applies to'), + '#type' => 'radios', + '#options' => array( + 1 => t('the page shown, if a pager is enabled'), + 0 => t('the entire result set'), + ), + '#description' => t('If your view does not have a pager, then the two options are equivalent.'), + '#default_value' => $this->options['column_aggregation']['totals_per_page'], + '#weight' => 1, + ); + $form['column_aggregation']['precision'] = array( + '#title' => t('Column aggregation row default numeric precision'), + '#type' => 'textfield', + '#size' => 3, + '#description' => t('The number of decimals to use for column aggregations whose precisions are not defined elsewhere -- for example aggregations on Views PHP numbers.'), + '#default_value' => $this->options['column_aggregation']['precision'], + '#weight' => 2, + ); + $form['column_aggregation']['totals_row_class'] = array( + '#title' => t('Column aggregation row class'), + '#type' => 'textfield', + '#description' => t('The CSS class to provide on the row containing the column aggregations.'), + '#default_value' => $this->options['column_aggregation']['totals_row_class'], + '#weight' => 3, + ); + } + + /** + * Overrides options_validate(). + */ + public function options_validate(&$form, &$form_state) { + parent::options_validate($form, $form_state); + + $allowed_tags = array('b', 'br', 'em', 'i', 'p', 'strong', 'u'); + $tag_msg = t('Parameter field contains an illegal character or illegal HTML tag. Allowed tags are: %tags', array('%tags' => implode(', ', $allowed_tags))); + + // Count the number of occurrences of the grouping and other aggregation + // functions. + $num_grouped = 0; + $num_aggregation_functions = 0; + foreach ($form_state['values']['style_options']['info'] as $field_name => $options) { + if (!empty($options['has_aggr'])) { + if (in_array('views_aggregator_group_and_compress', $options['aggr'])) { + $num_grouped++; + } + elseif (!in_array('views_aggregator_row_filter', $options['aggr'])) { + $num_aggregation_functions += count($options['aggr']); + } + } + $filtered = filter_xss($options['aggr_par'], $allowed_tags); + if ($options['aggr_par'] != $filtered) { + form_error($form['info'][$field_name]['aggr_par'], $tag_msg); + } + $filtered = filter_xss($options['aggr_par_column'], $allowed_tags); + if ($options['aggr_par_column'] != $filtered) { + form_error($form['info'][$field_name]['aggr_par_column'], $tag_msg); + } + } + // When we have no aggregation functions, we must have 0 or 1 grouping + // function. When we have aggregation functions, there must be 1 grouping. + $ok = ($num_aggregation_functions == 0) ? $num_grouped <= 1 : $num_grouped == 1; + if (!$ok) { + $msg = t('When applying group aggregation functions, you must also select "Group and compress" on exactly one field.'); + foreach ($form_state['values']['style_options']['info'] as $field_name => $options) { + form_error($form['info'][$field_name]['aggr'], $msg); + $msg = ''; + } + } + } + + /* + * Overrides pre_render(). + * + * @param array $results + * the results returned from the database query + * + * Note that this class being a views_plugin, rather than a views_handler, + * it does not have a post_execute() function. + * + * This function applies to the currently visible page only. If paging is + * enabled for this display view->result may only contain part of the entire + * result set. + */ + public function pre_render($results) { + if (isset($this->view->is_temp_views_aggregator)) { + return; + } + parent::pre_render($results); + + if (empty($this->view->result)) { + return; + } + $functions = $this->collect_aggregation_functions(); + + $show_global_totals_with_pager = empty($this->options['column_aggregation']['totals_per_page']) && !empty($this->view->total_rows); + + if ($show_global_totals_with_pager) { + $view_without_pager = $this->execute_view_without_pager($this->view, $this->view->current_display); + + // First apply the row filters (if any), then aggregate the columns. + $view_without_pager->style_plugin->apply_row_filters(); + // Only interested in column aggregation, so only 'column' group needed. + $column_group = array('column' => array()); + foreach ($view_without_pager->result as $num => $row) { + $column_group['column'][$num] = $row; + } + $totals = $view_without_pager->style_plugin->execute_aggregation_functions($column_group, $functions); + $this->view->totals = $this->set_totals_row($totals); + } + // Because we are going to need the View results AFTER token replacement, + // we render the result set here. This is NOT duplication of CPU time, + // because render_fields(), if called for a second time, will do nothing + // when $this->rendered_fields has been populated already. + // render_fields() will puts currency signs in front of moneys, embeds node + // and taxonomy term references in hyperlinks etc. + $this->render_fields($results); + + // Apply the row filters first, then aggregate the groups. + $this->apply_row_filters(); + $groups = $this->aggregate_groups(); + $values = $this->execute_aggregation_functions($groups, $functions); + + unset($groups['column']); + + // Write group aggregation results into the View results. + $this->set_aggregated_group_values($groups, $values); + if (empty($this->view->totals)) { + // If not already set above, write the column aggregation result row on + // the View object. This row will be rendered via + // template_preprocess_views_aggregator_results_table(). + $this->view->totals = $this->set_totals_row($values); + } + + // With the aggregation functions now complete, destroy rows not part of the + // aggregation. + $this->compress_grouped_results($groups); + + // Sort the table based on the selected sort column, i.e. $this->active. + if (isset($this->active)) { + // To aid in sorting, add the row's index to each row object. + foreach ($this->view->result as $num => $row) { + $this->view->result[$num]->num = $num; + } + uasort($this->view->result, array($this, 'compare_result_rows')); + } + } + + /** + * Filters out rows from the table based on a field cell matching a regexp. + */ + protected function apply_row_filters() { + $field_handlers = $this->view->field; + foreach ($this->options['info'] as $field_name => $options) { + if (!empty($options['has_aggr']) && in_array('views_aggregator_row_filter', $options['aggr'])) { + views_aggregator_row_filter($this, $field_handlers[$field_name], $options['aggr_par']); + } + } + } + + /** + * Aggregate and compress the View's rows into groups. + * + * @return array + * an array of aggregated groups + */ + protected function aggregate_groups() { + $field_handlers = $this->view->field; + // Find the one column to group by and execute the grouping. + foreach ($this->options['info'] as $field_name => $options) { + if (!empty($options['has_aggr']) && in_array('views_aggregator_group_and_compress', $options['aggr'], FALSE)) { + $groups = views_aggregator_group_and_compress($this->view->result, $field_handlers[$field_name], $options['aggr_par']); + break; + } + } + if (empty($groups)) { + // If there are no regular groups, create a special group for column + // aggregation. This group holds all View result rows. + foreach ($this->view->result as $num => $row) { + $groups['column'][$num] = $row; + } + } + return $groups; + } + + /** + * Collect the aggregation functions from the Views UI. + * + * @return array functions + */ + protected function collect_aggregation_functions() { + $functions = array(); + foreach ($this->options['info'] as $field_name => $options) { + // Make a list of the group and column functions to call for this field. + if (!empty($options['has_aggr'])) { + foreach ($options['aggr'] as $function) { + if ($function != 'views_aggregator_row_filter' && $function != 'views_aggregator_group_and_compress') { + if (empty($functions[$field_name]) || !in_array($function, $functions[$field_name])) { + $functions[$field_name][] = $function; + } + } + } + } + // Column aggregation function, if requested, is last. + if (!empty($options['has_aggr_column'])) { + $function = $options['aggr_column']; + if (empty($functions[$field_name]) || !in_array($function, $functions[$field_name])) { + $functions[$field_name][] = $function; + } + } + } + return $functions; + } + + /** + * Executes the supplied aggregation functions with the groups as arguments. + * + * @param array $groups + * @param array $functions + * + * @return array of function return values + */ + protected function execute_aggregation_functions($groups, $functions) { + $field_handlers = $this->view->field; + $values = array(); + foreach ($functions as $field_name => $field_functions) { + if (empty($field_handlers[$field_name])) { + continue; + } + $options = $this->options['info'][$field_name]; + foreach ($field_functions as $function) { + $group_par = (!isset($options['aggr_par']) || $options['aggr_par'] == '') ? NULL : $options['aggr_par']; + $column_par = (!isset($options['aggr_par_column']) || $options['aggr_par_column'] == '') ? NULL : $options['aggr_par_column']; + $aggr_values = $function($groups, $field_handlers[$field_name], $group_par, $column_par); + // $aggr_values is indexed by group value and/or 'column'. + // 'column' is the last evaluated value for the field. + if (isset($aggr_values['column'])) { + $field_handlers[$field_name]->last_render = $aggr_values['column']; + } + foreach ($aggr_values as $group => $value) { + // 'column' function is last so may override earlier value. + if (!isset($values[$field_name][$group]) || $group == 'column') { + $values[$field_name][$group] = $value; + } + } + } + } + return $values; + } + + /** + * Removes no longer needed View result rows from the set. + * + * @param type $groups + */ + protected function compress_grouped_results($groups) { + foreach ($groups as $rows) { + $is_first = TRUE; + foreach ($rows as $num => $row) { + // The aggregated row is the first of each group. Destroy the others. + if (!$is_first) { + unset($this->rendered_fields[$num]); + unset($this->view->result[$num]); + } + $is_first = FALSE; + } + } + } + + /** + * Returns the raw or rendered result at the intersection of column and row. + * + * @param object $field_handler + * The handler associated with the result column being requested. + * @param int $row_num + * The result row number. + * @param bool $render + * Whether the rendered or raw value should be returned. + * + * @return string + * Returns empty string if there are no results for the requested row_num. + */ + public function get_cell($field_handler, $row_num, $render) { + $field_name = $field_handler->options['id']; + if (isset($this->rendered_fields[$row_num][$field_name])) { + // Bit of a hack for "Webform submission data: Value(...)" and + // "Global: Math expression" fields... Always pick up the rendered fields, + // as it seems that's all we can get! + if ($render || is_a($field_handler, 'webform_handler_field_submission_data') || is_a($field_handler, 'views_php_handler_field')) { + return $this->rendered_fields[$row_num][$field_name]; + } + if (is_a($field_handler, 'views_handler_field_math')) { + // Ignore non-numeric leading characters like currency signs. + return vap_num($this->rendered_fields[$row_num][$field_name]); + } + } + if (!isset($field_handler->view->result[$row_num])) { + return ''; + } + $field_handler->view->row_index = $row_num; + return $this->get_cell_raw($field_handler, $field_handler->view->result[$row_num], TRUE); + } + + /** + * Returns the raw, unrendered result at the intersection of column and row. + * + * Should normally not be called, especially not for Math Expr. or PHP fields. + * + * @param object $field_handler + * The handler associated with the result column being requested. + * @param object $result_row + * The result row. + * @param bool $compressed + * If the result is a (nested) array, return the first primitive value. + * + * @return string + * the raw contents of the cell + */ + private function get_cell_raw($field_handler, $result_row, $compressed = TRUE) { + + $field_name = 'field_' . $field_handler->options['id']; + if (isset($result_row->$field_name)) { + $value = reset($result_row->$field_name); + $value = isset($value['raw']) ? $value['raw'] : $value; + } + elseif (isset($result_row->{$field_handler->field_alias})) { + // nid, node_title etc. + $value = $result_row->{$field_handler->field_alias}; + } + else { + return ''; + } + // Deal with multiple subvalues like AddressFields: + // $value[0]['country'] == 'AU' + // $value[0]['postal_code'] = '3040' etc. + // + if ($compressed && is_array($value)) { + $value = reset($value); + if (is_array($value)) { + $value = reset($value); + } + } + return $value; + } + + /** + * Render and set a raw value on the table cell in specified column and row. + * + * @param object $field_handler + * The field handler associated with the table column being requested. + * @param int $row_num + * The result row number. Must be specified. + * @param mixed $new_values + * A single or array of values to set. This should be the raw value(s), + * otherwise sorting may not work properly. + * @param string $separator + * The separator to use, when $new_values is an array + * + * @return mixed + * The rendered value. + */ + public function set_cell($field_handler, $row_num, $new_values, $separator) { + $rendered_value = FALSE; + $field_name = $field_handler->options['id']; + + // The webform submission id comes in as views_handler_field_numeric, so all + // we have to detect it is its name, i.e. 'sid'. + $is_webform_value = ($field_name == 'sid') || is_a($field_handler, 'webform_handler_field_submission_data'); + + // Depending on the aggregation function applied, default rendering may be + // inappropriate. For instance "Trains (4)" cannot be rendered numerically. + if ($is_renderable = $this->is_renderable($field_name, FALSE)) { + + if ($is_webform_value) { + $rendered_value = $this->render_new_webform_value($field_handler, $row_num, $new_values, $separator); + } + elseif (is_a($field_handler, 'views_php_handler_field')) { + // This prevents Views PHP from re-rendering the code snippet and makes + // it pick up the value from $result_row. + $field_handler->options['php_output'] = FALSE; + } + else { + $rendered_value = $this->render_new_value($field_handler, $row_num, $new_values, $separator); + } + } + elseif ($is_webform_value) { + $rendered_value = $new_values; + } + if ($rendered_value === FALSE && !$is_webform_value) { + $rendered_value = is_array($new_values) ? implode($separator, $new_values) : $new_values; + } + return $this->rendered_fields[$row_num][$field_name] = $rendered_value; + } + + /** + * Returns the rendered value for a new (raw) value of a table cell. + * + * @param object $field_handler + * The handler associated with the field/table-column being requested. + * @param int $row_num + * The result row number. + * @param mixed $new_values + * The raw value or array of raw values to render. + * @param string $separator + * Separator to use between rendered values, when $new_values is an array. + * + * @return mixed + * The rendered new value or FALSE if the value could not be rendered. + */ + protected function render_new_value($field_handler, $row_num, $new_values, $separator) { + $new_values = is_array($new_values) ? $new_values : array($new_values); + // If the field_handler belongs to an entity Field (as in the field module), + // then we call render_from_raw(), which uses the attached parent entity to + // render the field, which at some point will involve a call to + // field_view_field($entity...). + // Other field_handlers (e.g. Math Expressions) don't have the same data + // structures attached --they are Views fields, but not core Fields-- so + // require a different approach using format_numeric(). + $rendered_values = array(); + foreach ($new_values as $new_value) { + if ($this->is_standard_field($field_handler)) { + $rendered_values[] = $this->render_from_raw($field_handler, $row_num, $new_value); + } + elseif ($this->is_commerce_currency_amount($field_handler)) { + $rendered_values[] = $this->render_from_raw_scalar($field_handler, $row_num, $new_value); + } + else { + // If $new_value is not a number, this tends to return it verbatim. + $rendered_values[] = $this->format_numeric($field_handler, $new_value); + } + } + $rendered_value = implode(empty($separator) ? ' - ' : $separator, $rendered_values); + return is_array($rendered_value) ? drupal_render($rendered_value) : $rendered_value; + } + + /** + * Returns whether the supplied field is a standard Views field. + * + * @param object $field_handler + * The views_handler_field_field object belonging to the View result field + * + * @return bool + */ + protected function is_standard_field($field_handler) { + return is_a($field_handler, 'views_handler_field_field'); + } + + protected function is_commerce_currency_amount($field_handler) { + return !empty($field_handler->aliases['currency_code']); + } + + /** + * Render a Commerce amount passed in cents, formatted with currency. + * + * The field will be rendered with appropriate CSS classes, without label. + * + * @param object $field_handler + * The views_handler_field_field object belonging to the View result field + * @param int $row_num + * The view result row number to change; use NULL if you do not wish to + * affect the view but just render the raw_value. + * @param int $raw_value + * Amount in cents + * If NULL the row value of the field is re-rendered using its current + * (raw) value. + */ + protected function render_from_raw_scalar($field_handler, $row_num, $raw_value) { + $affect_view = isset($row_num); + $row_num = (int) $row_num; + $row = &$field_handler->view->result[$row_num]; + if (isset($raw_value)) { + $field_alias = $field_handler->field_alias; + $orig_value = $row->$field_alias; + $row->$field_alias = $raw_value; + } + $rendered_value = $field_handler->render($row); + if (!$affect_view && isset($orig_value)) { + $row->$field_alias = $orig_value; + } + return $rendered_value; + } + + /** + * Returns the rendered representation for a new webform value. + * + * @param object $field_handler + * The webform handler associated with the field/table-column being requested. + * @param int $row_num + * The result row number. + * @param array $new_values + * The raw value(s) to render using the webform's rounding, prefix, suffix. + * @param string $separator + * Separator to use between rendered values, when $new_values is an array. + * + * @return string + * The rendered value. + */ + protected function render_new_webform_value($field_handler, $row_num, $new_values, $separator) { + $result_row = $field_handler->view->result[$row_num]; + $nid = $field_handler->options['webform_nid']; + $cid = $field_handler->options['webform_cid']; + // Need to overwrite the submitted value on the _webform_submissions array + // before rendering it, adding rounding, prefix, suffix. + $submission = $field_handler->view->_webform_submissions[$nid][$result_row->sid]; + $rendered_values = array(); + $new_values = is_array($new_values) ? $new_values : array($new_values); + foreach ($new_values as $new_value) { + $submission->data[$cid][$row_num] = $new_value; + $rendered = trim($field_handler->advanced_render($result_row)); + $rendered_values[] = empty($rendered) ? $new_value : $rendered; + } + $rendered_value = implode(empty($separator) ? ' - ' : $separator, $rendered_values); + return is_array($rendered_value) ? drupal_render($rendered_value) : $rendered_value; + } + + /** + * Format a raw numeric value according to the supplied handler settings. + * + * @param object $field_handler + * @param double $raw_value + * + * @return string, number formatted according to Views handler settings + * + * Note: this was taken in part from views_handler_field_math::render($values) + */ + protected function format_numeric($field_handler, $raw_value) { + if (!empty($field_handler->options['set_precision'])) { + $value = number_format($raw_value, $field_handler->options['precision'], $field_handler->options['decimal'], $field_handler->options['separator']); + } + elseif (isset($field_handler->options['separator'])) { + $remainder = abs($raw_value) - intval(abs($raw_value)); + $value = $raw_value > 0 ? floor($raw_value) : ceil($raw_value); + $value = number_format($value, 0, '', $field_handler->options['separator']); + if ($remainder && isset($field_handler->options['decimal'])) { + // Note: substr may not be locale safe. + $value .= $field_handler->options['decimal'] . substr($remainder, 2); + } + } + elseif (is_float($raw_value)) { + $precision = isset($this->options['column_aggregation']['precision']) + ? (int) $this->options['column_aggregation']['precision'] + : (int) variable_get('views_aggregator_def_precision', 2); + $decimal = variable_get('views_aggregator_def_decimal'); // '.' + $separator = variable_get('views_aggregator_def_separator'); // ',' + $value = number_format($raw_value, $precision, $decimal, $separator); + } + else { + $value = $raw_value; + } + // Check to see if hiding should happen. + if ($field_handler->options['hide_empty'] && empty($value) && ($value !== 0 || $field_handler->options['empty_zero'])) { + return ''; + } + // Should we format as a plural? + if (!empty($field_handler->options['format_plural']) && ($value != 0 || !$field_handler->options['empty_zero'])) { + $value = format_plural($value, $field_handler->options['format_plural_singular'], $field_handler->options['format_plural_plural']); + } + if (empty($value)) { + return ''; + } + $prefix = isset($field_handler->options['prefix']) ? $field_handler->options['prefix'] : ''; + $suffix = isset($field_handler->options['suffix']) ? $field_handler->options['suffix'] : ''; + return $field_handler->sanitize_value($prefix . $value . $suffix, 'xss_admin'); + } + + /** + * Render a field.module field from a raw value. + * + * The field will be rendered with appropriate CSS classes, without label. + * + * @param object $field_handler + * The views_handler_field_field object belonging to the View result field + * @param int $row_num + * The view result row number to change. Pass NULL to simply render + * $raw_value outside the context of a View, without affecting any rows. + * @param mixed $raw_value + * Compound or simple value. + * If NULL the row value of the field is re-rendered using its current + * (raw) value. + * + * @return string + * The rendered value or FALSE, if the type of field is not supported. + * + * NB: This is messy code. The lengths we have to go through for this are + * ridiculous. Patches welcome! + * + * The way it currently works is to set the desired $raw_value on the + * associated entity and then render it via + * set_items(), when a row_num is provided to write the value to + * field_view_field(), otherwise + * set_items() internally also calls field_view_field() + */ + protected function render_from_raw($field_handler, $row_num = NULL, $raw_value = NULL) { + $field_name = $real_field_name = $field_handler->options['id']; + $field_alias = $field_handler->field_alias; + $row = isset($row_num) ? $field_handler->view->result[$row_num] : reset($field_handler->view->result); + $affect_view = isset($row_num); + // _field_data[] contains the entities we'll be rendering from/to + if (!$row || empty($row->_field_data[$field_alias])) { + // This happens for ViewsPHP fields and for Math Expressions. + return !$row || $affect_view ? FALSE : (isset($raw_value) ? $raw_value : '?'); + } + // Note that when a 2nd copy of a field is used in the View, e.g. + // field_price_1, we refer back to the base field name, i.e. field_price + $last_underscore = strrpos($real_field_name, '_'); + if ((int)drupal_substr($real_field_name, $last_underscore + 1)) { + $field_name = drupal_substr($real_field_name, 0, $last_underscore); + } + $_field_data = $row->_field_data[$field_alias]; + if ($this->has_no_suitable_renderer($_field_data, $field_name)) { + // E.g. when the $field_handler refers to a node property (rather than + // a field) that does not have a renderer. + return $affect_view ? ($_field_data['entity']->{$field_name} = $raw_value) : $raw_value; + } + // Clone entity if we don't want to affect the current View results or if we + // have multiple displays. + $entity = $affect_view ? $_field_data['entity'] : clone $_field_data['entity']; + $entity_type = $_field_data['entity_type']; + + $lang = is_a($field_handler, 'views_handler_field_field') ? $field_handler->field_language($entity_type, $entity) : $entity->language; + if (isset($raw_value)) { + // Only supporting values of 1 item, at index 0. + if (is_array($raw_value)) { + $entity->{$field_name}[$lang][0] = $raw_value; + } + elseif (isset($entity->{$field_name})) { + if (empty($entity->{$field_name})) { + $current_value = NULL; + $key = 'value'; + } + else { + $current_value = reset($entity->{$field_name}[$lang][0]); + $key = key($entity->{$field_name}[$lang][0]); + // Cannot override 'tid' with non-numeric value. But like 'value', + // 'tid' may be set in case of min, max, most frequent etc. + // 'amount' is to allow the setting of Drupal Commerce prices. + if ($affect_view && $key != 'value' && $key != 'amount' && !($key == 'tid' && is_numeric($raw_value))) { + return FALSE; + } + } + $entity->{$field_name}[$lang][0][$key] = $raw_value; + } + if ($affect_view) { + // Next employ set_items() to re-render the $entity updated above. + // set_items() calls field_view_field() to render the value, applying + // rounding etc. + // It returns an array with raw and rendered components. + $raw_plus_rendered = $field_handler->set_items($row, $row_num); + // Now set the current value back on the entity in case we have multiple + // displays, all drawing from the same entity. + if (isset($key)) { + $entity->{$field_name}[$lang][0][$key] = $current_value; + } + // The final step is to theme the rendered values. This includes + // token replacement and template theming. + // theme() calls $field_handler->advanced_render($row); + $row->{'field_' . $real_field_name} = $raw_plus_rendered; + return $field_handler->theme($row); + } + } + // If we can't affect the View result or $raw_value isn't set, we use the + // Field API. The Field label is not rendered. + $display = array( + 'type' => $field_handler->options['type'], + 'settings' => $field_handler->options['settings'], + 'label' => 'hidden', + ); + $render_array = field_view_field($entity_type, $entity, $field_name, $display, $lang); + return drupal_render($render_array); + } + + protected function has_no_suitable_renderer($field_data, $field_name) { + if (!isset($field_data['entity']->{$field_name})) { + return TRUE; + } + return is_scalar($field_data['entity']->{$field_name}); + } + + /** + * Write the aggregated results back into the View's rendered results. + * + * @param array $groups + * an array of groups, indexed by group name + * @param array $values + * an array of value arrays, indexed by field name first and group second + */ + protected function set_aggregated_group_values($groups, $values) { + $field_handlers = $this->view->field; + foreach ($this->options['info'] as $field_name => $options) { + foreach ($groups as $group => $rows) { + if ($group != 'column' && isset($values[$field_name][$group])) { + foreach ($rows as $num => $row) { + $separator = $this->options['info'][$field_name]['aggr_par']; + $this->set_cell($field_handlers[$field_name], $num, $values[$field_name][$group], $separator); + // Only need to set on the first member of the group. + break; + } + } + } + } + } + + /** + * Write the aggregated results back into the View results totals (footer). + * + * @param array $values + * an array of field value arrays, indexed by field name and 'column' + */ + protected function set_totals_row($values) { + $totals = array(); + foreach ($values as $field_name => $group) { + if (!empty($this->options['info'][$field_name]['has_aggr_column']) && isset($group['column'])) { + $total = $group['column']; + if ($this->is_renderable($field_name, TRUE)) { + $field_handler = $this->view->field[$field_name]; + $is_webform_value = is_a($field_handler, 'webform_handler_field_submission_data'); + // This is to make render_text() work properly. + $field_handler->original_value = $total; + $separator = $this->options['info'][$field_name]['aggr_par_column']; + $totals[$field_name] = $is_webform_value + ? $this->render_new_webform_value($field_handler, 0, $total, $separator) + : $this->render_new_value($field_handler, NULL, $total, $separator); + } + else { + $totals[$field_name] = $total; + } + } + } + return $totals; + } + + /** + * Returns if the supplied field is renderable through its native function. + * + * @param string $field_name + * @param bool $is_column + * + * @return bool + */ + public function is_renderable($field_name, $is_column = FALSE) { + if (empty($this->options['info'][$field_name][$is_column ? 'has_aggr_column' : 'has_aggr'])) { + return TRUE; + } + $aggr_functions = $this->options['info'][$field_name][$is_column ? 'aggr_column' : 'aggr']; + $aggr_function = is_array($aggr_functions) ? end($aggr_functions) : $aggr_functions; + $aggr_function_info = views_aggregator_get_aggregation_functions_info($aggr_function); + + // Aggregation functions are considered renderable unless set to FALSE. + return !isset($aggr_function_info['is_renderable']) || !empty($aggr_function_info['is_renderable']); + } + + /** + * Records the "active" field, i.e. the column clicked to be sorted. + * + * Also records the sort order ('asc' or 'desc'). + * This is identical to views_plugin_style_table::build_sort_post(), except + * for the last statement, which has a condition added. + */ + public function build_sort_post() { + if (!isset($_GET['order'])) { + // Check for a 'default' clicksort. If there isn't one, exit gracefully. + if (empty($this->options['default'])) { + return; + } + $sort = $this->options['default']; + if (!empty($this->options['info'][$sort]['default_sort_order'])) { + $this->order = $this->options['info'][$sort]['default_sort_order']; + } + else { + $this->order = !empty($this->options['order']) ? $this->options['order'] : 'asc'; + } + } + else { + $sort = $_GET['order']; + // Store the $order for later use. + $this->order = !empty($_GET['sort']) ? strtolower($_GET['sort']) : 'asc'; + } + // If a sort we don't know about gets through, exit gracefully. + if (empty($this->view->field[$sort])) { + return; + } + // Ensure $this->order is valid. + if ($this->order != 'asc' && $this->order != 'desc') { + $this->order = 'asc'; + } + // Store the $sort and sortable flag for later use. + $this->active = $sort; + //$this->sortable = $this->options['info'][$sort]['sortable']; + + // Tell the field to click-sort, but only if it is not a Math Expression or + // a field not aggregated, in which cases sorting will be dealt with in + // $this->pre_render(). + // This is here predominantly to avoid notices from ViewsPHP, but also + // makes normal column sorting more efficient by not adding any unnecessary + // WHERE-clauses, if paging is OFF. + // @todo Refine this logic + if (!is_a($this->view->field[$sort], 'views_handler_field_math') + /* && empty($this->options['info'][$sort]['has_aggr'])*/) { + $this->view->field[$sort]->click_sort($this->order); + } + } + + /** + * Compare function for aggregated groups, for use in sorting functions. + * + * @param array $row1 + * The first aggregated group of result rows. + * @param array $row2 + * The second aggregated group of result rows. + * + * @return int + * The compare code indicating whether $row1 is smaller than (-1), equal + * to (0) or greater than (1) $row2. + */ + protected function compare_result_rows($row1, $row2) { + // The sorting data may be raw or rendered, while the sorting style may be + // alphabetical or numeric. + // + // Columns that need to be sorted using raw values: + // o numbers and moneys, so that "$1,000" comes AFTER "$9.99" (ascending) + // o dates and date ranges (@todo) + // + // Columns that need to be sorted using rendered, post-aggregated values: + // o Views PHP expressions, addresses, taxonomy terms + + $field_handler = $this->view->field[$this->active]; + $field_type = isset($field_handler->field_info['type']) ? $field_handler->field_info['type'] : ''; + + // AddressFields, taxonomy terms and Views PHP expressions are compared in + // rendered format. + $compare_rendered = + ($field_type == 'addressfield') || + ($field_type == 'taxonomy_term_reference') || + is_a($field_handler, 'views_php_handler_field'); + + // Get the cells from the raw or rendered fields. + // Note that raw data may contain HTML tags too, so always strip. + $cell1 = strip_tags($this->get_cell($field_handler, $row1->num, $compare_rendered)); + $cell2 = strip_tags($this->get_cell($field_handler, $row2->num, $compare_rendered)); + + if ((double)$cell1 == (double)$cell2) { + // If both cells cast to zero, then compare alphabetically. + $compare = ($cell1 == $cell2) ? 0 : ($cell1 < $cell2 ? -1 : 1); + } + else { + // Compare numerically, i.e. "20 km" comes after "9.5 km". + // The double cast causes a read up to the first non-number related char. + $compare = (double)$cell1 < (double)$cell2 ? -1 : 1; + } + return ($this->order == 'asc') ? $compare : -$compare; + } + + /** + * Strips the pager off an existing View, then executes and renders it. + * + * The View is rebuilt from scratch, without the extra pager query. The View + * passed in as an argument is in no way affected. + * + * @param object $view_with_pager + * a View object + * + * @param object $display_id + * the display to execute, for example 'default', 'page', 'block' + * + * @return object + * the pageless View, including the complete rendered results set on + * $view->style_plugin->rendered_fields + */ + protected function execute_view_without_pager($view_with_pager, $display_id = NULL) { + // Apply the filters so the results reflect accurately. + $this->apply_exposed_filters($view_with_pager); + + $clone = $view_with_pager->clone_view(); + $id = empty($clone->display[$display_id]->display_options['pager']) ? 'default' : $display_id; + $clone->display[$id]->display_options['pager']['type'] = 'none'; + + $clone->is_temp_views_aggregator = TRUE; + $clone->execute($display_id); + return $clone; +/* + // Alternative code below is based on view::copy() + $code = $view_with_pager->export(); + $code_without_pagers = str_replace( + "display_options['pager']['type'] = ", + "display_options['pager']['type'] = 'none'; //", $code); + + // This statement creates a View object by the name of $view. + eval($code_without_pagers); + + // [#2213417], to avoid notice. + $view->dom_id = $view_with_pager->dom_id; + + // Avoid recursion in views_aggregator_plugin_style_table::pre_render(). + $view->is_temp_views_aggregator = TRUE; + + // As this is a copy, let's keep caching behaviour the same as the original. + + // Execute the display. + $view->execute($display_id); // may have to be: $view->render($display_id); + return $view; +*/ + } + + /** + * Apply the exposed filters to the view so we get the correct result set. + * + * @param object $view + * A view object. + */ + protected function apply_exposed_filters(&$view) { + $filters = $view->display_handler->display->handler->handlers['filter']; + // Loop through the filters and UNexpose them. + foreach ($filters as $filter_handler) { + $filter_handler->options['exposed'] = FALSE; + } + } + +} diff --git a/docroot/sites/all/modules/contrib/views_aggregator/views_aggregator.api.php b/docroot/sites/all/modules/contrib/views_aggregator/views_aggregator.api.php new file mode 100644 index 00000000..415b78ff --- /dev/null +++ b/docroot/sites/all/modules/contrib/views_aggregator/views_aggregator.api.php @@ -0,0 +1,45 @@ + array( + 'group' => t('Variance'), + 'column' => t('Variance'), // use NULL if not applicable + + // If your function operates on a numeric field, but the result is no + // longer a (single) number, for example when enumerating values, then the + // original renderer is not appropriate. In that case set this to FALSE. + 'is_renderable' => TRUE, // this is the default + ), + ); + return $functions; +} + +/** + * Alter existing aggregation functions. + * + * @param array $aggregation_functions + * the aggregation functions currently defined + */ +function hook_views_aggregation_functions_info_alter($aggregation_functions) { +} + +/** + * @} End of "addtogroup hooks". + */ diff --git a/docroot/sites/all/modules/contrib/views_aggregator/views_aggregator.info b/docroot/sites/all/modules/contrib/views_aggregator/views_aggregator.info new file mode 100644 index 00000000..26a40516 --- /dev/null +++ b/docroot/sites/all/modules/contrib/views_aggregator/views_aggregator.info @@ -0,0 +1,16 @@ +name = Views Aggregator Plus +description = A Views plugin that operates on the results after the database query has run, thus offering aggregation functions not otherwise possible. +configure = admin/config/content/views_aggregator +package = Views +dependencies[] = views +core = 7.x + +; Files containing classes +files[] = views/views_aggregator_plugin_style_table.inc + +; Information added by Drupal.org packaging script on 2015-01-28 +version = "7.x-1.4" +core = "7.x" +project = "views_aggregator" +datestamp = "1422421087" + diff --git a/docroot/sites/all/modules/contrib/views_aggregator/views_aggregator.module b/docroot/sites/all/modules/contrib/views_aggregator/views_aggregator.module new file mode 100644 index 00000000..b24c925c --- /dev/null +++ b/docroot/sites/all/modules/contrib/views_aggregator/views_aggregator.module @@ -0,0 +1,154 @@ +README for View configuration instructions and examples or browse the project support queue.', array( + '@project' => url('http://drupal.org/project/views_aggregator'), + '@README' => url(drupal_get_path('module', 'views_aggregator') . '/README.txt'), + )); + } +} + +/** + * Implements hook_theme(). + */ +function views_aggregator_theme() { + $base_path = drupal_get_path('module', 'views_aggregator'); + $themes = array( + 'views_aggregator_plugin_style_table' => array( + // Pass $form to theme_views_aggregator_plugin_style_table($vars) + 'render element' => 'form', + 'path' => $base_path . '/views', + 'file' => 'theme_views_aggregator_plugin_style_table.inc', + ), + ); + return $themes; +} + +/** + * Implements hook_views_api(). + */ +function views_aggregator_views_api() { + return array( + 'api' => views_api_version(), + 'path' => drupal_get_path('module', 'views_aggregator') . '/views', + ); +} + +/** + * Get all avaialble aggregation function definitions. + * + * @param string $name + * The name of the desired function or NULL to retrieve an array of functions. + * + * @return array + * An array of aggregation function info. + */ +function views_aggregator_get_aggregation_functions_info($name = NULL) { + + $aggregation_functions = &drupal_static(__FUNCTION__); + + if (empty($aggregation_functions)) { + // Collect aggregations functions defined in other modules via their + // hook_views_aggregation_functions_info() implementations. + $aggregation_functions = module_invoke_all('views_aggregation_functions_info'); + + // @todo sort by display name, rather than function name + ksort($aggregation_functions); + + // Let other modules alter the aggregation functions by implementing + // hook_views_aggregation_functions_info_alter(). + drupal_alter('views_aggregation_functions_info', $aggregation_functions); + } + // $aggregation_functions = (array)$aggregation_functions; + if (empty($name)) { + return $aggregation_functions; + } + return isset($aggregation_functions[$name]) ? $aggregation_functions[$name] : array(); +} + +/** + * Returns the result value at the intersection of column and row. + * + * @param object $field_handler + * The handler associated with the table column being requested. + * @param int $row_num + * index into the View result rows array + * @param bool $rendered + * Whether to return the rendered as opposed to the raw value of the cell + * + * @return string + * The content of the cell + */ +function views_aggregator_get_cell($field_handler, $row_num, $rendered = FALSE) { + return $field_handler->view->style_plugin->get_cell($field_handler, $row_num, $rendered); +} + +/** + * Prepare to render the view results as a table style. + * + * The rendering to HTML happens in views-aggregator-results-table.tpl.php + * + * See also: + * template_preprocess_views_view_table(&$vars) in Views + */ +function template_preprocess_views_aggregator_results_table(&$vars) { + $view = $vars['view']; + + $vars['grouping_field'] = ''; + foreach ($view->style_plugin->options['info'] as $field_name => $info) { + if (!empty($info['has_aggr']) && !empty($info['aggr']['views_aggregator_group_and_compress'])) { + $vars['grouping_field'] = $field_name; + break; + } + } + $vars['grouping_field_class'] = $view->style_plugin->options['group_aggregation']['grouping_field_class']; + + if (!empty($view->totals) && array_filter($view->totals) != array()) { + $vars['totals'] = $view->totals; + } + $vars['totals_row_position'] = + $view->style_plugin->options['column_aggregation']['totals_row_position'][1] + + $view->style_plugin->options['column_aggregation']['totals_row_position'][2]; + + $vars['totals_row_class'] = $view->style_plugin->options['column_aggregation']['totals_row_class']; + + if (!isset($view->row_index)) { + // Have seen trouble when this is not set... + $view->row_index = 0; + } + // At this point template_preprocess_views_view(), will have put the (sorted) + // $view->result on $vars['rows']. + // template_preprocess_views_view_table() will add row and field classes, + // caption etc. It will also call render_fields() but that won't do anything + // as we've already done the rendering in view_aggregator_plugin_style_table:: + // pre_render(). + // The order of the rendered rows is determined by $view->result, while the + // content of each row comes from $view->style_plugin->rendered_fields. + + // Loop code taken from template_preprocess_views_view_table(), + // file: views/theme/theme.inc + $options = $view->style_plugin->options; + $columns = $view->style_plugin->sanitize_columns($options['columns'], $view->field); + foreach ($columns as $field => $column) { + if ($field == $column) { + // Make all columns click-sortable, including Math Expressions. + $view->field[$field]->definition['click sortable'] = TRUE; + } + } + + $vars['attributes_array']['id'] = drupal_html_id('views_aggregator_datatable'); + template_preprocess_views_view_table($vars); +} diff --git a/docroot/sites/all/modules/contrib/views_aggregator/views_aggregator_functions.inc b/docroot/sites/all/modules/contrib/views_aggregator/views_aggregator_functions.inc new file mode 100644 index 00000000..f74dc1e9 --- /dev/null +++ b/docroot/sites/all/modules/contrib/views_aggregator/views_aggregator_functions.inc @@ -0,0 +1,728 @@ + array( + 'group' => t('Filter rows (by regexp) *'), + 'column' => NULL, + ), + 'views_aggregator_group_and_compress' => array( + 'group' => t('Group and compress'), + 'column' => NULL, + ), + + /* Regular aggregation functions start here, in alphabetical order */ + + 'views_aggregator_average' => array( + 'group' => t('Average *'), + 'column' => t('Average *'), + ), + 'views_aggregator_count' => array( + 'group' => t('Count (having regexp) *'), + 'column' => t('Count (having regexp) *'), + 'is_renderable' => FALSE, + ), + 'views_aggregator_first' => array( + 'group' => t('Display first member'), + 'column' => NULL, + ), + 'views_aggregator_enumerate_raw' => array( + 'group' => t('Enumerate *'), + 'column' => t('Enumerate *'), + 'is_renderable' => FALSE, + ), + 'views_aggregator_enumerate' => array( + 'group' => t('Enumerate (sort, no dupl.) *'), + 'column' => t('Enumerate (sort, no dupl.) *'), + 'is_renderable' => FALSE, + ), + 'views_aggregator_replace' => array( + 'group' => t('Label (enter below) *'), + 'column' => t('Label (enter below) *'), + 'is_renderable' => FALSE, + ), + 'views_aggregator_maximum' => array( + 'group' => t('Maximum'), + 'column' => t('Maximum'), + ), + 'views_aggregator_median' => array( + 'group' => t('Median'), + 'column' => t('Median'), + ), + 'views_aggregator_minimum' => array( + 'group' => t('Minimum'), + 'column' => t('Minimum'), + ), + 'views_aggregator_range' => array( + 'group' => t('Range *'), + 'column' => t('Range *'), + ), + 'views_aggregator_sum' => array( + 'group' => t('Sum'), + 'column' => t('Sum'), + ), + 'views_aggregator_tally' => array( + 'group' => t('Tally members *'), + 'column' => NULL, // @todo t('Tally members *'), + 'is_renderable' => FALSE, + ), + // This one is probably best last, because of token replacement. + 'views_aggregator_expression' => array( + 'group' => NULL, + 'column' => t('Math expression *'), + ), + ); + return $functions; +} + +/** + * Keeps only the groups that match the regular expression filter. + * + * Matching takes place on the raw values (1000, rather than "$ 1,000"). + * + * @param object $views_plugin_style + * an array of groups of rows, each group indexed by group value + * @param object $field_handler + * the handler for the view column to count groups members in + * @param string $regexp + * if empty all result rows are kept + * + * @return array + * a subset of the original array of groups + */ +function views_aggregator_row_filter($views_plugin_style, $field_handler, $regexp = NULL) { + if (empty($regexp)) { + return; + } + if (preg_match('/[a-zA-Z0-9_]+/', $regexp)) { + // Interpret omitted brace chars in the regexp as a verbatim text match. + $regexp = "/$regexp/"; + } + foreach ($views_plugin_style->view->result as $num => $row) { + $field_value = views_aggregator_get_cell($field_handler, $num, FALSE); + if (!preg_match($regexp, $field_value)) { + unset($views_plugin_style->rendered_fields[$num]); + unset($views_plugin_style->view->result[$num]); + } + } +} + +/** + * Aggregates the supplied view results into grouped rows. + * + * This function must be selected for one column (field) in the results table. + * Its parameters and return value are different from the other aggregation + * functions. + * + * @param object $view_results + * the result rows as they appear on the view object + * @param object $field_handler + * the handler for the view column to group rows on + * @param string $case + * whether group-inclusion is case-sensitive (the default) + * + * @return array + * an array of groups, keyed by group value first and row number second. + */ +function views_aggregator_group_and_compress($view_results, $field_handler, $case = 'case-sensitive') { + $groups = array(); + $is_ci = (strcasecmp($case, 'case-insensitive') === 0) || ($case == t('case-insensitive')); + foreach ($view_results as $num => $row) { + // Compression takes place on the rendered values. Two hyperlinks with the + // same display texts but different hrefs will end up in different groups. + $group_value = views_aggregator_get_cell($field_handler, $num, TRUE); + if ($is_ci) { + $is_set = FALSE; + foreach (array_keys($groups) as $existing_group) { + if (strcasecmp($group_value, $existing_group) === 0) { + $groups[$existing_group][$num] = $row; + $is_set = TRUE; + break; + } + } + } + if (empty($is_set)) { + $groups[$group_value][$num] = $row; + } + } + // Caution: experiment! + if (FALSE) { + // For each group remove cells that are identical to the the ones above + // them in the same group. + foreach ($groups as $group_value => &$rows) { + $first_row = NULL; + foreach ($rows as $num => &$row) { + if (!isset($first_row)) { + $first_row = $row; + } + else { + foreach ((array)$row as $field_name => $cell) { + if ($field_name != '_field_data' && $cell == $first_row->{$field_name}) { + unset($row->{$field_name}); + } + } + } + } + } + } + return $groups; +} + +/** + * Aggregates a field group as the average amongst its members. + * + * @param array $groups + * an array of groups of rows, each group indexed by group value + * @param object $field_handler + * the handler for the view column to find the minimum in + * @param int $precision_group + * the number of decimals, if specified + * @param int $precision_column + * the number of decimals, if specified + * + * @return array + * an array of values, one for each group and one for the column. + */ +function views_aggregator_average($groups, $field_handler, $precision_group, $precision_column) { + $values = array(); + $sum_column = 0.0; + $count_column = 0; + foreach ($groups as $group => $rows) { + $sum = 0.0; + $count = 0; + foreach ($rows as $num => $row) { + // Do not count empty or non-numeric cells. + $cell = vap_num(views_aggregator_get_cell($field_handler, $num, FALSE)); + if ($cell !== FALSE) { + $sum += $cell; + $count++; + } + } + $average = ($count == 0) ? 0.0 : $sum / $count; + $values[$group] = empty($precision_group) ? $average : number_format($average, $precision_group, '.', ''); + $sum_column += $sum; + $count_column += $count; + } + $average_column = ($count_column == 0) ? 0.0 : $sum_column / $count_column; + $values['column'] = empty($precision_column) ? $average_column : number_format($average_column, $precision_column, '.', ''); + return $values; +} + +/** + * Aggregates a field group as a count of the number of group members. + * + * @param array $groups + * an array of groups of rows, each group indexed by group value + * @param object $field_handler + * the handler for the view column to count groups members in + * @param string $group_regexp + * an optional regexp to count, if omitted all non-empty group values count + * @param string $column_regexp + * an optional regexp to count, if omitted all non-empty group values count + * + * @return array + * an array of values, one for each group and one for the column + */ +function views_aggregator_count($groups, $field_handler, $group_regexp = NULL, $column_regexp = NULL) { + $values = array(); + $count_column = 0; + $regexp = isset($group_regexp) ? $group_regexp : $column_regexp; + if (preg_match('/[a-zA-Z0-9_]+/', $regexp)) { + // Interpret omitted brace chars in the regexp as a verbatim text match. + $regexp = "/$regexp/"; + } + foreach ($groups as $group => $rows) { + $count = 0; + foreach ($rows as $num => $row) { + $cell = views_aggregator_get_cell($field_handler, $num, TRUE); + if (isset($cell) && $cell != '' && (empty($regexp) || preg_match($regexp, $cell))) { + $count++; + } + } + $values[$group] = $count; + $count_column += $count; + } + $values['column'] = $count_column; + return $values; +} + +/** + * Aggregates a field group as the enumeration of its members. + * + * The enumeration is sorted "naturally" and duplicates are removed. + * + * @param array $groups + * an array of groups of rows, each group indexed by group value + * @param object $field_handler + * the handler for the view column to find members of the group + * @param string $separator_group + * the separator to use in group enumerations, defaults to '
        ' + * @param string $separator_column + * the separator to use for the column enumeration, defaults to '
        ' + * + * @return array + * an array of values, one for each group. + */ +function views_aggregator_enumerate($groups, $field_handler, $separator_group, $separator_column) { + return _views_aggregator_enumerate($groups, $field_handler, $separator_group, $separator_column, TRUE, FALSE); +} + +/** + * Aggregates a field group as the enumeration of its members. + * + * The enumeration retains the orignal order and does not remove duplicates. + * + * @param array $groups + * an array of groups of rows, each group indexed by group value + * @param object $field_handler + * the handler for the view column to find members of the group + * @param string $separator_group + * the separator to use in group enumerations, defaults to '
        ' + * @param string $separator_column + * the separator to use for the column enumeration, defaults to '
        ' + * + * @return array + * an array of values, one for each group. + */ +function views_aggregator_enumerate_raw($groups, $field_handler, $separator_group, $separator_column) { + return _views_aggregator_enumerate($groups, $field_handler, $separator_group, $separator_column, FALSE, TRUE); +} + +/** + * Aggregates a field group as the enumeration of its members. + * + * @param array $groups + * an array of groups of rows, each group indexed by group value + * @param object $field_handler + * the handler for the view column to find members of the group + * @param string $separator_group + * the separator to use in group enumerations, defaults to '
        ' + * @param string $separator_column + * the separator to use for the column enumeration, defaults to '
        ' + * @param bool $sort + * whether or not to sort the enumeration + * @param bool $allow_duplicates + * whether or not to remoe duplicates from the enumeration + * + * @return array + * an array of values, one for each group. + */ +function _views_aggregator_enumerate($groups, $field_handler, $separator_group, $separator_column, $sort = TRUE, $allow_duplicates = FALSE) { + $separator_group = empty($separator_group) ? '
        ' : $separator_group; + $separator_column = empty($separator_column) ? '
        ' : $separator_column; + $values = array('column' => array()); + foreach ($groups as $group => $rows) { + $cell_values = array(); + foreach ($rows as $num => $row) { + $cell = trim(views_aggregator_get_cell($field_handler, $num, TRUE)); + if (!empty($cell)) { + if ($allow_duplicates || !in_array($cell, $cell_values)) { + $cell_values[] = $cell; + } + if ($allow_duplicates || !in_array($cell, $values['column'])) { + $values['column'][] = $cell; + } + } + } + if (count($cell_values) > 1) { + // After grouping the fields in the group no longer belong to one + // entity. Cannot easily support hyper-linking, so switch it off. + unset($field_handler->options['link_to_node']); + if ($sort) { + @sort($cell_values, SORT_NATURAL | SORT_FLAG_CASE); + } + } + if ($group != 'column') { + $values[$group] = implode($separator_group, $cell_values); + } + } + if ($sort) { + @sort($values['column'], SORT_NATURAL | SORT_FLAG_CASE); + } + $values['column'] = implode($separator_column, $values['column']); + return $values; +} +/** + * Aggregates a field in the column aggregation row as a math. expression. + * + * @param array $groups + * an array of groups of rows, each group indexed by group value + * @param object $field_handler + * the handler for the view column to evaluate the expression for + * @param string $group_exp + * currently not supported + * @param string $column_exp + * an optional regexp to count, if omitted all non-empty group values count + * + * @return array + * an array of values, one for each group and one for the column + */ +function views_aggregator_expression($groups, $field_handler, $group_exp = NULL, $column_exp = NULL) { + $values = array(); + + ctools_include('math-expr'); + + // This is meaningful only if some other column aggregation function took + // place before this one. + $this_item = array('raw' => array('value' => $field_handler->last_render)); + + // Based on views_handler_field_math::render() + $tokens = array_map('floatval', $field_handler->get_render_tokens($this_item)); + $value = strtr($column_exp, $tokens); + $expressions = explode(';', $value); + $math = new ctools_math_expr(); + foreach ($expressions as $expression) { + if ($expression !== '') { + $value = $math->evaluate($expression); + } + } + // Should we call number_format($value, $precision, $decimal, $separator) + $values['column'] = $value; + return $values; +} + +/** + * Aggregates a field group as the first member of the group. + * + * @param array $groups + * an array of groups of rows, each group indexed by group value + * @param object $field_handler + * the handler for the view column to find the first group member in + * + * @return array + * an empty array + */ +function views_aggregator_first($groups, $field_handler) { + // This is the default operation, so nothing to do, except for Webforms. + $values = array(); + if (is_a($field_handler, 'webform_handler_field_submission_data')) { + foreach ($groups as $group => $rows) { + $values[$group] = views_aggregator_get_cell($field_handler, key($rows)); + } + //$values['column'] = $values[key($groups)]; + } + return $values; +} + +/** + * Aggregates a field group as the maximum across its members. + * + * Using numbers mixed with non-numeric strings is not recommended. + * + * @param array $groups + * an array of groups of rows, each group indexed by group value + * @param object $field_handler + * the handler for the view column to find the maximum groups member in + * + * @return array + * an array of values, one for each group, plus the 'column' group + */ +function views_aggregator_maximum($groups, $field_handler) { + $values = array(); + foreach ($groups as $group => $rows) { + $is_first = TRUE; + $maximum = NULL; + foreach ($rows as $num => $row) { + $value = views_aggregator_get_cell($field_handler, $num, FALSE); + if (isset($value) && trim($value) != '') { + if ($is_first) { + $maximum = $value; + $is_first = FALSE; + } + elseif ($value > $maximum) { + $maximum = $value; + } + } + } + if (isset($maximum)) { + $values[$group] = $maximum; + if (!isset($maximum_column) || $maximum > $maximum_column) { + $maximum_column = $maximum; + } + } + } + if (isset($maximum_column)) { + $values['column'] = $maximum_column; + } + return $values; +} + +/** + * Aggregates a field group as the median across its members. + * + * This function was written for numbers, but also tries to do a half-decent + * job of dealing with the median of a group/column of strings. + * + * @param array $groups + * an array of groups of rows, each group indexed by group value + * @param object $field_handler + * the handler for the view column to calculate the median for + * + * @return array + * an array of values, one for each group, plus the 'column' group + */ +function views_aggregator_median($groups, $field_handler) { + $values = array(); + $column_cells = array(); + foreach ($groups as $group => $rows) { + $group_cells = array(); + foreach ($rows as $num => $row) { + $cell = views_aggregator_get_cell($field_handler, $num, FALSE); + if ($cell !== FALSE && trim($cell) != '') { + $group_cells[] = $cell; + $column_cells[] = $cell; + } + } + if (!empty($group_cells)) { + sort($group_cells); + $m = (int)(count($group_cells) / 2); + $values[$group] = vap_num($group_cells[$m]) === FALSE || count($group_cells) % 2 ? $group_cells[$m] : ($group_cells[$m] + $group_cells[$m - 1]) / 2; + } + } + if (!empty($column_cells)) { + sort($column_cells); + $m = (int)(count($column_cells) / 2); + $values['column'] = vap_num($column_cells[$m]) === FALSE || count($column_cells) % 2 ? $column_cells[$m] : ($column_cells[$m] + $column_cells[$m - 1]) / 2; + } + return $values; +} + +/** + * Aggregates a field group as the minimum across its members. + * + * @param array $groups + * an array of groups of rows, each group indexed by group value + * @param object $field_handler + * the handler for the view column to find the minimum groups member in + * + * @return array + * an array of values, one for each group, plus the 'column' group + */ +function views_aggregator_minimum($groups, $field_handler) { + $values = array(); + foreach ($groups as $group => $rows) { + $is_first = TRUE; + $minimum = NULL; + foreach ($rows as $num => $row) { + $value = views_aggregator_get_cell($field_handler, $num, FALSE); + // Ignore empty strings + if (isset($value) && trim($value) != '') { + if ($is_first) { + $minimum = $value; + $is_first = FALSE; + } + elseif ($value < $minimum) { + $minimum = $value; + } + } + } + if (isset($minimum)) { + $values[$group] = $minimum; + if (!isset($minimum_column) || $minimum < $minimum_column) { + $minimum_column = $minimum; + } + } + } + if (isset($minimum_column)) { + $values['column'] = $minimum_column; + } + return $values; +} + +/** + * Aggregates a field group as a range. Example: 5.5 - 14.9. + * + * @param array $groups + * an array of groups of rows, each group indexed by group value + * @param object $field_handler + * the handler for the view column + * @param string $separator_group + * the range separator between minimum and maximum values of the group range, + * not used here + * @param string $separator_group + * the range separator between minimum and maximum values of the column range, + * not used here + * + * @return array + * An array of ranges, one for each group and one for the 'column'. + * Each range is an array of two elements, so they can be individually + * rendered. + */ +function views_aggregator_range($groups, $field_handler, $separator_group = NULL, $separator_column = NULL) { + $values = array(); + foreach ($groups as $group => $rows) { + $is_first = TRUE; + foreach ($rows as $num => $row) { + $value = views_aggregator_get_cell($field_handler, $num, FALSE); + if ($is_first) { + $minimum = $maximum = $value; + $is_first = FALSE; + } + elseif (isset($value) && $value < $minimum) { + $minimum = $value; + } + elseif (isset($value) && $value > $maximum) { + $maximum = $value; + } + }; + $values[$group] = ($minimum == $maximum) ? $minimum : array($minimum, $maximum); + if (!isset($minimum_column) || $minimum < $minimum_column) { + $minimum_column = $minimum; + } + if (!isset($maximum_column) || $maximum > $maximum_column) { + $maximum_column = $maximum; + } + } + $values['column'] = ($minimum_column == $maximum_column) ? $minimum_column : array($minimum_column, $maximum_column); + return $values; +} + +/** + * Aggregates a field group as a word, phrase or number. + * + * @param array $groups + * an array of groups of rows, each group indexed by group value + * @param object $field_handler + * the handler for the view column + * @param string $replace_text + * an optional parameter, specifying the replacement text to use + * @param string $column_label + * an optional parameter, specifying a label placed the bottom of the column + * + * @return array + * an array of values, one for each group and one for the 'column' + */ +function views_aggregator_replace($groups, $field_handler, $replace_text = NULL, $column_label = NULL) { + $values = array(); + foreach ($groups as $group => $rows) { + if (isset($replace_text)) { + $values[$group] = $replace_text; + } + if (count($rows) > 1 && isset($replace_text)) { + // With more than one field in a group the fields no longer belong to one + // particular entity. Cannot support hyper-linking, so switch it off. + // Unfortunately this applies to the entire column. + unset($field_handler->options['link_to_node']); + } + } + if (isset($column_label)) { + $values['column'] = $column_label; + } + return $values; +} + +/** + * Aggregates a field group as the sum of its members. + * + * @param array $groups + * an array of groups of rows, each group indexed by group value + * @param object $field_handler + * the handler for the view column to sum groups in + * + * @return array + * an array of values, one for each group, plus the 'column' group + */ +function views_aggregator_sum($groups, $field_handler) { + $values = array(); + $sum_column = 0.0; + foreach ($groups as $group => $rows) { + $sum = 0.0; + foreach ($rows as $num => $row) { + $cell = vap_num(views_aggregator_get_cell($field_handler, $num, FALSE)); + if ($cell !== FALSE) { + $sum += $cell; + } + }; + $values[$group] = $sum; + $sum_column += $sum; + } + $values['column'] = $sum_column; + return $values; +} + +/** + * Aggregates a field group as the tally of its members. + * + * @param array $groups + * an array of groups of rows, each group indexed by group value + * @param object $field_handler + * the handler for the view column to find members of the group + * @param string $separator_group + * the separator to use between tallies in a group, defaults to '
        ' + * @param string $separator_column + * the separator to use between tallies in the totals field, defaults to '
        ' + * + * @return array + * an array of values, one for each group + */ +function views_aggregator_tally($groups, $field_handler, $separator_group, $separator_column) { + $separator_group = empty($separator_group) ? '
        ' : $separator_group; + $separator_column = empty($separator_column) ? '
        ' : $separator_column; + $values = array('column' => array()); + $is_new_php = version_compare(phpversion(), '5.4.0', '>='); + foreach ($groups as $group => $rows) { + $tally = array(); + foreach ($rows as $num => $row) { + $cell = trim(views_aggregator_get_cell($field_handler, $num, TRUE)); + if (empty($cell)) { + // Not tallying empty values. + $values[$group] = NULL; + break; + } + if (isset($tally[$cell])) { + $tally[$cell]++; + } + else { + $tally[$cell] = 1; + } + } + if (count($tally) > 1) { + // With more than one field in a group the fields no longer belong to one + // particular entity. Cannot support hyper-linking, so switch it off. + // Unfortunately this applies to the entire column. + unset($field_handler->options['link_to_node']); + } + if ($is_new_php) { + ksort($tally, SORT_NATURAL | SORT_FLAG_CASE); + } + else { + ksort($tally); + } + $rendered_tally = array(); + foreach ($tally as $cell => $count) { + $rendered_tally[] = "$cell ($count)"; + } + $values[$group] = implode($separator_group, $rendered_tally); + } + return $values; +} + +/** + * Function to extract a double from a string, auto-skipping non-numeric chars. + * + * Comma's and spaces are ignored. + * Scientific notation, e.g., 1.23E-45, is NOT supported, it will return 1.23 + * + * @param string $string + * + * @return mixed + * Returns double or FALSE, if no number could be found in the string. + */ +function vap_num($string) { + // Strip out any spaces and thousand makers. + $stripped = str_replace(array(' ', ','), '', $string); + return preg_match('/[-+]?\d*\.?\d+/', $stripped, $matches) ? (double)$matches[0] : FALSE; +} diff --git a/docroot/sites/all/modules/contrib/views_aggregator/views_aggregator_more_functions/views_aggregator_more_functions.info b/docroot/sites/all/modules/contrib/views_aggregator/views_aggregator_more_functions/views_aggregator_more_functions.info new file mode 100644 index 00000000..cf406749 --- /dev/null +++ b/docroot/sites/all/modules/contrib/views_aggregator/views_aggregator_more_functions/views_aggregator_more_functions.info @@ -0,0 +1,12 @@ +name = Views Aggregator Plus More Functions +description = Adds more aggregation functions for Views Aggregator Plus +package = Views +dependencies[] = views_aggregator +core = 7.x + +; Information added by Drupal.org packaging script on 2015-01-28 +version = "7.x-1.4" +core = "7.x" +project = "views_aggregator" +datestamp = "1422421087" + diff --git a/docroot/sites/all/modules/contrib/views_aggregator/views_aggregator_more_functions/views_aggregator_more_functions.module b/docroot/sites/all/modules/contrib/views_aggregator/views_aggregator_more_functions/views_aggregator_more_functions.module new file mode 100644 index 00000000..442666f8 --- /dev/null +++ b/docroot/sites/all/modules/contrib/views_aggregator/views_aggregator_more_functions/views_aggregator_more_functions.module @@ -0,0 +1,38 @@ + array( + 'group' => t('Group sequence no. *'), + 'column' => NULL, + 'is_renderable' => TRUE, + ), + ); + return $functions; +} + +/** + * Replace the cell by the group sequence number (resulting table row number). + * + * @param array $groups + * @param object $field_handler, not used + * @param int $start_value, # at which to start the sequence, defaults to 1 + * @return values + */ +function views_aggregator_group_seq_number($groups, $field_handler = NULL, $start_value = NULL) { + $values = array(); + $count = (!isset($start_value) || $start_value == '') ? 1 : (int) $start_value; + foreach ($groups as $group => $rows) { + $values[$group] = $count++; + } + return $values; +} \ No newline at end of file diff --git a/docroot/sites/all/modules/contrib/views_distinct/LICENSE.txt b/docroot/sites/all/modules/contrib/views_distinct/LICENSE.txt new file mode 100644 index 00000000..d159169d --- /dev/null +++ b/docroot/sites/all/modules/contrib/views_distinct/LICENSE.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 2 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, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/docroot/sites/all/modules/contrib/views_distinct/README.txt b/docroot/sites/all/modules/contrib/views_distinct/README.txt new file mode 100644 index 00000000..de9764e3 --- /dev/null +++ b/docroot/sites/all/modules/contrib/views_distinct/README.txt @@ -0,0 +1,117 @@ +CONTENTS OF THIS FILE +--------------------- + + * Introduction + * Examples + * Installation + * Known Issues/Shortcomings + * Maintainers + + +INTRODUCTION +------------ +Relationships or other joins in Views often create "duplicate" results. For +example, a node with a field that has multiple values may show up in the View +once per value in the multi-value field. It's frustrating, and the "DISTINCT" +option in the Views UI does not actually solve the problem because the result +row is technically distinct. + +This module aims to give a simple GUI method to remove or aggregate these +"duplicate" rows. For any given field, including "Global: Text" fields, you can +optionally mark the field as filtered ("Filter Repeats") or aggregated +("Aggregate Repeats"). All rows with the same value in that field will either be +removed as duplicates (filtered), or aggregated in-line. + +The "value" of the field as used for filtering or aggregation can be taken +pre-render (fastest and totally cacheable), or post-render (after any rewrite +rules or other transformations have occurred). Post-render actions are a bit +slower (the View must be re-rendered, though the query is not re-run), but also +work with Global fields, like Global: Text w/rewrite rules. + +EXAMPLES +-------- +Consider a Course node with multiple Instructor fields: + + 1) Course title: CHEM 101 - Introduction to Chemistry + Instructor: Mr. Smith + 2) Course title: CHEM 101 - Introduction to Chemistry + Instructor: Ms. Jones + +when Aggregating on the Instructor field, and Filtering on the Course Title +field, the resulting view could like like: + + 1) Course title: CHEM 101 - Introduction to Chemistry + Instructor(s): Mr. Smith, Ms. Jones + +Or, if there were multiple Course nodes (say, for multiple terms) the View may +by default be: + + 1) Course title: CHEM 101 - Introduction to Chemistry + Instructor: Mr. Smith + Term: Fall 2013 + 2) Course title: CHEM 101 - Introduction to Chemistry + Instructor: Ms. Jones + Term: Winter 2013 + +when Filtering on the Course Title field, the view could look like: + + 1) Course title: CHEM 101 - Introduction to Chemistry + +(note, you may want to remove the Term field, since it no longer applies once +we're purposely removing multiple term rows from the results) + +Or, Aggregating on both Instructor and Term fields: + + 1) Course title: CHEM 101 - Introduction to Chemistry + Instructor(s): Mr. Smith, Ms. Jones + Term(s): Fall 2013, Winter 2013 + + +INSTALLATION +------------ +Activate the Views Distinct module, then administer a desired View via Views UI. +Note: Although Views UI is not strictly a dependency of Views Distinct, Views UI +is required to initially configure Views Distinct options. + +Under any field you want to affect, Edit the field and select the appropriate +Aggregate or Filter option under the "Views Distinct Settings" section of the +configuration form. + +If you don't have have a good field to disambiguate "duplicate" rows, you can +add a Global: Text and rewrite it with some combination of existing fields, +like the rewrite values for a course title display: +"[class_subject] [class_number] [class_title]". Be sure to enable the +post-rendering option, or rewrites will not work! + + +KNOWN ISSUES/SHORTCOMINGS +------------------------- +These are on the To-Do list, but don't seem critical enough to prevent this +module from helping a lot of people. Still, they may cause odd behavior, so +it's best if folks know about them: + + 1) Pager counts and the number of rows displayed are incorrect when + filtering (removing) duplicates, and aggregation cannot aggregate fields + from outside the scope of each page, since each page only has access to + the rows on that page. This is a known issue without a fix for now. + Results won't be scrambled, but fewer-than-expected results may show up on + pagers; please test the outcome and choose if the pager is worth the + oddness. + 2) Aggregating fields pre-render actually aggregates the base field in the + query results, so any other display fields that in some way use those + results will be using the aggregated versions. As far as I know there + isn't another way to do this, because hook_views_post_execute() does not + have access to the display fields, only the query result rows. + 3) Potential incompatibility with some style plugins: The "Use the rendered + output of this field" option in Views Distinct may cause odd things to + happen with some style plugins that change output when called twice (e.g. + Views Slideshow - see #1956878: Interference with Views Slideshow). This + is because Views Distinct needs to re-render the rows when it makes + changes to the View output after the fields have been rendered. If you + encounter this issue, uncheck the "Use the rendered output of this field" + option. + + +MAINTAINERS +----------- +- jay.dansand (Jay Dansand) diff --git a/docroot/sites/all/modules/contrib/views_distinct/views_distinct.info b/docroot/sites/all/modules/contrib/views_distinct/views_distinct.info new file mode 100644 index 00000000..665ca2dc --- /dev/null +++ b/docroot/sites/all/modules/contrib/views_distinct/views_distinct.info @@ -0,0 +1,12 @@ +name = Views Distinct +description = Allow filtering/aggregating "distinct" Views result rows based on arbitrary fields. +core = 7.x +package = Views +dependencies[] = views + +; Information added by Drupal.org packaging script on 2015-05-15 +version = "7.x-1.0" +core = "7.x" +project = "views_distinct" +datestamp = "1431707815" + diff --git a/docroot/sites/all/modules/contrib/views_distinct/views_distinct.install b/docroot/sites/all/modules/contrib/views_distinct/views_distinct.install new file mode 100644 index 00000000..3e801c8c --- /dev/null +++ b/docroot/sites/all/modules/contrib/views_distinct/views_distinct.install @@ -0,0 +1,61 @@ + 'Store settings per View->Display->Field', + 'fields' => array( + 'view_name' => array( + 'type' => 'varchar', + 'length' => '64', + 'default' => '', + 'not null' => TRUE, + 'description' => 'View name, as found in views_view.name.', + ), + 'display_id' => array( + 'type' => 'varchar', + 'length' => '64', + 'default' => '', + 'not null' => TRUE, + 'description' => 'Display id, as found in views_display.id.', + ), + 'field_id' => array( + 'type' => 'varchar', + 'length' => '128', + 'default' => '', + 'not null' => TRUE, + 'description' => 'Machine name for the field on this display, as assigned by Views.', + ), + 'settings' => array( + 'type' => 'blob', + 'description' => 'A serialized array of settings for this View->Display->Field.', + 'serialize' => TRUE, + 'serialized default' => 'a:0:{}', + ), + ), + 'indexes' => array( + 'view' => array('view_name'), + 'field_setting' => array('view_name', 'display_id', 'field_id'), + ), + 'unique keys' => array(), + 'foreign keys' => array( + 'view_name' => array( + 'table' => 'views_view', + 'columns' => array('view_name' => 'name'), + ), + 'display_id' => array( + 'table' => 'views_display', + 'columns' => array('display_id' => 'id'), + ), + ), + 'primary key' => array('view_name', 'display_id', 'field_id'), + ); + + return $schema; +} diff --git a/docroot/sites/all/modules/contrib/views_distinct/views_distinct.module b/docroot/sites/all/modules/contrib/views_distinct/views_distinct.module new file mode 100644 index 00000000..03da515e --- /dev/null +++ b/docroot/sites/all/modules/contrib/views_distinct/views_distinct.module @@ -0,0 +1,521 @@ +' . check_plain($output) . ''; + } +} + +/** + * Implements hook_form_FORM_ID_alter(). + * + * Alter all field config forms to add aggregation/filtering options. + */ +function views_distinct_form_views_ui_config_item_form_alter(&$form, &$form_state) { + // Only apply our logic to field configurations: + if ($form_state['type'] != 'field') { + return; + } + + $view_name = $form_state['view']->name; + $display_name = $form_state['display_id']; + $field_name = $form_state['id']; + + $views_distinct_settings = _views_distinct_field_settings_get($view_name, $display_name, $field_name); + + $form['options']['views_distinct'] = array( + '#type' => 'fieldset', + '#title' => t('Views Distinct Settings'), + '#collapsible' => TRUE, + '#collapsed' => TRUE, + ); + $methods = array( + '' => t('Do Nothing'), + 'filter_repeats' => t('Filter Repeats'), + 'aggregate_repeats' => t('Aggregate Repeats'), + ); + $form['options']['views_distinct_action'] = array( + '#type' => 'select', + '#title' => t('Filter/Aggregate this field'), + '#description' => t('Filter (remove) or aggregate (group) result rows based on repetition of this field value. If a field handler applies special post-query formatting (such as the User Name handler that creates links to profiles), Aggregation may break the View unless rendered field output is used (below).'), + '#options' => $methods, + '#default_value' => $views_distinct_settings['action'], + '#fieldset' => 'views_distinct', + ); + $form['options']['views_distinct_aggregate_separator'] = array( + '#type' => 'textfield', + '#title' => t('Aggregation Separator'), + '#description' => t('This value will be used between each value when aggregated results are combined. HTML is allowed, so be careful.'), + '#default_value' => $views_distinct_settings['aggregate_separator'], + '#fieldset' => 'views_distinct', + '#states' => array( + 'invisible' => array( + ':input[name="views_distinct_action"]' => array('value' => ''), + ), + 'visible' => array( + ':input[name="views_distinct_action"]' => array('value' => 'aggregate_repeats'), + ), + ), + ); + $form['options']['views_distinct_post_render'] = array( + '#type' => 'checkbox', + '#title' => t('Use the rendered output of this field'), + '#description' => t('Filter/aggregate based on the rendered output of this field, including any Rewrite Results changes. This has performance implications (the queries are not impacted but the View must be built twice.'), + '#default_value' => $views_distinct_settings['post_render'], + '#fieldset' => 'views_distinct', + '#states' => array( + 'invisible' => array( + ':input[name="views_distinct_action"]' => array('value' => ''), + ), + ), + ); + + // Add our own submit handler, executed before views_ui_standard_submit() + array_unshift($form['buttons']['submit']['#submit'], 'views_distinct_form_views_ui_config_item_form_submit'); +} + +/** + * Submit handler for the views_ui_config_item form. + * + * Because we want our views_distinct options available across all handlers, and + * aren't a handler ourself, we need to store our field options independently. + * All options on the config form that are NOT in + * views_handler_field::option_definition() (ours are not) will be filtered out + * by views_object::unpack_options() when the Views form callback is fired. + * + * @see views_ui_config_item_form_submit() + * @see views_object::unpack_options() + * @see views_handler_field::option_definition() + */ +function views_distinct_form_views_ui_config_item_form_submit($form, &$form_state) { + $view_name = $form_state['view']->name; + $display_name = $form_state['display_id']; + $field_name = $form_state['id']; + $override_display_name = FALSE; + // Only set $override_display_name if such a thing was submitted. + if (!empty($form_state['values']['override']) && is_array($form_state['values']['override'])) { + $override_display_name = reset($form_state['values']['override']); + } + // Check if we're configuring this field for *this display only* or for all + // displays (really, the "default" display): + if (!empty($override_display_name) && $display_name !== $override_display_name) { + // In this case we are setting the configuration for a different display, + // so we'll actually store the setting on the overridden display name + // (probably this is "default"/All Displays). We also need to remove any + // setting we've stored for the actual $display_name, since that no longer + // applies (the user has chosen to NOT override the default settings, + // which would be the only reason to store $display_name-specific settings). + // Remove any existing $display_name setting: + _views_distinct_field_settings_set($view_name, $display_name, $field_name, NULL); + + // Update $display_name so later code will act on the right setting storage: + $display_name = $override_display_name; + } + + // Add/update the settings for this field: + $settings = array( + 'post_render' => $form_state['values']['options']['views_distinct_post_render'], + 'action' => $form_state['values']['options']['views_distinct_action'], + 'aggregate_separator' => $form_state['values']['options']['views_distinct_aggregate_separator'], + ) + _views_distinct_field_settings_defaults(); + + // If no action was desired, delete the settings entirely: + if (empty($settings['action'])) { + $settings = NULL; + } + _views_distinct_field_settings_set($view_name, $display_name, $field_name, $settings); +} + +/** + * Implements hook_views_post_execute(). + * + * Filter through results and remove/aggregate duplicates based on fields. + * We use hook_views_post_execute instead of hook_views_pre_render in order to + * de-dupe before the pager/etc. is built. Post-execute is the first opportunity + * to check the results, so we do it then. + * In this post_execute phase, we only have access to the fields as SQL result + * rows, so there's not a lot of magic we can do except munge the actual SQL + * $view->result array based on the field definitions here. + */ +function views_distinct_views_post_execute(&$view) { + // Get the query fields that will need filtering/aggregation: + $actions = _views_distinct_get_view_actions($view); + $filter_sql_fields = $actions['pre_render']['filter_fields']; + $aggregated_sql_fields = $actions['pre_render']['aggregated_fields']; + + // Check if we have any action we need to take (there are rows to filter or + // aggregate): + // Check if we have any action we need to take (there are rows to filter or + // aggregate): + if (empty($aggregated_sql_fields) && empty($filter_sql_fields)) { + return; + } + + // Iterate each result, aggregating query field results and removing dupes: + $filter_sql_fields_list = array_keys($filter_sql_fields); + foreach ($view->result as $result_index => &$result) { + foreach ($aggregated_sql_fields as $sql_field => &$aggregated_values) { + if (isset($result->{$sql_field})) { + // Add this value to the field's list for aggregation later + // (we use array keys here to automatically remove dupes; the TRUE + // value is a dummy value.) + $aggregated_values['values'][$result->{$sql_field}] = TRUE; + } + } + foreach ($filter_sql_fields_list as $sql_field) { + if (isset($result->{$sql_field})) { + $value = $result->{$sql_field}; + if (!empty($filter_sql_fields[$sql_field][$value])) { + // This is a repeated row! + unset($view->result[$result_index]); + --$view->total_rows; + } + $filter_sql_fields[$sql_field][$value] = TRUE; + } + } + } + + // Now, iterate each remaining result one last time to assign the newly + // aggregated field values, if any: + if (!empty($aggregated_sql_fields)) { + foreach ($aggregated_sql_fields as $sql_field => &$aggregated_values) { + $aggregated_values['values'] = implode($aggregated_values['separator'], array_keys($aggregated_values['values'])); + } + foreach ($view->result as $result_index => &$result) { + foreach ($aggregated_sql_fields as $sql_field => $aggregated_values) { + if (isset($result->{$sql_field})) { + $result->{$sql_field} = $aggregated_values['values']; + } + } + } + } + + // Attempt to update the results cache. + $cache = $view->display_handler->get_plugin('cache'); + if ($cache) { + $cache->cache_set('results'); + } + + // Update the pager, if we're using one. Note: this only updates the page + // count that the pager displays, and even that it does not do fully: + // at most we will only be reducing $view->total_rows by (N - 1) where N is + // the per-page count of items, which may not affect the "total pages" + // sufficiently. For example, if each pager page is showing 10 items, and + // we aggregate rows 1-9 into row 0, we've removed 9 rows. If the total + // results for the query was 100 (even if they all end up being duplicates as + // well! We can't know at this point), which is 10 pages, our "fixed" result + // count would be "91", which would still show 10 pages. In reality, once all + // dupes are filtered/aggregated, we may only have 2 pages. + if ($view->query->pager->use_pager()) { + $view->query->pager->total_items = $view->total_rows; + $view->query->pager->update_page_info(); + } +} + +/** + * Implements hook_process_views_view(). + * + * We only use this hook when we need to use rendered output to remove dupes. + */ +function views_distinct_process_views_view(&$vars) { + // This function used to exist as an implementation of + // hook_views_post_render(&$view, &$output, &$cache), so pull out pieces of + // $vars in order to reproduce the previous variables. + $view = &$vars['view']; + $output = &$view->display_handler->output; + // This $cache logic is based on view::render(), which uses this to determine + // $cache before passing it to hook_views_post_render() implementations. + $cache = FALSE; + if (!empty($view->live_preview)) { + $cache = $view->display_handler->get_plugin('cache'); + } + + // Get the query fields that will need filtering/aggregation: + $actions = _views_distinct_get_view_actions($view); + $filter_row_fields = $actions['post_render']['filter_fields']; + $aggregated_row_fields = $actions['post_render']['aggregated_fields']; + + // Check if we have any action we need to take (there are rows to filter or + // aggregate): + if (empty($aggregated_row_fields) && empty($filter_row_fields)) { + return; + } + + // Iterate every rendered row and either filter or aggregate it. + $filter_row_fields_list = array_keys($filter_row_fields); + // Some style plugins (notably views_plugin_style_summary, which Contextual + // Filters uses to "display summary") do not support fields + // (style_plugin->uses_fields() returns FALSE due to uses_row_plugin() + // returning FALSE, seemingly regardless of the row plugin). In these cases, + // $rendered_fields is always NULL and we cannot force these to render. Bail. + if (empty($view->style_plugin->rendered_fields)) { + return; + } + foreach ($view->style_plugin->rendered_fields as $row_index => $row) { + foreach ($aggregated_row_fields as $field_name => &$aggregated_values) { + if (isset($row[$field_name])) { + // Add this value to the field's list for aggregation later + // (we use array keys here to automatically remove dupes; the TRUE + // value is a dummy value.) + $aggregated_values['values'][$row[$field_name]] = TRUE; + } + } + foreach ($filter_row_fields_list as $field_name) { + $value = $row[$field_name]; + if (!empty($filter_row_fields[$field_name][$value])) { + // This is a repeated row! + unset($view->style_plugin->row_tokens[$row_index]); + unset($view->style_plugin->render_tokens[$row_index]); + unset($view->style_plugin->rendered_fields[$row_index]); + unset($view->result[$row_index]); + --$view->total_rows; + } + $filter_row_fields[$field_name][$value] = TRUE; + } + } + + // Now, iterate each remaining result one last time to assign the newly + // aggregated field values, if any: + if (!empty($aggregated_row_fields)) { + foreach ($aggregated_row_fields as $field_name => &$aggregated_values) { + $aggregated_values['values'] = implode($aggregated_values['separator'], array_keys($aggregated_values['values'])); + } + foreach ($view->style_plugin->rendered_fields as &$row) { + foreach ($aggregated_row_fields as $field_name => $aggregated_values) { + if (isset($row[$field_name])) { + $row[$field_name] = $aggregated_values['values']; + } + } + } + } + + // Update the pager, if we're using one. Note: this only updates the page + // count that the pager displays, and even that it does not do fully: + // at most we will only be reducing $view->total_rows by (N - 1) where N is + // the per-page count of items, which may not affect the "total pages" + // sufficiently. For example, if each pager page is showing 10 items, and + // we aggregate rows 1-9 into row 0, we've removed 9 rows. If the total + // results for the query was 100 (even if they all end up being duplicates as + // well! We can't know at this point), which is 10 pages, our "fixed" result + // count would be "91", which would still show 10 pages. In reality, once all + // dupes are filtered/aggregated, we may only have 2 pages. + if ($view->query->pager->use_pager()) { + $view->query->pager->total_items = $view->total_rows; + $view->query->pager->update_page_info(); + // This logic borrowed from template_preprocess_views_view(). + if (!empty($vars['pager'])) { + $exposed_input = isset($view->exposed_raw_input) ? $view->exposed_raw_input : NULL; + $vars['pager'] = $view->query->render_pager($exposed_input); + } + } + + // Since we've changed the post-rendered field output, we need to run render() + // on $rows again. This will call views_plugin_style::render_grouping(), + // which in turn calls views_plugin_style::get_field(), which refers to our + // modified views_plugin_style::rendered_fields[] array values. + $vars['rows'] = $view->style_plugin->render(); +} + +/** + * Utility function to centralize default field settings. + * + * @return array + * An array of default settings (action, post_render, aggregate_separator). + */ +function _views_distinct_field_settings_defaults() { + return array( + 'action' => '', + 'post_render' => 0, + 'aggregate_separator' => ', ', + ); +} + +/** + * Utility function to get field settings or their defaults. + * + * @param string $view_name + * Machine name of the View currently being rendered/edited. + * @param string $display_name + * Machine name of the Display currently being rendered/edited. + * @param string $field_name + * Machine name of the Field currently being rendered/edited. + * + * @return array + * An array of default settings (action, post_render, aggregate_separator). + */ +function _views_distinct_field_settings_get($view_name, $display_name, $field_name) { + $static_cache = &drupal_static('views_distinct', array()); + // Check if this view_name has been loaded and if not, load it from the DB: + if (!isset($static_cache[$view_name])) { + $static_cache[$view_name] = array(); + $results = db_select('views_distinct', 'vsd') + ->fields('vsd') + ->condition('view_name', $view_name, '=') + ->execute(); + if (empty($results)) { + $results = array(); + } + foreach ($results as $result) { + $settings = unserialize($result->settings) + _views_distinct_field_settings_defaults(); + // HTML is allowed, but filter for terrible exploits in the aggregation + // joiner: + $settings['aggregate_separator'] = filter_xss($settings['aggregate_separator']); + $static_cache[$view_name] = array_merge_recursive( + $static_cache[$view_name], + array( + $result->display_id => array( + $result->field_id => $settings, + ), + ) + ); + } + } + // Check for a result in static cache: + if (!empty($static_cache[$view_name][$display_name][$field_name])) { + return $static_cache[$view_name][$display_name][$field_name]; + } + // Check for a "default" result: + elseif (!empty($static_cache[$view_name]['default'][$field_name])) { + return $static_cache[$view_name]['default'][$field_name]; + } + + // Nothing found, so return the defaults: + return _views_distinct_field_settings_defaults(); +} + +/** + * Utility function to set/remove field settings. + * + * @param string $view_name + * Machine name of the View currently being rendered/edited. + * @param string $display_name + * Machine name of the Display currently being rendered/edited. + * @param string $field_name + * Machine name of the Field currently being rendered/edited. + * @param array $settings + * (optional) Array of new settings to store. If absent/empty, the record is + * removed, not updated. + */ +function _views_distinct_field_settings_set($view_name, $display_name, $field_name, $settings = NULL) { + $static_cache = &drupal_static('views_distinct', array()); + if (empty($display_name)) { + $display_name = 'default'; + } + // Whether updating/inserting or removing, we start with removing the current + // setting, if it exists: + db_delete('views_distinct') + ->condition('view_name', $view_name, '=') + ->condition('display_id', $display_name, '=') + ->condition('field_id', $field_name, '=') + ->execute(); + + // Now, optionally insert a new (or updated) value: + if (!empty($settings)) { + // Updating the stored record. + $settings = (array) $settings + _views_distinct_field_settings_defaults(); + // If !empty($settings), we're inserting/updating this setting; since we've + // already removed the setting either way, this is always a simple INSERT: + $record = array( + 'view_name' => $view_name, + 'display_id' => $display_name, + 'field_id' => $field_name, + 'settings' => $settings, + ); + drupal_write_record('views_distinct', $record); + } + else { + // If we're removing settings, revert the static cache to defaults: + $settings = _views_distinct_field_settings_defaults(); + } + if (!isset($static_cache[$view_name])) { + $static_cache[$view_name] = array(); + } + if (!isset($static_cache[$view_name][$display_name])) { + $static_cache[$view_name][$display_name] = array(); + } + if (!isset($static_cache[$view_name][$display_name][$field_name])) { + $static_cache[$view_name][$display_name][$field_name] = $settings; + } +} + +/** + * Utility function to get the actions (if any) applicable to a given field. + * + * Cycles through the passed $view, building an array of pre_render and + * post_render actions. + * + * @param object $view + * The view being displayed/rendered. + * + * @return array + * Array of applicable actions for the view, in the format of + * [(pre|post)_render] => [filter_fields] => [field_names...] => array() and + * [(pre|post)_render] => [aggregated_fields] => [field_names...] => array() + */ +function _views_distinct_get_view_actions(&$view) { + $static = &drupal_static(__FUNCTION__, array()); + + $view_name = $view->name; + $display_name = $view->current_display; + + if (!empty($static) && !empty($static[$view_name]) && !empty($static[$view_name][$display_name])) { + return $static[$view_name][$display_name]; + } + + if (!isset($static[$view_name])) { + $static[$view_name] = array(); + } + + $static[$view_name][$display_name] = array( + 'pre_render' => array( + 'filter_fields' => array(), + 'aggregated_fields' => array(), + ), + 'post_render' => array( + 'filter_fields' => array(), + 'aggregated_fields' => array(), + ), + ); + + $actions = &$static[$view_name][$display_name]; + + foreach ($view->field as $field_name => &$field_definition) { + // Iterate every defined field (note: this is not every *row*, so this list + // is generally small.) + // Get any views_distinct settings from the DB: + $settings = _views_distinct_field_settings_get($view_name, $display_name, $field_name); + // Check if we should be acting on the field (there's an action assigned): + if (!empty($settings['action'])) { + $filter_row_fields = &$actions['post_render']['filter_fields']; + $aggregated_row_fields = &$actions['post_render']['aggregated_fields']; + if (!$settings['post_render']) { + // The result row key is different from $field_name in the post_execute + // (before render) implementation: + $field_name = $field_definition->field_alias; + $filter_row_fields = &$actions['pre_render']['filter_fields']; + $aggregated_row_fields = &$actions['pre_render']['aggregated_fields']; + } + if ($settings['action'] == 'filter_repeats') { + // Add this field to the set of filtered duplicate fields: + $filter_row_fields[$field_name] = array(); + } + elseif ($settings['action'] == 'aggregate_repeats') { + // Add this field to the set of aggregated fields: + $aggregated_row_fields[$field_name] = array( + 'values' => array(), + 'separator' => $settings['aggregate_separator'], + ); + } + } + } + + return $actions; +} diff --git a/docroot/sites/all/modules/contrib/views_merge_rows/LICENSE.txt b/docroot/sites/all/modules/contrib/views_merge_rows/LICENSE.txt new file mode 100644 index 00000000..d159169d --- /dev/null +++ b/docroot/sites/all/modules/contrib/views_merge_rows/LICENSE.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 2 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, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/docroot/sites/all/modules/contrib/views_merge_rows/README.txt b/docroot/sites/all/modules/contrib/views_merge_rows/README.txt new file mode 100644 index 00000000..3335d723 --- /dev/null +++ b/docroot/sites/all/modules/contrib/views_merge_rows/README.txt @@ -0,0 +1,29 @@ +Sometimes when you use relationships in views you get a number of rows with the +same content in some of the fields. This results in a huge table (grid, list, +etc.) that affects the usability of your view. + +The Views Merge Rows module provides a way to combine rows with the same content +in the specified fields. + +Installation and Configuration +------------------------------ +After installing the module you get the “Merge rows” item in the OTHER section +of the Views UI. + +To configure the row merging click the link next to the “Merge rows” item. + +In the configuration dialog you can enable/disable row merging with the +“Merge rows with the same content in the specified fields” checkbox. +After you enable the merging you will see the table with all the available +fields. You can specify the “Merge option” for each field. + +The fields with “Merge option” set to “Use values of this field as a filter” are +used to check which rows should be merged. If several rows contain exactly the +same values in all of these fields, they are merged together. The values for +other fields are calculated as follows: + +For fields with “Merge option” set to “Use the first value of this field” only +the value from the first merged rows is used. The values in other rows are +disregarded. +For fields with “Merge option” set to “Merge values of this field” all the +values appears in the resulting row. diff --git a/docroot/sites/all/modules/contrib/views_merge_rows/views_merge_rows.info b/docroot/sites/all/modules/contrib/views_merge_rows/views_merge_rows.info new file mode 100644 index 00000000..3f816e01 --- /dev/null +++ b/docroot/sites/all/modules/contrib/views_merge_rows/views_merge_rows.info @@ -0,0 +1,14 @@ +name = Views Merge Rows +description = Adds possibility to merge rows with the same values in the specified fields. +package = "Views" +core = 7.x + +dependencies[] = views +files[] = views_merge_rows_plugin_display_extender.inc + +; Information added by drupal.org packaging script on 2013-06-11 +version = "7.x-1.0-rc1" +core = "7.x" +project = "views_merge_rows" +datestamp = "1370957152" + diff --git a/docroot/sites/all/modules/contrib/views_merge_rows/views_merge_rows.module b/docroot/sites/all/modules/contrib/views_merge_rows/views_merge_rows.module new file mode 100644 index 00000000..66791d1a --- /dev/null +++ b/docroot/sites/all/modules/contrib/views_merge_rows/views_merge_rows.module @@ -0,0 +1,181 @@ + 3, + ); +} + +/** + * Implements hook_theme(). + */ +function views_merge_rows_theme() { + $theme_info = array( + 'views_merge_rows_display_extender_plugin_table' => array( + 'render element' => 'form', + ), + ); + return $theme_info; +} + +/** + * Theme the form for the merge rows plugin. + */ +function theme_views_merge_rows_display_extender_plugin_table($variables) { + $form = $variables['form']; + $output = ''; + + $header = array( + t('Field'), + t('Merge option'), + t('Separator'), + ); + $rows = array(); + foreach (element_children($form['field_config']) as $id) { + $row = array(); + $row[] = check_plain(drupal_render($form['field_config'][$id]['name'])); + $row[] = drupal_render($form['field_config'][$id]['merge_option']); + $row[] = drupal_render($form['field_config'][$id]['separator']); + $rows[] = $row; + } + + $table = theme('table', array('header' => $header, 'rows' => $rows)); + + $form['table_fieldset'] = array( + '#title' => t('Configure merging options for the fields'), + '#type' => 'fieldset', + '#dependency' => array('edit-options-merge-rows' => array(1)), + ); + + $form['table_fieldset']['table'] = array( + '#type' => 'markup', + '#markup' => $table, + ); + $output .= drupal_render_children($form); + return $output; +} + + +/** + * Implements hook_views_pre_render(). + * + * Merges the rows according to the settings for current display. + */ +function views_merge_rows_views_pre_render(&$view) { + $options = $view->display_handler->extender['views_merge_rows']->get_options(); + if (!$options['merge_rows']) { + return; + } + $rendered_fields = $view->style_plugin->render_fields($view->result); + $filters = array(); + + // Array, where each element corresponds to the row after removing the merged + // rows. This element is an array of fields (field_name is used as a key). + // The values of this field depends on the merge_option as follows: + // merge_unique - array of unique values from all merged rows + // merge - array of values from all merger rows + // filter - the value from the first merged rows (all values from the merged + // rows are the same) + // first_value - the value from the first merged rows + // count_unique - array of unique values from all merged rows + // count - the number of merged rows. + $merged_rows = array(); + foreach ($rendered_fields as $row_index => $rendered_row) { + $filter_value = ''; + foreach ($options['field_config'] as $field_name => $field_config) { + if ($field_config['merge_option'] == 'filter') { + $filter_value .= $rendered_row[$field_name]; + } + } + if (!array_key_exists($filter_value, $filters)) { + $filters[$filter_value] = $row_index; + $merged_row = array(); + foreach ($options['field_config'] as $field_name => $field_config) { + switch ($field_config['merge_option']) { + case 'count_unique': + case 'merge_unique': + case 'merge': + $merged_row[$field_name] = array($rendered_row[$field_name]); + break; + + case 'count': + $merged_row[$field_name] = 1; + break; + + case 'filter': + case 'first_value': + $merged_row[$field_name] = $rendered_row[$field_name]; + break; + + } + } + $merged_rows[$row_index] = $merged_row; + } + else { + $merge_row_index = $filters[$filter_value]; + $merged_row = $merged_rows[$merge_row_index]; + foreach ($options['field_config'] as $field_name => $field_config) { + switch ($field_config['merge_option']) { + case 'merge_unique': + case 'count_unique': + if (!in_array($rendered_row[$field_name], $merged_row[$field_name])) { + $merged_row[$field_name][] = $rendered_row[$field_name]; + } + break; + + case 'merge': + $merged_row[$field_name][] = $rendered_row[$field_name]; + break; + + case 'count': + $merged_row[$field_name] = $merged_row[$field_name] + 1; + break; + + case 'filter': + case 'first_value': + // Do nothing - we already have a value from the first merged row. + break; + } + } + unset($view->style_plugin->row_tokens[$row_index]); + unset($view->style_plugin->render_tokens[$row_index]); + unset($view->style_plugin->rendered_fields[$row_index]); + unset($view->result[$row_index]); + --$view->total_rows; + $merged_rows[$merge_row_index] = $merged_row; + } + } + + // Store the merged rows back to the view's style plugin. + foreach ($merged_rows as $row_index => $merged_row) { + foreach ($options['field_config'] as $field_name => $field_config) { + switch ($field_config['merge_option']) { + case 'merge': + case 'merge_unique': + $view->style_plugin->rendered_fields[$row_index][$field_name] + = implode($field_config['separator'], $merged_row[$field_name]); + break; + + case 'count_unique': + $view->style_plugin->rendered_fields[$row_index][$field_name] + = count($merged_row[$field_name]); + break; + + case 'count': + case 'filter': + case 'first_value': + $view->style_plugin->rendered_fields[$row_index][$field_name] + = $merged_row[$field_name]; + break; + } + } + } + +} diff --git a/docroot/sites/all/modules/contrib/views_merge_rows/views_merge_rows.views.inc b/docroot/sites/all/modules/contrib/views_merge_rows/views_merge_rows.views.inc new file mode 100644 index 00000000..0a05965b --- /dev/null +++ b/docroot/sites/all/modules/contrib/views_merge_rows/views_merge_rows.views.inc @@ -0,0 +1,20 @@ + t('Merge rows'), + 'help' => t('Merges rows with the same values in the specified fields.'), + 'path' => $path, + 'handler' => 'views_merge_rows_plugin_display_extender', + ); + return $plugins; +} diff --git a/docroot/sites/all/modules/contrib/views_merge_rows/views_merge_rows_plugin_display_extender.inc b/docroot/sites/all/modules/contrib/views_merge_rows/views_merge_rows_plugin_display_extender.inc new file mode 100644 index 00000000..9ee8a79f --- /dev/null +++ b/docroot/sites/all/modules/contrib/views_merge_rows/views_merge_rows_plugin_display_extender.inc @@ -0,0 +1,163 @@ + FALSE, 'bool' => TRUE); + $options['field_config'] = array('default' => array()); + } + + + /** + * Returns configuration for row merging. + * + * Only returns the configuration for the fields present in the view. + * If a new field was added to the view, the default configuration for this + * field is returned. + * + * @return array + * Configuration for row merging. + */ + public function get_options() { + if ($this->display->display->handler->uses_fields()) { + $options = array(); + $options['merge_rows'] = $this->display->get_option('merge_rows'); + if (empty($options['merge_rows'])) { + $options['merge_rows'] = FALSE; + } + $options['field_config'] = array(); + $field_config = $this->display->get_option('field_config'); + $fields = $this->display->display->handler->get_option('fields'); + foreach ($fields as $field => $info) { + if (isset($field_config[$field])) { + $options['field_config'][$field] = $field_config[$field]; + } + else { + $options['field_config'][$field] = array( + 'merge_option' => 'merge_unique', + 'separator' => ', ', + ); + } + } + } + else { + $options['merge_rows'] = FALSE; + $options['field_config'] = array(); + } + return $options; + } + + + /** + * Provide a form to edit options for this plugin. + */ + protected function views_merge_rows_options_form(&$form, &$form_state) { + $options = $this->get_options(); + + if ($this->display->display->handler->use_pager()) { + $form['warning_markup'] = array( + '#markup' => '
        ' . t('It is highly recommended to disable pager if you merge rows.') . '
        ', + ); + } + + $form['#tree'] = TRUE; + $form['#theme'] = 'views_merge_rows_display_extender_plugin_table'; + $form['#title'] .= t('Merge rows with the same content.'); + $form['merge_rows'] = array( + '#type' => 'checkbox', + '#title' => t('Merge rows with the same content in the specified fields'), + '#default_value' => $options['merge_rows'], + ); + // Create an array of allowed columns from the data we know: + $field_names = $this->display->display->handler->get_field_labels(); + + foreach ($field_names as $field => $name) { + $safe = str_replace(array('][', '_', ' '), '-', $field); + // Markup for the field name. + $form['field_config'][$field]['name'] = array( + '#markup' => $name, + ); + + // Select for merge options. + $form['field_config'][$field]['merge_option'] = array( + '#type' => 'select', + '#options' => array( + 'merge_unique' => t('Merge unique values of this field'), + 'merge' => t('Merge values of this field'), + 'filter' => t('Use values of this field as a filter'), + 'first_value' => t('Use the first value of this field'), + 'count' => t('Count merged values of this field'), + 'count_unique' => t('Count merged unique values of this field'), + ), + '#default_value' => $options['field_config'][$field]['merge_option'], + ); + + $form['field_config'][$field]['separator'] = array( + '#title' => t('Separator:'), + '#type' => 'textfield', + '#size' => 10, + '#default_value' => $options['field_config'][$field]['separator'], + '#dependency' => array('edit-options-field-config-' . $safe . '-merge-option' => array('merge', 'merge_unique')), + ); + } + } + + /** + * Saves the row merge options. + */ + protected function views_merge_rows_options_form_submit(&$form, &$form_state) { + foreach ($form_state['values']['options'] as $option => $value) { + $this->display->set_option($option, $value); + } + } + + /** + * Provide the form to set the rows merge options. + */ + public function options_form(&$form, &$form_state) { + switch ($form_state['section']) { + case 'views_merge_rows': + $this->views_merge_rows_options_form($form, $form_state); + break; + } + } + + /** + * Saves the row merge options. + */ + public function options_submit(&$form, &$form_state) { + switch ($form_state['section']) { + case 'views_merge_rows': + $this->views_merge_rows_options_form_submit($form, $form_state); + break; + } + + } + + /** + * Provide the default summary for options in the views UI. + */ + public function options_summary(&$categories, &$options) { + if ($this->display->display->handler->uses_fields()) { + $configuration = $this->get_options(); + $options['views_merge_rows'] = array( + 'category' => 'other', + 'title' => t('Merge rows'), + 'value' => $configuration['merge_rows'] ? t('Settings') : t('No'), + 'desc' => t('Allow merging rows with the same content in the specified fields.'), + ); + } + } + +} diff --git a/docroot/sites/all/modules/custom/auto_role_allocation/auto_role_allocation.module b/docroot/sites/all/modules/custom/auto_role_allocation/auto_role_allocation.module index 7cb6df88..9a8c9134 100644 --- a/docroot/sites/all/modules/custom/auto_role_allocation/auto_role_allocation.module +++ b/docroot/sites/all/modules/custom/auto_role_allocation/auto_role_allocation.module @@ -259,6 +259,14 @@ function auto_role_allocation_menu() { 'access arguments' => array('access content'), 'type' => MENU_CALLBACK, ); + $items['generate_csv'] = array( + 'title' => 'Generate csv file of raffle user list', + 'page callback' => 'generate_csv_of_raffle_user', + 'access arguments' => array('access content'), + 'type' => MENU_CALLBACK, + ); + + return $items; } @@ -318,11 +326,11 @@ function raffle_entry_process() { $rafle_query = db_select('field_data_field_reward_raffle', 'rf'); $rafle_query->join('field_data_field_reward_criteria_reward', 'rcr', 'rf.entity_id = rcr.field_reward_criteria_reward_target_id'); - $rafle_query->join('field_data_field_reward_criteria_activity', 'rca', 'rca.entity_id = rcr.entity_id'); - $rafle_query->join('eck_activity', 'ecka', 'rca.field_reward_criteria_activity_target_id = ecka.id'); + //$rafle_query->join('field_data_field_reward_criteria_activity', 'rca', 'rca.entity_id = rcr.entity_id'); + //$rafle_query->join('eck_activity', 'ecka', 'rca.field_reward_criteria_activity_target_id = ecka.id'); $rafle_query->join('eck_raffle', 'er', 'rf.field_reward_raffle_target_id = er.id'); $rafle_query->fields('er', array('id','title')); - $rafle_query->fields('ecka', array('title','id')); + //$rafle_query->fields('ecka', array('title','id')); $rafle_query->fields('rcr', array('field_reward_criteria_reward_target_id')); $res = $rafle_query->execute()->fetchAll(); @@ -337,8 +345,8 @@ function raffle_entry_process() { $count = $result->rowCount(); $raffle_title = $value->title; - $activity_id = $value->ecka_id; - $activity_name = $value->ecka_title; + //$activity_id = $value->ecka_id; + //$activity_name = $value->ecka_title; $reward_id = $value->field_reward_criteria_reward_target_id; @@ -378,13 +386,18 @@ function raffle_user_list($form, &$form_state) { $grade = $_REQUEST['grade']; $_SESSION['active_r_id'] = $active_raffle_id; - - $query = db_select('field_data_field_raffle_entry_raffle', 'rentry'); $query->join('eck_raffle', 'eck_r', 'rentry.entity_id = eck_r.id'); $query->join('users', 'u', 'u.uid = eck_r.uid'); $query->join('profile', 'p', 'u.uid = p.uid'); - + $query->join('field_data_field_user_first_name', 'fn', 'fn.entity_id = p.pid'); + $query->join('field_data_field_user_last_name', 'ln', 'ln.entity_id = p.pid'); + $query->join('field_data_field_user_birthday', 'user_birth', 'user_birth.entity_id = p.pid'); + $query->leftJoin('field_data_field_user_phone', 'phno', 'phno.entity_id = p.pid'); + if($library_branch == '') { + $query->leftJoin('field_data_field_library_branch', 'lb', 'lb.entity_id = p.pid'); + $query->leftJoin('taxonomy_term_data', 'lbtd', 'lbtd.tid = lb.field_library_branch_tid'); + } $cnd = array(); if ($school != '') { $query->leftJoin('field_data_field_school', 'fs', 'fs.entity_id = p.pid'); @@ -419,16 +432,28 @@ function raffle_user_list($form, &$form_state) { } } $query->fields('eck_r', array('uid')); - $query->fields('u', array('name')); - // echo $active_raffle_id . ' '; - // echo $query->__toString(); die; + $query->fields('u', array('name', 'mail')); + $query->fields('fn', array('field_user_first_name_value')); + $query->fields('ln', array('field_user_last_name_value')); + $query->fields('user_birth', array('field_user_birthday_value')); + $query->fields('lbtd', array('name')); + $query->fields('phno', array('field_user_phone_value')); $res = $query->execute()->fetchAll(); $raffle_users_list = array(); foreach($res as $v) { $uid = $v->uid; + $user_roles = user_load($uid); + $role_name = array_values($user_roles->roles); + $role_name = $role_name[1]; $name = $v->name; + $library_branch_name = $v->lbtd_name; + $first_name = $v->field_user_first_name_value; + $last_name = $v->field_user_last_name_value; + $date_of_birth = $v->field_user_birthday_value; + $phone_no = $v->field_user_phone_value; + $mail = $v->mail; if (array_key_exists($uid, $raffle_users_list)) { $temp = $raffle_users_list[$uid]; @@ -444,43 +469,282 @@ function raffle_user_list($form, &$form_state) { $count = $rs->rowCount(); if ($count) { - $raffle_users_list[$uid] = array('count' => 1, 'raffle_winner' => 'Yes', 'name' => $name); + $raffle_users_list[$uid] = array('count' => 1, 'raffle_winner' => 'Yes', 'name' => $name, 'library_branch' => $library_branch_name, 'user_role' => $role_name, 'first_name' => $first_name, 'last_name' => $last_name, 'date_of_birth' => $date_of_birth, 'phone_no' => $phone_no, 'mail' => $mail); } else { - $raffle_users_list[$uid] = array('count' => 1, 'raffle_winner' => 'No', 'name' => $name); + $raffle_users_list[$uid] = array('count' => 1, 'raffle_winner' => 'No', 'name' => $name, 'library_branch' => $library_branch_name, 'user_role' => $role_name, 'first_name' => $first_name, 'last_name' => $last_name, 'date_of_birth' => $date_of_birth, 'phone_no' => $phone_no, 'mail' => $mail); } } } $tbl_header = array( - 'Name', + 'Username', + 'User role', + 'First name', + 'Last name', + 'Library branch', + 'Date of birth', + 'Phone no.', + 'Email', 'Raffle Count', - 'Raffle Winner', - 'Select Winners' + 'Raffle Winner' ); $tbl_rows = array(); foreach($raffle_users_list as $k => $v) { $user_name = $v['name']; + $user_role = $v['user_role']; + $first_name = $v['first_name']; + $last_name = $v['last_name']; + $library_branch_name = $v['library_branch']; + $date_of_birth = $v['date_of_birth']; + $phone_no = $v['phone_no']; + $email = $v['mail']; $raffle_count = $v['count']; $raffle_winner = $v['raffle_winner']; - $operation = ""; + //$operation = ""; $tbl_rows[] = array( array( 'data' => $user_name), + array( 'data' => $user_role), + array( 'data' => $first_name), + array( 'data' => $last_name), + array( 'data' => $library_branch_name), + array( 'data' => $date_of_birth), + array( 'data' => $phone_no), + array( 'data' => $email), array( 'data' => $raffle_count), array( 'data' => $raffle_winner), - array( 'data' => $operation), + //array( 'data' => $operation), ); } + // comment sumit button + $output = theme('table', array( 'header' => $tbl_header, 'rows' => $tbl_rows )); $output .= ""; echo $output; } +function generate_csv_of_raffle_user() { + $output = array(); + $raffle_id = $_GET['raffle_id']; + $reward_id = $_GET['reward_id']; + $school = $_GET['school']; + $organization = $_GET['organization']; + $library_branch = $_GET['library_branch']; + $grade = $_GET['grade']; + + $query = db_select('field_data_field_raffle_entry_raffle', 'rentry'); + $query->join('eck_raffle', 'eck_r', 'rentry.entity_id = eck_r.id'); + $query->join('users', 'u', 'u.uid = eck_r.uid'); + $query->join('profile', 'p', 'u.uid = p.uid'); + $query->join('field_data_field_user_first_name', 'fn', 'fn.entity_id = p.pid'); + $query->join('field_data_field_user_last_name', 'ln', 'ln.entity_id = p.pid'); + $query->join('field_data_field_user_birthday', 'user_birth', 'user_birth.entity_id = p.pid'); + $query->leftJoin('field_data_field_user_phone', 'phno', 'phno.entity_id = p.pid'); + if($library_branch == '') { + $query->leftJoin('field_data_field_library_branch', 'lb', 'lb.entity_id = p.pid'); + $query->leftJoin('taxonomy_term_data', 'lbtd', 'lbtd.tid = lb.field_library_branch_tid'); + } + + + $cnd = array(); + if ($school != '') { + $query->leftJoin('field_data_field_school', 'fs', 'fs.entity_id = p.pid'); + $query->leftJoin('taxonomy_term_data', 'fstd', 'fstd.tid = fs.field_school_tid'); + $cnd[] = array('fs.field_school_tid', $school); + } + + if ($organization != '') { + $query->join('field_data_field_user_organization', 'uo', 'uo.entity_id = p.pid'); + $query->join('taxonomy_term_data', 'uotd', 'uotd.tid = uo.field_user_organization_tid'); + $cnd[] = array('uo.field_user_organization_tid', $organization); + } + + if ($library_branch != '') { + $query->join('field_data_field_library_branch', 'lb', 'lb.entity_id = p.pid'); + $query->join('taxonomy_term_data', 'lbtd', 'lbtd.tid = lb.field_library_branch_tid'); + $cnd[] = array('lb.field_library_branch_tid', $library_branch); + } + + if ($grade != '') { + $query->join('field_data_field_user_grade', 'ug', 'ug.entity_id = p.pid'); + $query->join('taxonomy_term_data', 'ugtd', 'ugtd.tid = ug.field_user_grade_tid'); + $cnd[] = array('ug.field_user_grade_tid', $grade); + } + + $query->condition('rentry.field_raffle_entry_raffle_target_id', $raffle_id, '='); + if (count($cnd)) { + foreach($cnd as $val) { + $cnd_fld = $val[0]; + $cnd_val = $val[1]; + $query->condition($cnd_fld, $cnd_val); + } + } + $query->fields('eck_r', array('uid')); + $query->fields('u', array('name', 'mail')); + $query->fields('fn', array('field_user_first_name_value')); + $query->fields('ln', array('field_user_last_name_value')); + $query->fields('user_birth', array('field_user_birthday_value')); + $query->fields('lbtd', array('name')); + $query->fields('phno', array('field_user_phone_value')); + $query->orderBy('name', 'ASc'); + $res = $query->execute()->fetchAll(); + + $raffle_users_list = array(); + + foreach($res as $v) { + $uid = $v->uid; + $user_roles = user_load($uid); + $role_name = array_values($user_roles->roles); + $role_name = $role_name[1]; + $name = $v->name; + $library_branch = $v->lbtd_name; + $first_name = $v->field_user_first_name_value; + $last_name = $v->field_user_last_name_value; + $date_of_birth = $v->field_user_birthday_value; + $phone_no = $v->field_user_phone_value; + $mail = $v->mail; + // if (array_key_exists($uid, $raffle_users_list)) { + // $temp = $raffle_users_list[$uid]; + // $temp['count'] = $temp['count'] + 1; + // $raffle_users_list[$uid] = $temp; + // } else { + // check if this user has won raffel before + $qry = db_select('eck_raffle', 'r'); + $qry->condition('r.uid', $uid); + $qry->condition('r.type', 'raffle_winner'); + $qry->fields('r', array('id')); + $rs = $qry->execute(); + $count = $rs->rowCount(); + + if ($count) { + $raffle_users_list[] = array('serial_no.' => $i, 'raffle_winner' => 'Yes', 'name' => $name, 'library_branch' => $library_branch, 'user_role' => $role_name, 'first_name' => $first_name, 'last_name' => $last_name, 'date_of_birth' => $date_of_birth, 'phone_no' => $phone_no, 'mail' => $mail); + } else { + $raffle_users_list[] = array('serial_no.' => $i, 'raffle_winner' => 'No', 'name' => $name, 'library_branch' => $library_branch, 'user_role' => $role_name, 'first_name' => $first_name, 'last_name' => $last_name, 'date_of_birth' => $date_of_birth, 'phone_no' => $phone_no, 'mail' => $mail); + } + //} + } + + $i = 1; + + foreach($raffle_users_list as $k => $v) { + $user_name = $v['name']; + $user_role = $v['user_role']; + $first_name = $v['first_name']; + $last_name = $v['last_name']; + $library_branch = $v['library_branch']; + $date_of_birth = $v['date_of_birth']; + $phone_no = $v['phone_no']; + $email = $v['mail']; + //$raffle_count = $v['count']; + if($user_name == '') { + $user_name = ' '; + } + else { + $user_name = $v['name']; + } + if($user_role == '') { + $user_role = ' '; + } + else { + $user_role = $v['user_role']; + } + if($library_branch == '') { + $library_branch = ' '; + } + else { + $library_branch = $v['library_branch']; + } + + if($first_name == '') { + $first_name = ' '; + } + else { + $first_name = $v['first_name']; + } + if($last_name == '') { + $last_name = ' '; + } + else { + $last_name = $v['last_name']; + } + if($date_of_birth == '') { + $date_of_birth = ' '; + } + else { + $date_of_birth = $v['date_of_birth']; + } + if($phone_no == '') { + $phone_no = ' '; + } + else { + $phone_no = $v['phone_no']; + } + if($email == '') { + $email = ' '; + } + else { + $email = $v['mail']; + } + // if($raffle_count == '') { + // $raffle_count = ' '; + // } + // else { + // $raffle_count = $v['count']; + // } + + $raffle_winner = $v['raffle_winner']; + $operation = ""; + $output[] = array( + 'Serial_no.' => $i, + 'name' => $user_name, + 'user_role' => $user_role, + 'first_name' => $first_name, + 'last_name' => $last_name, + 'library_branch' => $library_branch, + 'date_of_birth' => $date_of_birth, + 'phone_no' => $phone_no, + 'email' => $email, + //'number_of_tickets' => $raffle_count, + ); + $i++; + } + + $time = date('m-d-Y', time()); + + $filename = 'raffle_ticket_list_' .$time. '.csv'; + + drupal_add_http_header('Content-Type', 'text/csv; utf-8'); + drupal_add_http_header('Content-Disposition', 'attachment; filename =' .$filename); + $result = ''; + $keys = array( + 'Serial no.', + 'Name', + 'User role', + 'First name', + 'Last name', + 'Library branch', + 'Date of birth', + 'Phone no', + 'Email' + ); + + + $result .= implode(",", $keys) . "\n"; + if (count($output)) { + foreach ($output as $val) { + $result .= implode(",", $val) . "\n"; + } + } + echo $result; + exit; +} + function _get_options($vocab_name) { $term_list = taxonomy_vocabulary_machine_name_load($vocab_name); $tree = taxonomy_get_tree($term_list->vid); @@ -743,7 +1007,7 @@ function generate_json_data() { if($reward_claimed) { $events[] = array( - 'title' => '
        '.'
        Congratulations! You earned prize!
        ', + 'title' => '
        '.'
        Congratulations, You earned a prize!
        ', 'date' => $value->date, ); } diff --git a/docroot/sites/all/modules/custom/auto_role_allocation_teen/auto_role_allocation_teen.info b/docroot/sites/all/modules/custom/auto_role_allocation_teen/auto_role_allocation_teen.info new file mode 100644 index 00000000..b8f612a6 --- /dev/null +++ b/docroot/sites/all/modules/custom/auto_role_allocation_teen/auto_role_allocation_teen.info @@ -0,0 +1,4 @@ +name = Play @ Your Library auto role allotment for Teen Program +description = Customizations for auto role allotment for teen program +core = 7.x +version = 7.x diff --git a/docroot/sites/all/modules/custom/auto_role_allocation_teen/auto_role_allocation_teen.install b/docroot/sites/all/modules/custom/auto_role_allocation_teen/auto_role_allocation_teen.install new file mode 100644 index 00000000..0178890f --- /dev/null +++ b/docroot/sites/all/modules/custom/auto_role_allocation_teen/auto_role_allocation_teen.install @@ -0,0 +1,41 @@ + 'To save the state of calendar', + 'fields' => array( + 'id' => array( + 'description' => 'id field', + 'type' => 'serial', + 'not null' => TRUE, + 'unsigned' => TRUE, + ), + 'uid' => array( + 'description' => 'User id', + 'type' => 'int', + 'not null' => TRUE, + ), + 'image_url' => array( + 'description' => 'calendar image', + 'type' => 'varchar', + 'length' => '256', + ), + 'date' => array( + 'description' => 'calendar event date', + 'type' => 'varchar', + 'length' => '256', + ), + 'reward_id' => array( + 'description' => 'Reward id', + 'type' => 'int', + 'not null' => TRUE, + 'default' => 0, + ), + ), + 'primary key' => array('id'), + ); + + return $schema; +} + diff --git a/docroot/sites/all/modules/custom/auto_role_allocation_teen/auto_role_allocation_teen.module b/docroot/sites/all/modules/custom/auto_role_allocation_teen/auto_role_allocation_teen.module new file mode 100644 index 00000000..cdf6a3b3 --- /dev/null +++ b/docroot/sites/all/modules/custom/auto_role_allocation_teen/auto_role_allocation_teen.module @@ -0,0 +1,852 @@ + t('Write Staff notes for teen program'), + 'cache' => DRUPAL_NO_CACHE, + ); + $blocks['calendar-data_teen'] = array( + 'info' => t('Show calendar data json for teen program'), + 'cache' => DRUPAL_NO_CACHE, + ); + $blocks['progress-block_teen'] = array( + 'info' => t('Progress for teen program'), + 'cache' => DRUPAL_NO_CACHE, + ); + $blocks['user_prize_block_teen'] = array( + 'info' => t('User Progress Page Block for teen program'), + 'cache' => DRUPAL_NO_CACHE, + ); + $blocks['user_progress_for_program_teen'] = array( + 'info' => t('User Progress block for teen program'), + 'cache' => DRUPAL_NO_CACHE, + ); + return $blocks; +} + +function auto_role_allocation_teen_block_view($block_name = '') { + switch ($block_name) { + case 'staff-notes_teen': + $block['subject'] = ''; + $block['content'] = drupal_get_form('generate_staff_form_teen'); + break; + case 'calendar-data_teen': + $block['subject'] = ''; + $block['content'] = generate_json_data_teen(); + break; + case 'progress-block_teen': + $block['subject'] = ''; + $block['content'] = user_progress_teen(); + break; + case 'user_prize_block_teen': + $block['subject'] = ''; + $block['content'] = progress_user_block_teen(); + break; + case 'user_progress_for_program_teen': + $block['subject'] = ''; + $block['content'] = progress_user_block_program_teen(); + break; + } + return $block; +} + +/* Progress block of user on program page */ +function progress_user_block_program_teen() { + global $user, $base_url; + $uid = $user->uid; + $count_query = db_query("SELECT COUNT(image_url) as image_url + FROM {calendar} c + WHERE c.uid = :uid",array(':uid' => $uid))->fetchAll(); + $total_read_days = $count_query[0]->image_url; + + // get all rewards + $qry = db_select('field_data_field_activity_fired_hook', 'fh'); + $qry->join('field_data_field_activity_points', 'ap', 'ap.entity_id = fh.entity_id'); + $qry->Join('field_data_field_reward_criteria_activity', 'rca', 'fh.entity_id = rca.field_reward_criteria_activity_target_id'); + $qry->Join('field_data_field_reward_criteria_point_mark', 'rcpm', 'rca.entity_id = rcpm.entity_id'); + $qry->fields('rcpm', array('field_reward_criteria_point_mark_value')); + $qry->fields('ap', array('field_activity_points_value')); + $qry->condition('fh.field_activity_fired_hook_value', 'node_update|node|sticker|updated'); + $rs = $qry->execute()->fetchAll(); + + $activity_point = 0; + $next_reward_in_days = 0; + $user_points = 0; + $closest_reward = 0; + + foreach($rs as $v) { + if (!$activity_point) { + $activity_point = $v->field_activity_points_value; + $user_points = $total_read_days * $activity_point; + } + + $reward_point = $v->field_reward_criteria_point_mark_value; + if ($reward_point > $user_points) { + if(!$closest_reward) { + $closest_reward = $reward_point; + } else { + if($reward_point < $closest_reward) { + $closest_reward = $reward_point; + } + } + } + } + + $reads_for_next_reward = ($closest_reward / $activity_point) - $total_read_days; + if($reads_for_next_reward < 0) { + return "
        Congratulations! You have completed the reading program and have received all the reading rewards.
        "; + } + else { + if($reads_for_next_reward == 1) { + $msg = "Total days read: $total_read_days
        "; + $msg .= "
        $reads_for_next_reward more day of reading needed to receive your next prize
        "; + $msg .= ""; + } + else { + $msg = "Total days read: $total_read_days
        "; + $msg .= "
        $reads_for_next_reward more days of reading needed to receive your next prize
        "; + $msg .= ""; + } + + + return "
        $msg
        "; + } +} + +function progress_user_block_teen() { + global $user; + $uid = $user->uid; + $count_query = db_query("SELECT COUNT(image_url) as image_url + FROM {calendar} c + WHERE c.uid = :uid",array(':uid' => $uid))->fetchAll(); + $total_read_days = $count_query[0]->image_url; + + // get all rewards + $qry = db_select('field_data_field_activity_fired_hook', 'fh'); + $qry->join('field_data_field_activity_points', 'ap', 'ap.entity_id = fh.entity_id'); + $qry->Join('field_data_field_reward_criteria_activity', 'rca', 'fh.entity_id = rca.field_reward_criteria_activity_target_id'); + $qry->Join('field_data_field_reward_criteria_point_mark', 'rcpm', 'rca.entity_id = rcpm.entity_id'); + $qry->fields('rcpm', array('field_reward_criteria_point_mark_value')); + $qry->fields('ap', array('field_activity_points_value')); + $qry->condition('fh.field_activity_fired_hook_value', 'node_update|node|sticker|updated'); + $rs = $qry->execute()->fetchAll(); + + $activity_point = 0; + $next_reward_in_days = 0; + $user_points = 0; + $closest_reward = 0; + + foreach($rs as $v) { + if (!$activity_point) { + $activity_point = $v->field_activity_points_value; + $user_points = $total_read_days * $activity_point; + } + + $reward_point = $v->field_reward_criteria_point_mark_value; + if ($reward_point > $user_points) { + if(!$closest_reward) { + $closest_reward = $reward_point; + } else { + if($reward_point < $closest_reward) { + $closest_reward = $reward_point; + } + } + } + } + + $reads_for_next_reward = ($closest_reward / $activity_point) - $total_read_days; + + if($reads_for_next_reward < 0) { + return "
        Congratulations! You have completed the reading program and have received all the reading rewards.
        "; + } + else { + if($reads_for_next_reward == 1) { + $msg = "$reads_for_next_reward more day of reading needed to receive your next prize"; + + + } + else { + $msg = "$reads_for_next_reward more days of reading needed to receive your next prize"; + } + return "
        $msg
        "; + } + +} + +function generate_staff_form_teen($form, &$form_state) { + $form['body'] = array( + '#type' => 'textarea', + '#title' => 'Staff Notes', + + ); + $form['submit'] = array('#type' => 'submit', '#value' => t('Submit')); + + return $form; +} + +function generate_staff_form_teen_submit($form, &$form_state) { + $staff_note = $form_state['complete form']['body']['#value']; + $custom_uid = arg(1); + $profile = profile2_create(array('type' => 'main', 'uid' => $custom_uid)); + $profile->field_staff_notes['und'][0]['value'] = $staff_note; + profile2_save($profile); + drupal_set_message(t('Notes created.')); + + +} + + +function auto_role_allocation_teen_init() { + global $user; + $setting = array('auto_role_allocation_teen' => array('currentUser' => $user->uid)); + drupal_add_js($setting, 'setting'); + +} + +function auto_role_allocation_teen_menu() { + $items['calendar_teen'] = array( + 'title' => 'Test Page', + 'page callback' => 'calendar_page_teen', + 'access arguments' => array('access content'), + 'type' => MENU_SUGGESTED_ITEM, + ); + $items['raffle_teen'] = array( + 'title' => 'Raffle entry list', + 'page callback' => 'raffle_entry_process_teen', + 'access arguments' => array('access content'), + 'type' => MENU_CALLBACK, + ); + $items['raffle_filter_form_teen'] = array( + 'title' => 'Raffle Process', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('raffle_entry_form_teen'), + 'access arguments' => array('access content'), + 'type' => MENU_CALLBACK, + ); + $items['raffle_pro_teen'] = array( + 'title' => 'Raffle Process', + 'page callback' => 'render_raffle_filter_form_teen', + 'access arguments' => array('access content'), + 'type' => MENU_CALLBACK, + ); + $items['raffle_user_list_teen'] = array( + 'title' => 'Raffle Process', + 'page callback' => 'raffle_user_list_teen', + 'access arguments' => array('access content'), + 'type' => MENU_CALLBACK, + ); + $items['raffle_winner_teen'] = array( + 'title' => 'Raffle winner Process', + 'page callback' => 'raffle_winner_ajax_teen', + 'access arguments' => array('access content'), + 'type' => MENU_CALLBACK, + ); + $items['raffle_winner_list_teen'] = array( + 'title' => 'Raffle Winner List', + 'page callback' => 'raffle_winner_user_list_teen', + 'access arguments' => array('access content'), + 'type' => MENU_CALLBACK, + ); + $items['test_teen'] = array( + 'title' => 'Test Menu', + 'page callback' => 'test_teen', + 'access arguments' => array('access content'), + 'type' => MENU_CALLBACK, + ); + + return $items; +} + +/* test function */ + + +function test_teen() { + drupal_access_denied(); +} + + +/* hook menu() for raffle winner user list */ + +function raffle_winner_user_list_teen() { + $query = db_select('eck_reward', 'er'); + $query->join('users', 'u', 'u.uid = er.uid'); + $query->join('field_data_field_reward_claim_id', 'frcid', 'er.id = frcid.entity_id'); + $query->join('field_data_field_reward_raffle', 'frr', 'frcid.field_reward_claim_id_target_id = frr.entity_id'); + $query->join('eck_raffle', 'eckr', 'eckr.id = frr.field_reward_raffle_target_id'); + $query->fields('er', array('uid')); + $query->fields('u', array('name')); + $query->fields('eckr', array('title')); + $res = $query->execute()->fetchAll(); + $table_header = array( + 'Sl No.', + 'Raffle Name', + 'Raffle Winner Name' + ); + $table_rows = array(); + $i = 0; + foreach ($res as $value) { + + $raffle_winner_name = $value->name; + $raffle_title = $value->title; + $i++; + $table_rows[] = array( + array( 'data' => $i), + array( 'data' => $raffle_title), + array( 'data' => $raffle_winner_name), + ); + } + + $output = theme('table', array( 'header' => $table_header, 'rows' => $table_rows )); + + return $output; +} + + + + +/* fuction for raffle entry process */ + +function raffle_entry_process_teen() { + $out = ''; + + $rafle_query = db_select('field_data_field_reward_raffle', 'rf'); + $rafle_query->join('field_data_field_reward_criteria_reward', 'rcr', 'rf.entity_id = rcr.field_reward_criteria_reward_target_id'); + $rafle_query->join('field_data_field_reward_criteria_activity', 'rca', 'rca.entity_id = rcr.entity_id'); + $rafle_query->join('eck_activity', 'ecka', 'rca.field_reward_criteria_activity_target_id = ecka.id'); + $rafle_query->join('eck_raffle', 'er', 'rf.field_reward_raffle_target_id = er.id'); + $rafle_query->fields('er', array('id','title')); + $rafle_query->fields('ecka', array('title','id')); + $rafle_query->fields('rcr', array('field_reward_criteria_reward_target_id')); + + $res = $rafle_query->execute()->fetchAll(); + $active_raffle_list = array(); + foreach ($res as $key => $value) { + $raffle_id = $value->id; + //print_r($raffle_id);die(); + $query = db_select('field_data_field_raffle_winner_raffle', 'rwr'); + $query->condition('field_raffle_winner_raffle_target_id', $raffle_id, '='); + $query->fields('rwr', array('entity_id')); + $result = $query->execute(); + $count = $result->rowCount(); + + $raffle_title = $value->title; + $activity_id = $value->ecka_id; + $activity_name = $value->ecka_title; + $reward_id = $value->field_reward_criteria_reward_target_id; + + + $oprat = ""; + if(!$count) { + $out .= "
        $raffle_title$oprat
        "; + } + } + + // if no raffel found show message + if ($out == '') { + $out = "
        No active raffle found
        "; + } + + $out .= "
        "; + + + + return $out; + +} + +/* For rendering the raffle filter form */ + +function render_raffle_filter_form_teen($form, &$form_state) { + echo drupal_render(drupal_get_form('raffle_entry_form_teen')); +} + +/* Raffle user list by filter form */ + +function raffle_user_list_teen($form, &$form_state) { + $active_raffle_id = $_REQUEST['active_raffle_id']; + $reward_id = $_REQUEST['reward_id']; + $school = trim($_REQUEST['school']); + $organization = $_REQUEST['organization']; + $library_branch = $_REQUEST['library_branch']; + $grade = $_REQUEST['grade']; + $_SESSION['active_r_id'] = $active_raffle_id; + + + + $query = db_select('field_data_field_raffle_entry_raffle', 'rentry'); + $query->join('eck_raffle', 'eck_r', 'rentry.entity_id = eck_r.id'); + $query->join('users', 'u', 'u.uid = eck_r.uid'); + $query->join('profile', 'p', 'u.uid = p.uid'); + + $cnd = array(); + if ($school != '') { + $query->leftJoin('field_data_field_school', 'fs', 'fs.entity_id = p.pid'); + $query->leftJoin('taxonomy_term_data', 'fstd', 'fstd.tid = fs.field_school_tid'); + $cnd[] = array('fs.field_school_tid', $school); + } + + if ($organization != '') { + $query->join('field_data_field_user_organization', 'uo', 'uo.entity_id = p.pid'); + $query->join('taxonomy_term_data', 'uotd', 'uotd.tid = uo.field_user_organization_tid'); + $cnd[] = array('uo.field_user_organization_tid', $organization); + } + + if ($library_branch != '') { + $query->join('field_data_field_library_branch', 'lb', 'lb.entity_id = p.pid'); + $query->join('taxonomy_term_data', 'lbtd', 'lbtd.tid = lb.field_library_branch_tid'); + $cnd[] = array('lb.field_library_branch_tid', $library_branch); + } + + if ($grade != '') { + $query->join('field_data_field_user_grade', 'ug', 'ug.entity_id = p.pid'); + $query->join('taxonomy_term_data', 'ugtd', 'ugtd.tid = ug.field_user_grade_tid'); + $cnd[] = array('ug.field_user_grade_tid', $grade); + } + + $query->condition('rentry.field_raffle_entry_raffle_target_id', $active_raffle_id, '='); + if (count($cnd)) { + foreach($cnd as $val) { + $cnd_fld = $val[0]; + $cnd_val = $val[1]; + $query->condition($cnd_fld, $cnd_val); + } + } + $query->fields('eck_r', array('uid')); + $query->fields('u', array('name')); + // echo $active_raffle_id . ' '; + // echo $query->__toString(); die; + $res = $query->execute()->fetchAll(); + + $raffle_users_list = array(); + + foreach($res as $v) { + $uid = $v->uid; + $name = $v->name; + + if (array_key_exists($uid, $raffle_users_list)) { + $temp = $raffle_users_list[$uid]; + $temp['count'] = $temp['count'] + 1; + $raffle_users_list[$uid] = $temp; + } else { + // check if this user has won raffel before + $qry = db_select('eck_raffle', 'r'); + $qry->condition('r.uid', $uid); + $qry->condition('r.type', 'raffle_winner'); + $qry->fields('r', array('id')); + $rs = $qry->execute(); + $count = $rs->rowCount(); + + if ($count) { + $raffle_users_list[$uid] = array('count' => 1, 'raffle_winner' => 'Yes', 'name' => $name); + } else { + $raffle_users_list[$uid] = array('count' => 1, 'raffle_winner' => 'No', 'name' => $name); + } + } + } + + $tbl_header = array( + 'Name', + 'Raffle Count', + 'Raffle Winner', + 'Select Winners' + ); + + $tbl_rows = array(); + foreach($raffle_users_list as $k => $v) { + $user_name = $v['name']; + $raffle_count = $v['count']; + $raffle_winner = $v['raffle_winner']; + $operation = ""; + $tbl_rows[] = array( + array( 'data' => $user_name), + array( 'data' => $raffle_count), + array( 'data' => $raffle_winner), + array( 'data' => $operation), + ); + } + + $output = theme('table', array( 'header' => $tbl_header, 'rows' => $tbl_rows )); + $output .= "
        + + +
        "; + + echo $output; +} + +function _get_options_teen($vocab_name) { + $term_list = taxonomy_vocabulary_machine_name_load($vocab_name); + $tree = taxonomy_get_tree($term_list->vid); + $options = array(); + $options[''] = '- Select -'; + foreach ($tree as $value) { + $options[$value->tid] = $value->name; + } + return $options; +} + + +/* active raffle user list */ + +function raffle_entry_form_teen($form, &$form_state) { + $school_options = _get_options_teen('schools'); + $organization_options = _get_options_teen('organization'); + $librarybranches_options = _get_options_teen('library_branches'); + $grade_options = _get_options_teen('grade'); + + $form['school'] = array( + '#title' => t('School'), + '#type' => 'select', + '#options' => $school_options, + ); + $form['organization'] = array( + '#title' => t('Organization'), + '#type' => 'select', + '#options' => $organization_options, + ); + $form['library_branch'] = array( + '#title' => t('Library Branch'), + '#type' => 'select', + '#options' => $librarybranches_options, + ); + $form['grade'] = array( + '#title' => t('Grade'), + '#type' => 'select', + '#options' => $grade_options, + ); + $form['button'] = array( + '#value' => 'Submit', + '#type' => 'button', + '#id' => 'raffle_form_button', + ); + + + + return $form; + + + +} + + +/* Raffle winner list process */ + +function raffle_winner_ajax_teen() { + $active_raffle_uid = $_REQUEST['active_raffle_uid']; + $reward_id = $_REQUEST['reward_id']; + + $raffle_uid = explode(',', $active_raffle_uid); + + $raffle_id = $_SESSION['active_r_id']; + + foreach ($raffle_uid as $k => $v) { + + play_library_program_create_raffle_winner($raffle_id, $v); + play_library_program_create_reward_claim($reward_id, $v, 1); + } + echo "1"; + +} + + + + +/* function for restrict calendar date for only one drop*/ + +function calendar_date_restriction_teen($uid, $event_date) { + $sticker_count = db_select('calendar', 'c') + ->fields('c', array('image_url')) + ->condition('uid', $uid,'=') + ->condition('date', $event_date,'=') + ->execute(); + $no_of_sticker = $sticker_count->rowCount(); + if($no_of_sticker > 1) { + return FALSE; + } + else { + return TRUE; + } +} + + + +function calendar_page_teen() { + global $user; + $uid = $user->uid; + $image_id = $_REQUEST['id']; + $event_image = $_REQUEST['image']; + $event_uid = $_REQUEST['user_id']; + + // get timestamp from calendar date + $event_date = $_REQUEST['date']; + $event_date = explode(' ', $event_date); + $mth = strtolower($event_date[1]); + $dt = $event_date[2]; + $yr = $event_date[3]; + $month = array('jan' => 1, + 'feb' => 2, + 'mar' => 3, + 'apr' => 4, + 'may' => 5, + 'jun' => 6, + 'jul' => 7, + 'aug' => 8, + 'sep' => 9, + 'oct' => 10, + 'nov' => 11, + 'dec' => 12); + $mth = $month[$mth]; + $event_time = mktime(0, 0, 0, $mth, $dt, $yr); + + $sticker_count = db_select('calendar', 'c') + ->fields('c', array('image_url')) + ->condition('uid', $event_uid) + ->condition('date', $event_time) + ->execute(); + $no_of_sticker = $sticker_count->rowCount(); + + $query_date = db_select('calendar', 'c') + ->fields('c', array('date')) + ->condition('uid', $event_uid) + ->condition('reward_id', 0, '>') + ->orderBy('id', 'DESC') + ->execute(); + $reward_date = $query_date->fetchAssoc(); + $reward_date = $reward_date['date']; + //print_r($reward_date['date']);die(); + + + if(!$reward_date) { + + if (!$no_of_sticker) { + if($image_id) { + db_update('calendar') + ->fields(array('image_url' => $event_image,'date' => $event_time)) + ->condition ('id', $image_id) + ->execute(); + } + else { + $insert_query =db_insert('calendar') + ->fields(array( + 'uid'=>$event_uid, + 'image_url'=>$event_image, + 'date'=>$event_time, + )); + $insert_query->execute(); + + // get the just inserted ID from calendar table + // this will be used to update the record for reward + // if user receives one after this activity. + $query = db_select('calendar'); + $query->addExpression('MAX(id)'); + $max_id = $query->execute()->fetchField(); + $_SESSION['usr_calendar_id'] = $max_id; + + $response = array( + "result" => 1 + ); + $node = node_load(495);//495 + + /* this is for calendar activity*/ + $hook = "node_update|node|{$node->type}|updated"; + _play_library_program_invoke_activity_entry_hooks($node, 'node', $hook, 1); + } + echo 1; + } else { + echo 0; + } + } + else { + + if($reward_date > $event_time) { + + return FALSE; + } + + else { + if (!$no_of_sticker) { + if($image_id) { + db_update('calendar') + ->fields(array('image_url' => $event_image,'date' => $event_time)) + ->condition ('id', $image_id) + ->execute(); + } + else { + $insert_query =db_insert('calendar') + ->fields(array( + 'uid'=>$event_uid, + 'image_url'=>$event_image, + 'date'=>$event_time, + )); + $insert_query->execute(); + + // get the just inserted ID from calendar table + // this will be used to update the record for reward + // if user receives one after this activity. + $query = db_select('calendar'); + $query->addExpression('MAX(id)'); + $max_id = $query->execute()->fetchField(); + $_SESSION['usr_calendar_id'] = $max_id; + + $response = array( + "result" => 1 + ); + $node = node_load(495);//495 + + /* this is for calendar activity*/ + $hook = "node_update|node|{$node->type}|updated"; + _play_library_program_invoke_activity_entry_hooks($node, 'node', $hook, 1); + } + echo 1; + } else { + echo 0; + } + } +} + +} + + + + +function generate_json_data_teen() { + global $user; + $uid = $user->uid; + $current_time = time(); + $current_date = date('Y-m-d', $current_time); + + + + $query_state = db_select('calendar', 'c') + ->fields('c', array('image_url','date','id', 'reward_id')) + ->orderBy('date', 'ASC') + ->condition('uid', $uid) + ->execute(); + $result = $query_state->fetchAll(); + + + + + $events = array(); + $i = 1; + $j = 1; + foreach ($result as $value) { + $reward_claimed = $value->reward_id; + + if($reward_claimed) { + + $events[] = array( + 'title' => '
        '.'
        Congratulations, You earned a prize!
        ', + 'date' => $value->date, + ); + } + else { + if($i == 1) { + $events[] = array( + 'title' => '
        '.'
        Read ' .$i. ' day
        ', + 'date' => $value->date, + ); + } + + else { + $events[] = array( + 'title' => '
        '.'
        Read ' .$i. ' days
        ', + 'date' => $value->date, + ); + } + + + } + + + $i++; + $j++; + + } + + $out = ""; + return $out; +} + + +function user_progress_teen() { + global $user; + $uid = $user->uid; + $count_query = db_query("SELECT COUNT(image_url) as image_url + FROM {calendar} c + WHERE c.uid = :uid",array(':uid' => $uid))->fetchAll(); + $total_read_days = $count_query[0]->image_url; + + // get all rewards + $qry = db_select('field_data_field_activity_fired_hook', 'fh'); + $qry->join('field_data_field_activity_points', 'ap', 'ap.entity_id = fh.entity_id'); + $qry->Join('field_data_field_reward_criteria_activity', 'rca', 'fh.entity_id = rca.field_reward_criteria_activity_target_id'); + $qry->Join('field_data_field_reward_criteria_point_mark', 'rcpm', 'rca.entity_id = rcpm.entity_id'); + $qry->fields('rcpm', array('field_reward_criteria_point_mark_value')); + $qry->fields('ap', array('field_activity_points_value')); + $qry->condition('fh.field_activity_fired_hook_value', 'node_update|node|sticker|updated'); + $rs = $qry->execute()->fetchAll(); + + $activity_point = 0; + $next_reward_in_days = 0; + $user_points = 0; + $closest_reward = 0; + + foreach($rs as $v) { + if (!$activity_point) { + $activity_point = $v->field_activity_points_value; + $user_points = $total_read_days * $activity_point; + } + + $reward_point = $v->field_reward_criteria_point_mark_value; + if ($reward_point > $user_points) { + if(!$closest_reward) { + $closest_reward = $reward_point; + } else { + if($reward_point < $closest_reward) { + $closest_reward = $reward_point; + } + } + } + } + + $reads_for_next_reward = ($closest_reward / $activity_point) - $total_read_days; + + if($reads_for_next_reward < 0) { + return "
        Congratulations! You have completed the reading program and have received all the reading rewards.
        "; + } + else { + if($reads_for_next_reward == 1) { + $msg = "Total days read: $total_read_days
        "; + $msg .= "$reads_for_next_reward more day of reading needed to receive your next prize"; + $msg .= "Show My Progress"; + } + else { + $msg = "Total days read: $total_read_days
        "; + $msg .= "$reads_for_next_reward more days of reading needed to receive your next prize"; + $msg .= "Show My Progress"; + } + return "
        $msg
        "; + } +} + + + + +function auto_role_allocation_teen_menu_alter(&$items) { + global $user; + if($user->roles[1] == 'anonymous user') { + $items['staff/register']['access callback'] = FALSE; + + } + +} + + + diff --git a/docroot/sites/all/modules/custom/deployment/deployment.info b/docroot/sites/all/modules/custom/deployment/deployment.info deleted file mode 100644 index d92ea964..00000000 --- a/docroot/sites/all/modules/custom/deployment/deployment.info +++ /dev/null @@ -1,5 +0,0 @@ -name = deployment -description = Global Deployment Module -core = 7.x -package = mema -project = mema_updates diff --git a/docroot/sites/all/modules/custom/deployment/deployment.install b/docroot/sites/all/modules/custom/deployment/deployment.install deleted file mode 100644 index 58b50a3e..00000000 --- a/docroot/sites/all/modules/custom/deployment/deployment.install +++ /dev/null @@ -1,89 +0,0 @@ - $node) { + $date_field_name = node_recur_get_date_field_name($node->type); + if (!isset($node->{$date_field_name})) { + return; + } + if ($node->{$date_field_name}[$node->language][0]['date_type'] == 'datetime' && strlen($node->{$date_field_name}[$node->language][0]['value']) == 19) { + $node->{$date_field_name}[$node->language][0]['value'] .= ' ' . $node->{$date_field_name}[$node->language][0]['timezone_db']; + } + if ($node->{$date_field_name}[$node->language][0]['date_type'] == 'datetime' && strlen($node->{$date_field_name}[$node->language][0]['value2']) == 19) { + $node->{$date_field_name}[$node->language][0]['value2'] .= ' ' . $node->{$date_field_name}[$node->language][0]['timezone_db']; + } + } + } +} + +/** + * Implements hook_form_alter(). + */ +function node_recur_timezone_handler_teen_form_alter(&$form, &$form_state, $form_id) { + if ($form_id == 'node_recur_node_recur_form') { + $node = $form['#node']; + if (isset($form['node_date'])) { + // Display this node's date + $field_name = node_recur_get_date_field_name($node->type); + $start = node_recur_get_node_date_field_value($node) . " " . $node->{$field_name}[$node->language][0]['timezone_db']; + $end = node_recur_get_node_date_field_value($node, FALSE) . " " . $node->{$field_name}[$node->language][0]['timezone_db']; + + $form['node_date'] = array( + '#type' => 'item', + '#title' => t('Date'), + '#markup' => node_recur_format_date($start, $end), + ); + } + else if (!empty($form['#start_dates'])) { + $dates = array( + 'start' => $form['#start_dates'], + 'end' => $form['#end_dates'] + ); + foreach ($dates['start'] as $key => $start_date) { + $start_date = $start_date - date('Z', $start_date); + $end_date = isset($dates['end'][$key]) ? $dates['end'][$key] - date('Z', $dates['end'][$key]): NULL; + $form['#start_dates'][$key] = $start_date; + $form['#end_dates'][$key] = $end_date; + } + } + } +} diff --git a/docroot/sites/all/modules/custom/payl_program_customizations_teen/payl_program_customizations_teen.info b/docroot/sites/all/modules/custom/payl_program_customizations_teen/payl_program_customizations_teen.info new file mode 100644 index 00000000..6f18570a --- /dev/null +++ b/docroot/sites/all/modules/custom/payl_program_customizations_teen/payl_program_customizations_teen.info @@ -0,0 +1,5 @@ +name = "Play @ Your Library Program Customizations for Teen Program" +scripts[] = payl_program_customizations_teen.js +description = Customizations for P@YL programs for teen program +core = 7.x +dependencies[] = random_list_widget diff --git a/docroot/sites/all/modules/custom/payl_program_customizations_teen/payl_program_customizations_teen.install b/docroot/sites/all/modules/custom/payl_program_customizations_teen/payl_program_customizations_teen.install new file mode 100644 index 00000000..79efde9e --- /dev/null +++ b/docroot/sites/all/modules/custom/payl_program_customizations_teen/payl_program_customizations_teen.install @@ -0,0 +1,33 @@ +fields(array('weight' => 1)) + ->condition('name', 'payl_program_customizations_teen', '=') + ->execute(); +} \ No newline at end of file diff --git a/docroot/sites/all/modules/custom/payl_program_customizations_teen/payl_program_customizations_teen.js b/docroot/sites/all/modules/custom/payl_program_customizations_teen/payl_program_customizations_teen.js new file mode 100644 index 00000000..fcbbc4d2 --- /dev/null +++ b/docroot/sites/all/modules/custom/payl_program_customizations_teen/payl_program_customizations_teen.js @@ -0,0 +1,116 @@ +/** + * @file + * Adds form selector behaviors for setting up random items. + * May move to ajax down the line. + */ +// Extend string +if (typeof String.prototype.startsWith != 'function') { + // see below for better implementation! + String.prototype.startsWith = function (str){ + return this.indexOf(str) === 0; + }; +} +(function ($) { + Drupal.behaviors.payl_program_customizations_teen = { + attach: function() { + var role_block = $('.role-based p').text(); + if(role_block) { + $("#branding .tabs.primary a").each(function() { + if($(this).text() == 'Manage display') { + $(this).remove(); + } + }); + } + $('.role-based').hide(); + + Drupal.settings.payl_program_customizations_teen_birthday_limit = parseInt(Drupal.settings.payl_program_customizations_teen_birthday_limit); + var birthday = new Date($('#edit-profile-main-field-user-birthday-und-0-value-datepicker-popup-0').val()); + var birthday_timestamp = Math.floor(birthday.getTime() / 1000); + + var user_dob = Drupal.settings.payl_program_customizations_user_date_of_birth; + var birthday_patron = new Date(user_dob); + var birthday_timestamp_patron = Math.floor(birthday_patron.getTime() / 1000); + // alert(birthday_timestamp_patron); + // More than 13 years old. + if (birthday_timestamp < Drupal.settings.payl_program_customizations_teen_birthday_limit) { + $('.page-user-register .form-item-name').show(); + } + // Less than 13 years old. + else { + $('.page-user-register .form-item-name').hide(); + } + + // Changes for user edit profile + if (birthday_timestamp_patron > Drupal.settings.payl_program_customizations_teen_birthday_limit) { + $('.page-user-edit .form-item-name').hide(); + } + else { + $('.page-user-edit .form-item-name').show(); + } + + $('#edit-profile-main-field-user-birthday-und-0-value-datepicker-popup-0').bind('change', function(date_object) { + Drupal.settings.payl_program_customizations_teen_birthday_limit = parseInt(Drupal.settings.payl_program_customizations_teen_birthday_limit); + var birthday = new Date($('#edit-profile-main-field-user-birthday-und-0-value-datepicker-popup-0').val()); + var birthday_timestamp = Math.floor(birthday.getTime() / 1000); + + if (birthday_timestamp < Drupal.settings.payl_program_customizations_teen_birthday_limit) { + $('.page-user-register .form-item-name').show(); + } + else { + $('.page-user-register .form-item-name').hide(); + } + }); + + $('.field-widget-random-list-widget-randomizer').each(function(index) { + fieldname = 'Change ' + $(this).find('label').html(); + $(this).find('input.random-list-widget-regenerate').val(fieldname); + $(this).find('button.random-list-widget-regenerate').html(fieldname); + }); + $('.field-widget-random-list-widget-randomizer .form-type-textfield').hide(); + $('.random-list-widget').attr('readonly', true); + $('.random-list-widget-regenerate').click(function() { + setTimeout(function() { + var name = ''; + $('.random-list-widget').each(function(index) { + name = name + $(this).val(); + }); + $('#edit-name').val(name); + payl_program_customizations_teen_change_name(); + }, 50); + }); + $('#edit-name').keyup(payl_program_customizations_teen_change_name); + + var edit_username = $('#edit-account #edit-name').val(); + + //username not to change on field errors + var url = window.location.href; + var array = url.split('/'); + var lastsegment = array[array.length-1]; + + if (lastsegment == 'register'){ + if($("div").hasClass("error")){ + localStorage.setItem('username_generated', name); + var uname = localStorage.getItem('username_generated'); + $('.current-username').html(uname); + }else{ + setTimeout(function() { + $('.random-list-widget-regenerate').click(); + }, 150); + } + }else{ + if($("button").hasClass("random-list-widget-regenerate")){ + if(edit_username.length > 0){ + $('.current-username').html(edit_username); + }else{ + $('.random-list-widget-regenerate').click(); + } + } + } + } + } + + function payl_program_customizations_teen_change_name() { + name = $('#edit-name').val(); + $('.current-username').html(name); + } +})(jQuery); diff --git a/docroot/sites/all/modules/custom/payl_program_customizations_teen/payl_program_customizations_teen.module b/docroot/sites/all/modules/custom/payl_program_customizations_teen/payl_program_customizations_teen.module new file mode 100644 index 00000000..8ced569e --- /dev/null +++ b/docroot/sites/all/modules/custom/payl_program_customizations_teen/payl_program_customizations_teen.module @@ -0,0 +1,196 @@ +field_user_birthday)) { + $birthday = new DateObject($profile->field_user_birthday[LANGUAGE_NONE][0]['value']); + $now = date_now(); + $diff = $birthday->difference($now, 'years'); + if ($diff <= 5) { + $account->roles[5] = 'Patron pre-reader'; + } + if ($diff >= 6 && $diff <= 12) { + $account->roles[6] = 'Patron kids'; + } + if ($diff >= 13 && $diff <= 17) { + $account->roles[7] = 'Patron teen'; + } + if ($diff >= 18) { + $account->roles[8] = 'Patron adult'; + } + } + } + drupal_static_reset('user_access'); +} +function custom_activity_teen_submit_handler(&$form, &$form_state) { + $firing_hook = $form_state['values']['entity']->field_activity_fired_hook[LANGUAGE_NONE][0]['value']; + + if($firing_hook == 'node_update|node|sticker|updated') { + $query = db_select('field_data_field_activity_fired_hook', 'fh'); + $query->condition('fh.field_activity_fired_hook_value', $firing_hook, '='); + $query->fields('fh', array('entity_id')); + $result = $query->execute(); + $count = $result->rowCount(); + } + + // if($count > 0) { + // form_set_error('field_activity_fired_hook', t('Only one activity with firing hook Place sticker on Progress Report')); + // drupal_goto('admin/structure/entity-type/activity/activity/add'); + // } +} +//showing username field for users above 12 years. + +/** + * Implements hook_form_alter(). + */ +function payl_program_customizations_teen_form_alter(&$form, &$form_state, $form_id) { + /* making staff registration email field required */ + if($form_id == 'user_register_form') { + $arg = arg(3); + if($arg == 'staff') { + $form['account']['mail']['#required'] = TRUE; + } + + } + + if($form_id == "eck__entity__form_add_activity_activity") { + + $form['#submit'] = array("custom_activity_teen_submit_handler","eck__entity__form_submit"); + } + + if ($form_id == 'user_profile_form') { + + global $user, $base_url; + $uid = $user->uid; + $role_user = $user->roles; + + // print_r($role_user);die(); + // showing of tabs only for user role as patron + if(array_key_exists(6, $role_user)){ + $user_p = profile2_load_by_user($uid); + $user_dob_patron = $user_p['main']->field_user_birthday['und'][0]['value']; + $user_dob_split = explode(' ', $user_dob_patron); + $user_dob = $user_dob_split[0]; + + $setting = array( + 'payl_program_customizations_teen_birthday_limit' => strtotime('-12 years'), + 'payl_program_customizations_user_date_of_birth' => $user_dob, + ); + + drupal_add_js($setting, array('type' => 'setting')); + drupal_add_js(drupal_get_path('module', 'payl_program_customizations_teen') . '/payl_program_customizations_teen.js'); + + $form['current_username'] = array( + '#markup' => '

        Username:

        ', + '#weight' => 1, + ); + + $form['public_profile'] = array( + '#markup' => t("My Public Profile"), + '#weight' => -20, + ); + + $form['change_username'] = array( + '#markup' => t("Change My Username or Password"), + '#weight' => -20, + ); + } + } + + if ($form_id == 'user_register_form') { + + $form_state['rebuild'] = TRUE; + $setting = array( + 'payl_program_customizations_teen_birthday_limit' => strtotime('-12 years'), + ); + + drupal_add_js($setting, array('type' => 'setting')); + drupal_add_js(drupal_get_path('module', 'payl_program_customizations_teen') . '/payl_program_customizations_teen.js'); + + $form['current_username'] = array( + '#markup' => '

        Username:

        ', + '#weight' => 1, + ); + + // Move the email element to the main profile. + //$mail_element = $form['account']['mail']; + //$mail_element['#weight'] = -100; + //$form['profile_main']['mail'] = $mail_element; + //unset($form['account']['mail']); + + $form['#validate'][] = 'payl_program_customizations_teen_user_register_validate'; + if (!empty($form['profile_main'])) { + $form['profile_main']['field_user_address'][LANGUAGE_NONE][0]['name_block'] = array( + '#type' => 'value', + '#value' => 'User address', + ); + $form['profile_main']['field_user_address'][LANGUAGE_NONE][0]['organisation_block'] = array( + '#type' => 'value', + '#value' => '', + ); + } + } + + //To provide a message if user has no email mentioned during registration + if($form_id == 'user_pass'){ + $form['#validate'][1] = 'password_user_teen'; //function to validate the user + $form['name']['#title'] = '
        Please enter username
        '.'
        If you do not have an email address, you need to seek staff assistance to reset your password
        '; + $form['actions']['submit']['#value'] = 'Submit'; + } + + // changing of display field name for reward entity + if($form_id == 'eck__entity__form_edit_reward_reward' || $form_id == 'eck__entity__form_add_reward_reward'){ + $form['field_reward_message']['und'][0]['#title'] = 'Onscreen Alert'; + $form['field_reward_notification']['und'][0]['#title'] = 'Message'; + } + + // Changing of text from participants to Sender + if ($form_id == 'privatemsg_list') { + $form['updated']['list']['#header']['participants']['data'] = t('Sender'); + } + + // Increasing string length + if ($form_id == 'user_register_form') { + $form['profile_main']['field_do_you_want_other_players_']['und']['#title'] = t('Do you want other players to be able to see your badges and prizes when they click on your username? They won\'t be able to see your real name.'); + } + + // Changing of button text from Add new Badge to Add Badge Image + if ($form_id == 'eck__entity__form_add_reward_reward') { + $form['field_reward_badge']['und']['actions']['ief_add']['#value'] = t('Add Badge Image'); + } +} + +function payl_program_customizations_teen_user_register_validate($form, &$form_state) { + $values = $form_state['values']; + if (empty($values['name'])) { + form_set_error('name', t('Please ensure to create your own username OR generate a new username')); + } +} + //function to provide a message if user has no email associated with account. +function password_user_teen(&$form, &$form_state){ + $form_value = $form_state['complete form']['name']['#value']; + if (filter_var($form_value, FILTER_VALIDATE_EMAIL)) { + drupal_set_message('Please enter only username','error'); + } + + $mail_id = $form_state['values']['account']; + $mail = $mail_id->mail; + if($mail == ''){ + drupal_set_message('Please seek the staff assistance to reset your password','error'); + }else{ + drupal_set_message('Login details have been sent to your e-mail address.'); + } +} +//function for private message when a user is followed +function payl_program_customizations_teen_flag_flag($flag, $entity_id, $account, $flagging){ + $flag_name = arg(2); + if($flag_name == 'follow'){ + $uid = $flagging->entity_id; + $user_name = $account->name; + privatemsg_new_thread(array(user_load($uid)), $user_name.' is now following you.', $user_name.' is now following you.'); + } +} \ No newline at end of file diff --git a/docroot/sites/all/modules/custom/private_msg_custom_teen/common/functions.php b/docroot/sites/all/modules/custom/private_msg_custom_teen/common/functions.php new file mode 100644 index 00000000..5ecb7d60 --- /dev/null +++ b/docroot/sites/all/modules/custom/private_msg_custom_teen/common/functions.php @@ -0,0 +1,57 @@ +fields('file', array('uri')) + ->condition('fid', $imageFid) + ->execute() + ->fetchAssoc(); + + $img_uri_path = $query['uri']; + $img_path = image_style_url($style, $img_uri_path); + $img = ""; + if ($img_uri_path){ + return $img; + } + } + +} // Play ends here. +?> + diff --git a/docroot/sites/all/modules/custom/private_msg_custom_teen/inc/custom_blocks_teen.inc b/docroot/sites/all/modules/custom/private_msg_custom_teen/inc/custom_blocks_teen.inc new file mode 100644 index 00000000..b9e7176d --- /dev/null +++ b/docroot/sites/all/modules/custom/private_msg_custom_teen/inc/custom_blocks_teen.inc @@ -0,0 +1,9 @@ +vid; + $activities_terms = taxonomy_get_tree($activity_term_vid); + + foreach ($activities_terms as $key => $value) { + $term_title = $value->name; + $term_tid = $value->tid; + $activity_term = taxonomy_term_load($term_tid); + + if($activity_term->field_hotspot_activity_type['und'][0]['value'] == $activity){ + $select_options[0] = 'Select from the following'; + $select_options[$base_url.'/activities-listing/'.$term_tid] = $term_title; + }else if($activity_term->field_progress_page_term['und'][0]['value'] == $progress){ + $select_options[0] = 'Select from the following'; + $select_options[$base_url.'/activities-listing/'.$term_tid] = $term_title; + $select_opt[$term_tid] .= $term_title; + } + } + return $select_options; +} + +function activities_submit_select_list($term,$activity) { + + global $base_url; + $voc = taxonomy_vocabulary_machine_name_load($term); + $activity_term_vid = $voc->vid; + $activities_terms = taxonomy_get_tree($activity_term_vid); + + foreach ($activities_terms as $key => $value) { + $term_title = $value->name; + $term_tid = $value->tid; + $activity_term = taxonomy_term_load($term_tid); + + if($activity_term->field_hotspot_activity_type['und'][0]['value'] == $activity){ + $select_options[0] = 'Select from the following'; + $select_options[$base_url.'/node/add/review-activity/'.$term_tid] = $term_title; + } + } + return $select_options; +} + + +/** + * function callback for adding taxonomny terms for hotspot activities + */ + +function adding_taxonomy_term_hotspot_activities($form, &$form_state){ + + drupal_set_message("Its working !!"); +} + +/** + * function callback for Activities landing page + */ +function activities_page(){ + + $block_one_link = variable_get('static_block_one_title_link'); + $block_one_title = variable_get('static_block_one_title'); + + if(!empty($block_one_link)){ + $title_block_one = "".$block_one_title.""; + }else{ + $title_block_one = $block_one_title; + } + $form['block_one_title'] = array( + '#type' => 'markup', + '#markup' => $title_block_one, + '#prefix' => '
        ', + '#suffix' => '
        ', + '#weight' => 1, + ); + + $desc_block_one = variable_get('static_block_one_description', array('value' => '', 'format' => NULL)); + $form['block_one_description'] = array( + '#type' => 'markup', + '#markup' => $desc_block_one['value'], + '#prefix' => '
        ', + '#suffix' => '
        ', + '#weight' => 2, + ); + + $block_two_link = variable_get('static_block_two_title_link'); + $block_two_title = variable_get('static_block_two_title'); + + if(!empty($block_two_link)){ + $title_block_two = "".$block_two_title.""; + }else{ + $title_block_two = $block_two_title; + } + $form['block_two_title'] = array( + '#type' => 'markup', + '#markup' => $title_block_two, + '#prefix' => '
        ', + '#suffix' => '
        ', + '#weight' => 3, + ); + + $desc_block_two = variable_get('static_block_two_description', array('value' => '', 'format' => NULL)); + $form['block_two_description'] = array( + '#type' => 'markup', + '#markup' => $desc_block_two['value'], + '#prefix' => '
        ', + '#suffix' => '
        ', + '#weight' => 4, + ); + + $block_three_link = variable_get('static_block_three_title_link'); + $block_three_title = variable_get('static_block_three_title'); + + if(!empty($block_three_link)){ + $title_block_three = "".$block_three_title.""; + }else{ + $title_block_three = $block_three_title; + } + $form['block_three_title'] = array( + '#type' => 'markup', + '#markup' => $title_block_three, + '#prefix' => '
        ', + '#suffix' => '
        ', + '#weight' => 5, + ); + + $desc_block_one = variable_get('static_block_three_description', array('value' => '', 'format' => NULL)); + $form['block_three_description'] = array( + '#type' => 'markup', + '#markup' => $desc_block_one['value'], + '#prefix' => '
        ', + '#suffix' => '
        ', + '#weight' => 6, + ); + return $form; +} \ No newline at end of file diff --git a/docroot/sites/all/modules/custom/private_msg_custom_teen/inc/images/Raleway-Bold.otf b/docroot/sites/all/modules/custom/private_msg_custom_teen/inc/images/Raleway-Bold.otf new file mode 100644 index 00000000..2f840b75 Binary files /dev/null and b/docroot/sites/all/modules/custom/private_msg_custom_teen/inc/images/Raleway-Bold.otf differ diff --git a/docroot/sites/all/modules/custom/private_msg_custom_teen/inc/images/Raleway-Medium.otf b/docroot/sites/all/modules/custom/private_msg_custom_teen/inc/images/Raleway-Medium.otf new file mode 100644 index 00000000..79786fe4 Binary files /dev/null and b/docroot/sites/all/modules/custom/private_msg_custom_teen/inc/images/Raleway-Medium.otf differ diff --git a/docroot/sites/all/modules/custom/private_msg_custom_teen/inc/images/SpecialElite.ttf b/docroot/sites/all/modules/custom/private_msg_custom_teen/inc/images/SpecialElite.ttf new file mode 100644 index 00000000..b62fddb4 Binary files /dev/null and b/docroot/sites/all/modules/custom/private_msg_custom_teen/inc/images/SpecialElite.ttf differ diff --git a/docroot/sites/all/modules/custom/private_msg_custom_teen/inc/images/complete.gif b/docroot/sites/all/modules/custom/private_msg_custom_teen/inc/images/complete.gif new file mode 100644 index 00000000..170b3d12 Binary files /dev/null and b/docroot/sites/all/modules/custom/private_msg_custom_teen/inc/images/complete.gif differ diff --git a/docroot/sites/all/modules/custom/private_msg_custom_teen/inc/images/print.png b/docroot/sites/all/modules/custom/private_msg_custom_teen/inc/images/print.png new file mode 100644 index 00000000..c89339b0 Binary files /dev/null and b/docroot/sites/all/modules/custom/private_msg_custom_teen/inc/images/print.png differ diff --git a/docroot/sites/all/modules/custom/private_msg_custom_teen/inc/platform_configuration_teen.inc b/docroot/sites/all/modules/custom/private_msg_custom_teen/inc/platform_configuration_teen.inc new file mode 100644 index 00000000..1907f8a2 --- /dev/null +++ b/docroot/sites/all/modules/custom/private_msg_custom_teen/inc/platform_configuration_teen.inc @@ -0,0 +1,47 @@ + 'fieldset', + '#title' => t('Program Configuration'), + '#collapsible' => TRUE, + '#collapsed' => FALSE, + ); + $form['program_configuration']['pmc_start_date_teen'] = array( + '#title' => t('Program Start date'), + '#type' => 'date_popup', + '#date_format' => 'd/m/Y', + '#date_year_range' => '0:+10', + '#required' => TRUE, + '#size' => 8, + '#default_value' => $program_start_date, + ); + $form['program_configuration']['pmc_end_date_teen'] = array( + '#title' => t('Program End date'), + '#type' => 'date_popup', + '#date_format' => 'd/m/Y', + '#date_year_range' => '0:+10', + '#required' => TRUE, + '#size' => 8, + '#default_value' => $program_end_date, + ); + $form['program_configuration']['pmc_program_name_teen'] = array( + '#type' => 'textfield', + '#title' => 'Program Name', + ); + $form['program_configuration']['pmc_progrm_image_teen'] = array( + '#title' => t('Program Image'), + '#type' => 'managed_file', + '#description' => t('The uploaded image will be displayed on this page using the image style choosen below.'), + '#upload_location' => 'public://', + '#default_value' => variable_get('pmc_progrm_image_teen'), + ); + + return system_settings_form($form); +} \ No newline at end of file diff --git a/docroot/sites/all/modules/custom/private_msg_custom_teen/inc/platform_details_teen.inc b/docroot/sites/all/modules/custom/private_msg_custom_teen/inc/platform_details_teen.inc new file mode 100644 index 00000000..43314618 --- /dev/null +++ b/docroot/sites/all/modules/custom/private_msg_custom_teen/inc/platform_details_teen.inc @@ -0,0 +1,279 @@ + 'fieldset', + '#title' => t('Program Details'), + '#collapsible' => TRUE, + '#collapsed' => TRUE, + ); + $form['program_details']['email_description_field'] = array( + '#type' => 'textarea', + '#title' => 'Email Description Text', + '#description' => 'Description provided for email field showed during registration', + '#default_value' => variable_get('email_description_field'), + ); + $form['program_details']['pmc_purchase_link_teen'] = array( + '#type' => 'textfield', + '#title' => 'Purchase Link', + '#description' => 'Enter a valid url (https://www.example.com) for Booklist purchase', + '#default_value' => variable_get('pmc_purchase_link_teen'), + ); + $form['program_details']['pmc_library_name_teen'] = array( + '#type' => 'textfield', + '#title' => 'Library Name', + '#description' => 'Enter the Library name for the program', + '#default_value' => variable_get('pmc_library_name_teen'), + ); + $form['program_details']['library_abbreviation_for_teen'] = array( + '#type' => 'textfield', + '#title' => 'Abbreviation for Library Name', + '#description' => 'Abbreviation for Library name', + '#default_value' => variable_get('library_abbreviation_for_teen'), + ); + $form['program_details']['catalog_link_for_teen_program'] = array( + '#type' => 'textfield', + '#title' => 'Catalog link for review', + '#default_value' => variable_get('catalog_link_for_teen_program'), + ); + + $form['program_details']['review_pre_header'] = array( + '#type' => 'textarea', + '#title' => 'Header content for review pages', + '#default_value' => variable_get('review_pre_header'), + ); + + $form['announcement_block_details'] = array( + '#type' => 'fieldset', + '#title' => t('Announcement block'), + '#collapsible' => TRUE, + '#collapsed' => TRUE, + ); + + $form['announcement_block_details']['title_announcement'] = array( + '#type' => 'textfield', + '#title' => t('Title for the block'), + '#default_value' => variable_get('title_announcement'), + ); + + $form['activities_landing_page_details'] = array( + '#type' => 'fieldset', + '#title' => t('Activities Landing Page Details'), + //'#description' => 'Bay Area Hotspot Activities block deatils', + '#collapsible' => TRUE, + '#collapsed' => TRUE, + ); + + $form['activities_landing_page_details']['hotspot_activities_block'] = array( + '#type' => 'fieldset', + '#title' => t('Hotspot Activities block'), + '#description' => 'Bay Area Hotspot Activities block deatils', + '#collapsible' => TRUE, + '#collapsed' => TRUE, + ); + + $form['activities_landing_page_details']['hotspot_activities_block']['hotspot_block_title'] = array( + '#type' => 'textfield', + '#title' => t('Title for the block'), + '#default_value' => variable_get('hotspot_block_title'), + ); + + $form['activities_landing_page_details']['hotspot_activities_block']['hotspot_block_description'] = array( + '#type' => 'textarea', + '#title' => t('Description'), + '#default_value' => variable_get('hotspot_block_description'), + ); + + $form['activities_landing_page_details']['hotspot_activities_block']['hotspot_block_link'] = array( + '#type' => 'textfield', + '#title' => t('Suggest a New Activity Form Link'), + '#description' => 'This will link to the Suggest a New Activity Form
        Enter a valid url (https://www.example.com).', + '#default_value' => variable_get('hotspot_block_link'), + ); + + $form['activities_landing_page_details']['hotspot_activities_block']['hotspot_block_link_title'] = array( + '#type' => 'textfield', + '#title' => t('Title for the Link'), + '#default_value' => variable_get('hotspot_block_link_title'), + ); + + $form['activities_landing_page_details']['review_activities_block'] = array( + '#type' => 'fieldset', + '#title' => t('Review Activities block'), + '#description' => 'Review Activity block deatils', + '#collapsible' => TRUE, + '#collapsed' => TRUE, + ); + + $form['activities_landing_page_details']['review_activities_block']['review_activity_block_title'] = array( + '#type' => 'textfield', + '#title' => t('Title for the block'), + '#default_value' => variable_get('review_activity_block_title'), + ); + + $form['activities_landing_page_details']['review_activities_block']['review_activity_block_description'] = array( + '#type' => 'textarea', + '#title' => t('Description'), + '#default_value' => variable_get('review_activity_block_description'), + ); + + $form['activities_landing_page_details']['static_block_one'] = array( + '#type' => 'fieldset', + '#title' => t('Static Block One'), + '#collapsible' => TRUE, + '#collapsed' => TRUE, + ); + + $form['activities_landing_page_details']['static_block_one']['static_block_one_title'] = array( + '#type' => 'textfield', + '#title' => t('Title for the Activity'), + '#default_value' => variable_get('static_block_one_title'), + ); + + $form['activities_landing_page_details']['static_block_one']['static_block_one_title_link'] = array( + '#type' => 'textfield', + '#title' => t('Link for the title'), + '#default_value' => variable_get('static_block_one_title_link'), + ); + + $desc_block_one = variable_get('static_block_one_description', array('value' => '', 'format' => NULL)); + $form['activities_landing_page_details']['static_block_one']['static_block_one_description'] = array( + '#type' => 'text_format', + '#title' => t('Description for the activity'), + '#default_value' => $desc_block_one['value'], + '#format' => $desc_block_one['format'], + ); + + $form['activities_landing_page_details']['static_block_two'] = array( + '#type' => 'fieldset', + '#title' => t('Static Block Two'), + '#collapsible' => TRUE, + '#collapsed' => TRUE, + ); + + $form['activities_landing_page_details']['static_block_two']['static_block_two_title'] = array( + '#type' => 'textfield', + '#title' => t('Title for the Activity'), + '#default_value' => variable_get('static_block_two_title'), + ); + + $form['activities_landing_page_details']['static_block_two']['static_block_two_title_link'] = array( + '#type' => 'textfield', + '#title' => t('Link for the title'), + '#default_value' => variable_get('static_block_two_title_link'), + ); + + $desc_block_two = variable_get('static_block_two_description', array('value' => '', 'format' => NULL)); + $form['activities_landing_page_details']['static_block_two']['static_block_two_description'] = array( + '#type' => 'text_format', + '#title' => t('Description for the activity'), + '#default_value' => $desc_block_two['value'], + '#format' => $desc_block_two['format'], + ); + + $form['activities_landing_page_details']['static_block_three'] = array( + '#type' => 'fieldset', + '#title' => t('Static Block Three'), + '#collapsible' => TRUE, + '#collapsed' => TRUE, + ); + + $form['activities_landing_page_details']['static_block_three']['static_block_three_title'] = array( + '#type' => 'textfield', + '#title' => t('Title for the Activity'), + '#default_value' => variable_get('static_block_three_title'), + ); + + $form['activities_landing_page_details']['static_block_three']['static_block_three_title_link'] = array( + '#type' => 'textfield', + '#title' => t('Link for the title'), + '#default_value' => variable_get('static_block_three_title_link'), + ); + + $desc_block_three = variable_get('static_block_three_description', array('value' => '', 'format' => NULL)); + $form['activities_landing_page_details']['static_block_three']['static_block_three_description'] = array( + '#type' => 'text_format', + '#title' => t('Description for the activity'), + '#default_value' => $desc_block_three['value'], + '#format' => $desc_block_three['format'], + ); + + $form['progress_page'] = array( + '#type' => 'fieldset', + '#title' => t('Progress Page Details'), + '#collapsible' => TRUE, + '#collapsed' => TRUE, + ); + + + $form['progress_page']['progress_details'] = array( + '#type' => 'fieldset', + '#title' => t('Progress page details page'), + '#collapsible' => TRUE, + '#collapsed' => TRUE, + ); + + $form['progress_page']['progress_details']['pg_title'] = array( + '#type' => 'textfield', + '#title' => t('Progress page title'), + '#default_value' => variable_get('pg_title') ? variable_get('pg_title') : 'Progress', + ); + + $progress_details_desc = variable_get('pg_desc', array('value' => '', 'format' => NULL)); + $form['progress_page']['progress_details']['pg_desc'] = array( + '#type' => 'text_format', + '#title' => t('Progress page description'), + '#default_value' => $progress_details_desc['value'], + '#format' => $progress_details_desc['format'], + ); + + $form['progress_page']['progress_block'] = array( + '#type' => 'fieldset', + '#title' => t('Report Progress Block Details'), + '#collapsible' => TRUE, + '#collapsed' => TRUE, + ); + + $form['progress_page']['progress_block']['no_of_grids'] = array( + '#type' => 'textfield', + '#title' => t('No of grids needed for progress page'), + '#default_value' => variable_get('no_of_grids') ? variable_get('no_of_grids') : 18, + ); + + $report_block_text = variable_get('report_block_desc', array('value' => '', 'format' => NULL)); + $form['progress_page']['progress_block']['report_block_desc'] = array( + '#type' => 'text_format', + '#title' => t('Text for Report an Activity block'), + '#default_value' => $report_block_text['value'], + '#format' => $report_block_text['format'], + ); + + $form['progress_page']['rewards_block'] = array( + '#type' => 'fieldset', + '#title' => t('Rewards'), + '#collapsible' => TRUE, + '#collapsed' => TRUE, + ); + + $progress_rewards_text = variable_get('progress_rewards', array('value' => '', 'format' => NULL)); + $form['progress_page']['rewards_block']['progress_rewards'] = array( + '#type' => 'text_format', + '#title' => t('Text for Rewards block'), + '#default_value' => $progress_rewards_text['value'], + '#format' => $progress_rewards_text['format'], + ); + + return system_settings_form($form); +} + +// validation for purchase link form +if(isset($purchase_link)){ + function platform_details_teen_validate($form, &$form_state) { + $purchase_link = $form_state['values']['pmc_purchase_link_teen']; + if(filter_var($purchase_link, FILTER_VALIDATE_URL) === false) { + form_set_error('pmc_purchase_link_teen','Please enter a valid URL'); + } + } +} \ No newline at end of file diff --git a/docroot/sites/all/modules/custom/private_msg_custom_teen/inc/progress_page.inc b/docroot/sites/all/modules/custom/private_msg_custom_teen/inc/progress_page.inc new file mode 100644 index 00000000..f92daac9 --- /dev/null +++ b/docroot/sites/all/modules/custom/private_msg_custom_teen/inc/progress_page.inc @@ -0,0 +1,288 @@ +uid; + + $tid = $_REQUEST['id']; + $activity_date = $_REQUEST['date']; + + $activity_term = taxonomy_term_load($tid); + $activity_id = $activity_term->field_activity_id['und'][0]['value']; + + $activity_limit = retrieve_activity_limit($activity_id); + $node_created = activity_report_node_creation($activity_uid, $activity_id); + + if($node_created < $activity_limit){ + activity_report_node_create($activity_id, $activity_date, $tid); + play_library_program_create_activity_entry($activity_id, $activity_uid); + }else{ + $_SESSION['exceed-activity-limit'] = drupal_set_message(t('You have recorded maximum number of times this activity can be performed.'),'error'); + } + echo 1; +} + +function user_avatar_progress_page($uid){ + + global $user; + $user_pf = profile2_load_by_user($user->uid); + $user_main = user_load($uid); + + $img_id = $user_pf['main']->field_user_avatar[LANGUAGE_NONE][0]['target_id']; + $user_name = $user_main->name; + + $query = db_select('field_data_field_avatar_image', 't'); + $query->join('file_managed', 'n', 'n.fid = t.field_avatar_image_fid'); + $result = $query + ->fields('n', array('uri')) + ->condition('t.entity_id', $img_id) + ->execute(); + + $img_uri_query = $result->fetchObject(); + $img_uri = $img_uri_query->uri; + $style = 'avatar_dashboard'; + $img_path = image_style_url($style, $img_uri); + + $img = ""; + return $img.$user_name; +} + +/** + * Provides user avatar image uri used for progress print pdf page + */ +function user_avatar_progress_print_page($uid){ + + global $user; + $user_pf = profile2_load_by_user($user->uid); + + $img_id = $user_pf['main']->field_user_avatar['und'][0]['target_id']; + + $query = db_select('field_data_field_avatar_image', 't'); + $query->join('file_managed', 'n', 'n.fid = t.field_avatar_image_fid'); + $result = $query + ->fields('n', array('uri')) + ->condition('t.entity_id', $img_id) + ->execute(); + + $img_uri = $result->fetchObject(); + $img_uri_path = $img_uri->uri; + $style = 'avatar_dashboard'; + $img_path = image_style_url($style, $img_uri_path); + return $img_path; +} + +/** + * Retrieves activity limt that is set + */ +function retrieve_activity_limit($activity_id){ + $entity_info = entity_load('activity', array($activity_id)); + return $activity_name = $entity_info[$activity_id]->field_activity_limit['und'][0]['value']; +} + +/** + * Retrieves how many times an activity report node has been created by the user + */ +function activity_report_node_creation($account_id, $activity_id){ + $query = new EntityFieldQuery(); + $query->entityCondition('entity_type', 'node'); + $query->entityCondition('bundle', 'activity_report'); + $query->propertyCondition('uid', $account_id); + $query->fieldCondition('field_activity_id_report', 'value', $activity_id); + return $query->count()->execute(); +} + +function specefic_user_nodes($current_uid){ + $user_stamp_query = db_select('node','n'); + $user_stamp_query->condition('type','activity_report'); + $user_stamp_query->condition('uid',$current_uid); + $user_stamp_query->condition('status','1'); + $user_stamp_query->addExpression('COUNT(1)','count'); + $res_stamp = $user_stamp_query->execute(); + + if($record = $res_stamp->fetchAssoc()) + return $stamp_count = $record['count']; + return 0; +} + +function progress_print_page(){ + + global $user; + global $base_url; + $uid = $user->uid; + $raff_count = raffle_count($uid); + + $u_avatar = ''; + $u_name = $user->name; + $u_avatar_image = user_avatar_progress_print_page($uid); + $av_img = explode($base_url.'/', $u_avatar_image); + $u_avatar = $av_img[1]; + + $grids = variable_get('no_of_grids'); + $pg_title = variable_get('pg_title'); + $page_desc = variable_get('pg_desc', array('value' => '', 'format' => NULL)); + $page_desc = $page_desc['value']; + $activity_completed = specefic_user_nodes($uid); + $activities_left = $grids - $activity_completed; + + $block_rewards = module_invoke('views','block_view','prize_won_for_progress_page-block_1'); + $user_rew_block = render($block_rewards['content']); + $report_block_text = variable_get('report_block_desc', array('value' => '', 'format' => NULL)); + $report_block_text['value']; + + $reward_won = views_embed_view('prize_won_for_progress_page','block'); + $reward_block = variable_get('progress_rewards', array('value' => '', 'format' => NULL)); + $u_rew = $reward_block['value']; + $reward_block = variable_get('progress_rewards', array('value' => '', 'format' => NULL)); + $rew_block = $reward_block['value']; + + $criteria = array( + 'uid' => $uid, + 'type' => 'activity_report', + ); + + $nodes = entity_load('node',FALSE,$criteria); + $output = ''; + $output .= " +
        +
        + +

        $pg_title

        +
        $page_desc
        + + + + + + + + + +
        $u_nameActivities Completed: $activity_completed activitiesActivities Left to Complete: $activities_left activitiesRaffle Tickets Earned: $raff_count
        + + + + + +
        $user_rew_block$rew_block
        +

        My Passport Stamps

        + + "; + + foreach ($nodes as $key => $value) { + $node_date = $value->field_completion_date['und'][0]['value']; + $user_reward = $value->field_won_reward['und'][0]['value']; + $node_type_hotspot = $value->field_hotspot_activity_report['und'][0]['value']; + $user_won_reward = ''; + $hotspot_type_activity = ''; + $n_date = date("m.d.y", strtotime($node_date)); + + if($node_type_hotspot){ + $hotspot_type_activity = '

        Bay Area Hot Spot!

        '; + } + + if($user_reward){ + $user_won_reward = '

        Congratulations! You have earned a prize!

        '; + } + + $node_nid[] = '

        '.$n_date.'

        '.$hotspot_type_activity.'

        '.$value->title.'

        '.'

        '."".'

        '.$user_won_reward; + } + $test = $user_reward; + + $i = 0; $gr = ceil($grids/6); + for($j = 0; $j < $gr; $j++){ + $output.= ""; + + for($k = 0; $k < 6; $k++){ + + if(isset($node_nid[$i])){ + + if (strpos($node_nid[$i], 'Congratulations') !== false) { + $output .= ""; + } + else{ + $output .= ""; + } + } + else{ + $output .= ""; + } + + $i++; + } + $output .= ''; + } + $output .= '
        " . $node_nid[$i] . "" . $node_nid[$i] . "
        '; + /*echo $output;*/ + + //pdf for progress page + require_once("sites/all/modules/contrib/print/lib/dompdf/dompdf_config.inc.php"); + $dompdf = new DOMPDF; + $html = stripslashes($output); + $dompdf->load_html(utf8_decode($html)); + $dompdf->render(); + $font = Font_Metrics::get_font("din", "regular"); + $dompdf->stream("Progress-Page.pdf"); +} diff --git a/docroot/sites/all/modules/custom/private_msg_custom_teen/js/private_msg_custom_teen.js b/docroot/sites/all/modules/custom/private_msg_custom_teen/js/private_msg_custom_teen.js new file mode 100644 index 00000000..0c4b8b25 --- /dev/null +++ b/docroot/sites/all/modules/custom/private_msg_custom_teen/js/private_msg_custom_teen.js @@ -0,0 +1,55 @@ +/** + * function callback for progress page report + */ +(function($) { +Drupal.behaviors.bfc_api_custom = { + attach: function (context, settings) { + + $('#pg-report').click(function() { + var errors = 0; + var tid = $("#edit-activity-progress-select option:selected").val(); + if(tid === '0'){ + $('#errorwarn-activity').text("Please enter activity"); + return false; + }else{ + $('#errorwarn-activity').text(""); + } + $("#edit-date-datepicker-popup-0").map(function(){ + if( !$(this).val() ) { + $('#edit-date-datepicker-popup-0').addClass('warning'); + errors++; + }else if ($(this).val()) { + $('#edit-date-datepicker-popup-0').removeClass('warning'); + } + }); + if(errors > 0){ + $('#errorwarn').text("Please enter date"); + return false; + } + + $(this).attr('disabled','disabled'); + var tid = $("#edit-activity-progress-select option:selected").val(); + var date = $("#edit-date-datepicker-popup-0").val(); + var count = $('.inserted').length; + var count_grid = $('.grid').length; + if(count_grid != count){ + var insert = count + 1; + $.ajax({ + url: Drupal.settings.basePath + 'complete-activity-progress', + type: 'post', + async: false, + data: "id="+tid+"&date="+date, + success: function (data) { + if (data) { + window.location.reload(true); + } + } + }); + $("#cells"+insert).addClass("inserted"); + }else{ + alert('Filled'); + } + }); + } +}; +})(jQuery); diff --git a/docroot/sites/all/modules/custom/private_msg_custom_teen/private_msg_custom_teen.info b/docroot/sites/all/modules/custom/private_msg_custom_teen/private_msg_custom_teen.info new file mode 100644 index 00000000..3b4a9be3 --- /dev/null +++ b/docroot/sites/all/modules/custom/private_msg_custom_teen/private_msg_custom_teen.info @@ -0,0 +1,6 @@ +name = Private Message Custom for Teen Program +description = A private message block for dashboard page for teen program +scripts[] = js/private_msg_custom_teen.js +core = 7.x +version = 7.x +files[] = common/functions.php \ No newline at end of file diff --git a/docroot/sites/all/modules/custom/private_msg_custom_teen/private_msg_custom_teen.module b/docroot/sites/all/modules/custom/private_msg_custom_teen/private_msg_custom_teen.module new file mode 100644 index 00000000..d503216d --- /dev/null +++ b/docroot/sites/all/modules/custom/private_msg_custom_teen/private_msg_custom_teen.module @@ -0,0 +1,1062 @@ + array( + 'title' => t('View Progress Page Access'), + 'description' => t('Access to view progress page'), + ), + ); +} + +/** + * Implements hook_date_combo_process_alter(). + * + * Disabling of future dates for date of birth field + */ +function private_msg_custom_teen_date_combo_process_alter(&$element, &$form_state, $context){ + + if($context['form']['#form_id'] == 'user_register_form' || $context['form']['#form_id'] == 'user_profile_form') { + $element["value"]['#datepicker_options'] = array( + 'maxDate' => '+0D' + ); + $element["value2"]['#datepicker_options'] = array( + 'maxDate' => '+0D' + ); + } +} + +/** + * Implementation of hook_menu(). + */ +function private_msg_custom_teen_menu() { + $items['my-reviews'] = array( + 'title' => 'Reviews', + 'page callback' => 'user_reviews_teen', + 'access arguments' => array('access content'), + 'type' => MENU_SUGGESTED_ITEM, + ); + + $items['my-booklist'] = array( + 'title' => 'Booklist', + 'page callback' => 'user_booklist_teen', + 'access arguments' => array('access content'), + 'type' => MENU_SUGGESTED_ITEM, + ); + + $items['rewards'] = array( + 'title' => 'Rewards', + 'page callback' => 'program_badges_rewards', + 'access arguments' => array('access content'), + 'type' => MENU_SUGGESTED_ITEM, + ); + + // Platform configuration settings for the program + $items['admin/config/system/platform_configuration'] = array( + 'title' => 'Platform Configuration for teen program', + 'description' => 'Chilco platform configuration page.', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('platform_configuration_teen'), + 'access arguments' => array('access administration pages'), + 'type' => MENU_NORMAL_ITEM, + 'file' => 'inc/platform_configuration_teen.inc', + 'file path' => drupal_get_path('module', 'private_msg_custom_teen'), + ); + + $items['profile_avatar'] = array( + 'title' => 'Profile Avatar', + 'description' => 'providing tabs for different avatars', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('ajax_avatar_profile_checkboxes'), + 'access arguments' => array('access content'), + 'type' => MENU_SUGGESTED_ITEM, + 'file' => 'inc/platform_configuration_teen.inc', + 'file path' => drupal_get_path('module', 'private_msg_custom_teen'), + ); + + // Platform details for the program + $items['admin/config/system/platform_details'] = array( + 'title' => 'Platform Details for teen program', + 'description' => 'Chilco platform details page.', + 'page callback' => 'drupal_get_form', + 'page arguments' => array('platform_details_teen'), + 'access arguments' => array('access administration pages'), + 'type' => MENU_NORMAL_ITEM, + 'file' => 'inc/platform_details_teen.inc', + 'file path' => drupal_get_path('module', 'private_msg_custom_teen'), + ); + + //Activities Landing page + $items['activities'] = array( + 'title' => 'Activities for the teen Summer Passport', + 'page callback' => 'activities_page', + 'access arguments' => array('access content'), + 'type' => MENU_SUGGESTED_ITEM, + 'file' => 'inc/hotspot_activities_block.inc', + 'file path' => drupal_get_path('module', 'private_msg_custom_teen'), + ); + + $items['progress'] = array( + 'page callback' => 'progress_report_grid', + 'access arguments' => array('progress_page_access'), // permission for view progress page + 'type' => MENU_CALLBACK, + 'file' => 'inc/progress_page.inc', + 'file path' => drupal_get_path('module', 'private_msg_custom_teen'), + ); + + $items['activity_custom_node_insert'] = array( + 'page callback' => 'activity_report_node_create', + 'access callback' => TRUE, + 'type' => MENU_CALLBACK, + 'file' => 'inc/progress_page.inc', + 'file path' => drupal_get_path('module', 'private_msg_custom_teen'), + ); + + $items['complete-activity-progress'] = array( + 'page callback' => 'complete_activity_progress', + 'access callback' => TRUE, + 'type' => MENU_CALLBACK, + 'file' => 'inc/progress_page.inc', + 'file path' => drupal_get_path('module', 'private_msg_custom_teen'), + ); + + $items['progress-print'] = array( + 'page callback' => 'progress_print_page', + 'access callback' => TRUE, + 'type' => MENU_CALLBACK, + 'file' => 'inc/progress_page.inc', + 'file path' => drupal_get_path('module', 'private_msg_custom_teen'), + ); + + $items['testing-cases'] = array( + 'page callback' => 'test_page', + 'access callback' => TRUE, + 'type' => MENU_CALLBACK, + ); + + return $items; +} + +/** + * Implements function to check if program is active or not. + * + * @return Boolean + * 0 if not active, 1 if active + */ +function is_program_active_teen() { + + $program_start_date = variable_get('pmc_start_date', 0); + $program_end_date = variable_get('pmc_end_date', 0); + if ($program_start_date && $program_end_date) { + $now = time(); + $program_start_date = strtotime($program_start_date); + $program_end_date = strtotime($program_end_date); + + if (($now >= $program_start_date) && ($now <= $program_end_date)) { + return 1; + } else { + drupal_set_message("The program is currently closed."); + return 0; + } + } + return 1; +} + +function private_msg_custom_teen_init() { + + $program_start_date = variable_get('pmc_start_date', 0); + $program_end_date = variable_get('pmc_end_date', 0); + $setting = array('private_msg_custom_teen' => array('proStart' => $program_start_date, 'proEnd' => $program_end_date)); + drupal_add_js($setting, 'setting'); + +} + +/** + * Implementation of hook_form_profile2_edif_PROFILE_NAME_form_alter() + */ +function private_msg_custom_teen_form_profile2_edit_main_form_alter(&$form, $form_state) { + + $form['profile_main']['field_user_avatar'] = array('#attributes' => array('style' => 'display:none')); + + $query = db_select('field_data_field_avatar_type','type'); + $query->fields('type',array('field_avatar_type_tid','entity_id')); + $query->join('eck_user_avatar','eck','eck.id = type.entity_id'); + $query->join('taxonomy_term_data','tax','tax.tid = type.field_avatar_type_tid'); + $query->fields('tax',array('name')); + $query->fields('eck',array('title')); + $query_avatar = $query->execute()->fetchAll(); + $output = ''; + $output .= '
        '; + + foreach ($query_avatar as $key => $value) { + $as = $value->name; + $tax_name[$value->field_avatar_type_tid] = $value->name; + $tax_name[$value->field_avatar_type_tid] = $value->name; + $avatar_name[$value->field_avatar_type_tid][] = $value->entity_id; + } + + foreach ($tax_name as $key => $value) { + $output .= '
        '. $value . '
        '; + } + + $form['checkboxes_fieldset'] = array( + '#title' => t("Avatars"), + '#prefix' => '
        ', + '#suffix' => '
        ', + '#type' => 'fieldset', + '#weight' => 11, + ); + + $form['checkboxes_fieldset']['description'] = array('#markup' => '
        ' . t('What kind of avatar do you want?').'
        '); + + foreach ($tax_name as $key => $value) { + $form['checkboxes_fieldset']['checkboxes_fieldset2'.$value] = array( + '#title' => $value, + '#prefix' => '
        ', + '#suffix' => '
        ', + '#type' => 'fieldset', + '#weight' => 11, + ); + foreach ($avatar_name[$key] as $key1 => $value2) { + $form['checkboxes_fieldset']['checkboxes_fieldset2'.$value]["avatar_checkbox-".$value2] = array( + '#type' => 'radio', + '#title' => avatar_images_list_teen($value2), + '#prefix' => '
        ', + '#suffix' => '
        ', + '#attributes' => array( + 'class' => array('av_radio') + ) + ); + } + } + array_unshift($form['#submit'], 'submit_for_avatar_teen'); +} + + +function avatar_images_list_teen($value) { + + $query = db_select('field_data_field_avatar_image', 't'); + $query->join('file_managed', 'n', 'n.fid = t.field_avatar_image_fid'); + $result = $query + ->fields('n', array('uri')) + ->condition('t.entity_id', $value) + ->execute() + ->fetchAssoc(); + $img_uri_path = $result['uri']; + $style = 'avatar_style'; + $img_path = image_style_url($style, $img_uri_path); + $img = ""; + if ($img_uri_path){ + return $img; + } +} + +function ajax_autocheckboxes_callback_avatar_teen($form, $form_state) { + + return $form['checkboxes_fieldset']; +} + +// submit handler for create user account form. +function submit_for_avatar_teen($form, $form_state) { + + foreach ($form_state['values'] as $key => $value) { + if($value === 'on'){ + $avatar_entity = 'avatar_checkbox-'; + $av_entity_id = strpos($key, $avatar_entity); + + if ($av_entity_id !== false) { + // use sesion to pass avatar ID to profile presave hook. + $_SESSION['user_avatar_id'] = substr($key, 16); + break; + } + } + } +} + +/** + * Implementation of hook_profile2_presave() + */ +function private_msg_custom_teen_profile2_presave($profile) { + + if (isset($_SESSION['user_avatar_id'])){ + $profile->field_user_avatar[LANGUAGE_NONE][0]['target_id'] = $_SESSION['user_avatar_id']; + unset($_SESSION['user_avatar_id']); + } +} + +/** + * Implementation of hook_form_alter() + */ +function private_msg_custom_teen_form_alter(&$form, &$form_state, $form_id) { + + $sub_title = variable_get('review_pre_header'); + $catalog_link = variable_get('catalog_link_for_teen_program'); + $library_abbreviation = variable_get('library_abbreviation_for_teen'); + $email_desc = variable_get('email_description_field'); + + if($form_id == 'movie_review_node_form'){ + //hidding label for other option field + $form['field_genre_other_option'][LANGUAGE_NONE][0]['value']['#title'] = NULL; + $form['title']['#prefix'] = $sub_title; + $form['field_catalog_link_movie_review'][LANGUAGE_NONE][0]['#description'] = 'Please enter a link to the movie in the '.$library_abbreviation.' catalog so that other readers can find it easily.'; + + //Removing of N/A radio button + unset($form['field_genre']['und']['#options']['_none']); + unset($form['field_language']['und']['#options']['_none']); + unset($form['field_rating']['und']['#options']['_none']); + unset($form['field_please_select_one']['und']['#options']['_none']); + + //Changing default title + drupal_set_title('Write a Movie Review'); + } + + if($form_id == 'music_review_node_form') { + $form['field_artist_performer'][LANGUAGE_NONE][0]['#prefix'] = $sub_title; + $form['title']['#title'] = t('Album or Song Title'); + $form['field_genre_other_option_music'][LANGUAGE_NONE][0]['value']['#title'] = NULL; + $form['field_catalog_link_music'][LANGUAGE_NONE][0]['#description'] = 'Please enter a link to the music in the '.$library_abbreviation.' catalog so that other readers can find it easily.'; + + unset($form['field_please_select_one_music']['und']['#options']['_none']); + unset($form['field_genre_music']['und']['#options']['_none']); + + drupal_set_title('Write a Music Review'); + } + + if($form_id == 'video_game_review_node_form') { + $form['title']['#prefix'] = $sub_title; + $form['field_catalog_link_video_game'][LANGUAGE_NONE][0]['#description'] = 'Please enter a link to the video game in the '.$library_abbreviation.' catalog so that other readers can find it easily.'; + $form['field_platform_other_option'][LANGUAGE_NONE][0]['value']['#title'] = NULL; + + unset($form['field_please_select_videogame']['und']['#options']['_none']); + unset($form['field_age_rating_of_game']['und']['#options']['_none']); + + drupal_set_title('Write a Video Game Review'); + } + + if($form_id == 'review_book_node_form') { + $form['title']['#prefix'] = $sub_title; + drupal_set_title('Write a Book Review'); + } + + if($form_id == 'booklist_node_form') { + drupal_set_title('Create a Booklist'); + } + + if($form_id == 'review_activity_node_form') { + $sel_options = $form['field_activity_type']['und']['#options']; + foreach ($sel_options as $key => $value) { + $activity_term = taxonomy_term_load($key); + if(!empty($activity_term->field_hotspot_activity_type['und'][0]['value']) == 1){ + $opt[$key] = $value; + } + } + $form['field_activity_type']['und']['#options'] = $opt; + $form['field_activity_type']['#prefix'] = $sub_title; + unset($form['field_privacy_settings']['und']['#options']['_none']); + drupal_set_title('Write an Activity Review'); + } + + // Adding purchase link for booklist + if($form_id == 'booklist_node_form') { + $form['purchase_link'] = array( + '#type' => 'link', + '#title' => 'Suggest a purchase', + '#href' => variable_get('pmc_purchase_link_teen'), + '#attributes' => array('target' => '_blank'), + '#weight' => 3, + ); + } + + //Changing of description text for email field + if($email_desc != ''){ + if($form_id == 'user_register_form'){ + $form['account']['mail']['#description'] = $email_desc; + } + } + return $form; +} + +function user_reviews_teen() { + return ''; +} + +function user_booklist_teen() { + return ''; +} + +function program_badges_rewards() { + return ''; +} + +/** + * Implements hook_block_info(). + */ +function private_msg_custom_teen_block_info() { + + $blocks = array(); + $blocks['pm_block'] = array( + 'info' => t('Private Message Dashboard Block for teen program'), + ); + + $blocks['homepage_slider'] = array( + 'info' => t('Homepage booklist slider Block for teen program'), + ); + + $blocks['menu_for_mobile'] = array( + 'info' => t('Menu block for mobile for teen program'), + ); + + $blocks['write_review_block'] = array( + 'info' => t('Write a review block'), + ); + + $blocks['program_rewards_block'] = array( + 'info' => t('Program Rewards Block teen'), + ); + + $blocks['program_announcement_block'] = array( + 'info' => t('Program Announcement Block for landing page'), + ); + + $blocks['hotspot_activity_block'] = array( + 'info' => t('Hotspot activities block'), + ); + + $blocks['progress_submit_block'] = array( + 'info' => t('Progress Submit Block'), + ); + + return $blocks; +} + +/** + * Implements hook_block_view(). + */ +function private_msg_custom_teen_block_view($delta = '') { + $block = array(); + + switch($delta) { + case 'pm_block' : + $block['content'] = pm_block_view_teen(); + break; + + case 'homepage_slider' : + $block['content'] = homepage_slider_teen(); + break; + + case 'menu_for_mobile' : + $block['content'] = header_menu_mobile_teen(); + break; + + case 'write_review_block' : + $block['content'] = drupal_get_form('creating_review'); + break; + + case 'program_rewards_block' : + $block['content'] = view_rewards_block(); + break; + + case 'program_announcement_block' : + $block['content'] = announcement_block(); + break; + + case 'hotspot_activity_block' : + $block['content'] = hotspot_activities(); + break; + + case 'progress_submit_block' : + $block['content'] = drupal_get_form('progress_record'); + break; + } + + return $block; +} + +/** + * Function callback for private_msg_custom_teen_block_view. + */ +function pm_block_view_teen() { + + global $user; + $current_user = $user->uid; + $new = ''; + + $query_pm = db_select('pm_index','pi'); + $query_pm->fields('pi',array('mid','is_new','deleted')); + $query_pm->join('pm_message','pmsg','pmsg.mid = pi.mid'); + $query_pm->join('users','u','u.uid = pmsg.author'); + $query_pm->fields('u',array('name')); + $query_pm->condition('recipient',$current_user,'='); + $query_pm->condition('deleted',0,'='); + $query_pm->orderBy('timestamp', 'DESC'); + $query_pm->range(0,2); + $query = $query_pm->execute() + ->fetchAll(); + + $no_result = count($query); + $output = '
        '; + + if ($no_result != 0) { + foreach($query as $res) { + $msg_id = $res->mid; + $deleted = $res->deleted; + $author = $res->name; + + $result = db_select('pm_message','pm') + ->fields('pm',array('subject','timestamp')) + ->condition('mid',$msg_id,'=') + ->execute() + ->fetchAssoc(); + + $pm_new = $res->is_new.'
        '; + if($pm_new == 1){ + $new = '
        '.'NEW! '.'
        '; + } + + $output .= '
        '.''.'
        '.$author.'
        '.'
        '.$pm_date = date('F d, Y',$result['timestamp']).'
        '.'
        '; + } + return $output.'View All Messages'.'
        '; + } else { + return 'No Messages to display'; + } +} + +/** + * Function callback for homepage booklist slider. + */ +function homepage_slider_teen(){ + + $output = '
        '; + $block = module_invoke('views', 'block_view', 'booklist_slideshow-block_2'); + $output .= '
        '. render($block['content']). '
        '; + + $block = module_invoke('views', 'block_view', 'booklist_slideshow-block_3'); + $output .= '
        '. render($block['content']). '
        '; + + $block = module_invoke('views', 'block_view', 'booklist_slideshow-block_4'); + $output .= '
        '. render($block['content']). '
        '; + + return $output; +} + +/** + * Function callback for header menu for mobile + */ +function header_menu_mobile_teen(){ + $output = '
        '; + + $block = module_invoke('views', 'block_view', 'top_block-block_2'); + $output .= render($block['content']); + + $block = module_invoke('menu', 'block_view', 'menu-secoundary-menu-mobile'); + $output .= render($block['content']).'
        '; + + return $output; +} + +/** + * Function callback for creating reviews + */ +function creating_review($form, $form_state){ + + global $base_url; + + $no_review = $base_url.'/reviews'; + $link_book_review = $base_url.'/node/add/review-book'; + $link_movie_review = $base_url.'/node/add/movie-review'; + $link_music_review = $base_url.'/node/add/music-review'; + $link_video_game_review = $base_url.'/node/add/video-game-review'; + $link_activity_review = $base_url.'/node/add/review-activity'; + + $values = array(0 => t('Select Review'), + $link_book_review => t('Book Reviews'), + $link_activity_review => t('Activity Reviews'), + $link_movie_review => t('Movie Reviews'), + $link_music_review => t('Music Reviews'), + $link_video_game_review => t('Video Game Reviews')); + + $form['review_options'] = array( + '#title' => t('Write A Review'), + '#type' => 'select', + '#description' => t('Select Review type'), + '#options' => $values, + '#attributes' => array( + 'class' => array('add_review_node') + ) + ); + + return $form; +} + +function view_rewards_block(){ + + $block = module_invoke('views', 'block_view', 'program_rewards-block_1'); + $output = render($block['content']); + + $block = module_invoke('views', 'block_view', 'program_rewards_raffle-block_1'); + $output .= render($block['content']); + + return $output; +} + +/** + * function callback for hotspot activities block + */ +function hotspot_activities() { + + global $base_url; + + $link_book_review = $base_url.'/node/add/review-book'; + $link_movie_review = $base_url.'/node/add/movie-review'; + $link_music_review = $base_url.'/node/add/music-review'; + $link_video_game_review = $base_url.'/node/add/video-game-review'; + $link_booklist = $base_url.'/node/add/booklist'; + + $view_book_review = $base_url.'/reviews'; + $view_movie_review = $base_url.'/movie-review'; + $view_music_review = $base_url.'/music-review-listing'; + $view_video_game_review = $base_url.'/video-game-review'; + $view_booklist = $base_url.'/booklists'; + $view_activity_review = $base_url.'/activities'; + + $view_reviews = array(0 => t('Select from the following'), + $view_book_review => t('Book Reviews'), + $view_movie_review => t('Movie Reviews'), + $view_music_review => t('Music Reviews'), + $view_video_game_review => t('Video Game Reviews')); + + $add_reviews = array(0 => t('Select from the following'), + $link_book_review => t('Book Reviews'), + $link_movie_review => t('Movie Reviews'), + $link_music_review => t('Music Reviews'), + $link_video_game_review => t('Video Game Reviews')); + + $form['activity_title'] = array( + '#type' => 'markup', + '#markup' => variable_get('hotspot_block_title'), + '#prefix' => '
        ', + '#suffix' => '
        ', + '#weight' => 1, + ); + + $form['activity_description'] = array( + '#type' => 'markup', + '#markup' => variable_get('hotspot_block_description'), + '#prefix' => '
        ', + '#suffix' => '
        ', + '#weight' => 2, + ); + + + $form['activities_read_list'] = array( + '#title' => t('Read Reviews of Bay Area Hot Spots'), + '#type' => 'select', + '#options' => activities_view_select_list('hotspot_activities','1'), + '#attributes' => array( + 'class' => array('activities_list_read') + ), + '#weight' => 3, + ); + + global $user; + $current_user = $user->uid; + + if($current_user != 0){ + $form['activities_submit_list'] = array( + '#title' => t('Submit a Review'), + '#type' => 'select', + '#options' => activities_submit_select_list('hotspot_activities','1'), + '#attributes' => array( + 'class' => array('activities_list_submit') + ), + '#weight' => 4, + ); + } + + if($current_user != 0){ + $form['suggest_link'] = array( + '#type' => 'link', + '#title' => variable_get('hotspot_block_link_title'), + '#href' => variable_get('hotspot_block_link'), + '#attributes' => array('target' => '_blank'), + '#prefix' => '', + '#weight' => 5, + ); + } + + $form['activity_review_title'] = array( + '#type' => 'markup', + '#markup' => variable_get('review_activity_block_title'), + '#prefix' => '
        ', + '#suffix' => '
        ', + '#weight' => 6, + ); + + $form['activity_review_description'] = array( + '#type' => 'markup', + '#markup' => variable_get('review_activity_block_description'), + '#prefix' => '
        ', + '#suffix' => '
        ', + '#weight' => 7, + ); + + if($current_user != 0){ + $form['read_submit'] = array( + '#title' => t('Write a Review'), + '#type' => 'select', + '#options' => $add_reviews, + '#attributes' => array( + 'class' => array('reviews_add') + ), + '#weight' => 8, + ); + } + + $form['read_reviews'] = array( + '#title' => t('Read Existing Reviews'), + '#type' => 'select', + '#options' => $view_reviews, + '#attributes' => array( + 'class' => array('reviews_list_view') + ), + '#weight' => 9, + ); + + return $form; +} + + +/** + * function callback for progress block to report activity + */ +function progress_record($form,$form_state){ + + $form['activity_progress_select'] = array( + '#title' => t('I completed'), + '#type' => 'select', + '#options' => activities_view_select_option('hotspot_activities','1'), + '#attributes' => array( + 'class' => array('activities_list_progress') + ), + '#weight' => 1, + ); + + $form['date'] = array( + '#type' => 'date_popup', + '#title' => 'on', + '#date_format' => 'Y-m-d', + '#date_year_range' => '-0', + '#datepicker_options' => array('maxDate' => '+0D'), + '#weight' => 2, + ); + return $form; +} + +function activities_view_select_option($term,$progress) { + + global $base_url; + $voc = taxonomy_vocabulary_machine_name_load($term); + $activity_term_vid = $voc->vid; + $activities_terms = taxonomy_get_tree($activity_term_vid); + + foreach ($activities_terms as $key => $value) { + $term_title = $value->name; + $term_tid = $value->tid; + $activity_term = taxonomy_term_load($term_tid); + if($activity_term->field_progress_page_term['und'][0]['value'] == $progress){ + $select_options[] = array(); + $select_options[0] = 'Select activity'; + $select_options[$term_tid] = $term_title; + } + } + return $select_options; +} + +/** + * function callback for progress page + */ +function progress_report_grid(){ + + drupal_add_js( drupal_get_path('module', 'private_msg_custom_teen') . '/js/private_msg_custom_teen.js'); + return theme('progress-report'); +} + +/** + * template for progress page + */ +function private_msg_custom_teen_theme(){ + + $templates = array( + 'progress-report' => array( + 'template' => 'templates/progress_page', + )); + + return $templates; +} + +/** + * function for saving taxonomy term on creation of activity. + */ +function activities_term_save($term, $fire_hook, $activity) { + + $voc = taxonomy_vocabulary_machine_name_load($term); + $activity_term_vid = $voc->vid; + $activity_id = $activity->id; + $activity_title = $activity->title; + $activity_hotspot_value = $activity->field_hotspot_activity['und'][0]['value']; + $activity_firehook = $activity->field_activity_fired_hook['und'][0]['value']; + $activity_progress_page = $activity->field_show_on_progress_page['und'][0]['value']; + + $query = db_select('field_data_field_activity_id','activity_id') + ->fields('activity_id',array('field_activity_id_value','entity_id')) + ->condition('field_activity_id_value',$activity_id) + ->execute() + ->fetchAssoc(); + + $field_activity_id = $query['field_activity_id_value']; + $entity_field_id = $query['entity_id']; + + if(!isset($field_activity_id)){ + if($activity_firehook == $fire_hook){ + $hotspot_activity_term = new stdClass(); + $hotspot_activity_term->name = $activity_title; + $hotspot_activity_term->vid = $activity_term_vid; // The ID of the parent vocabulary + $hotspot_activity_term->parent = 0; // This tells taxonomy that this is a top-level term + + taxonomy_term_save($hotspot_activity_term); + $tid_term = $hotspot_activity_term->tid; + $activity_term = taxonomy_term_load($tid_term); + + $activity_term->field_activity_id['und'][0]['value'] = $activity_id; + $activity_term->field_hotspot_activity_type['und'][0]['value'] = $activity_hotspot_value ? $activity_hotspot_value:0; + $activity_term->field_progress_page_term['und'][0]['value'] = $activity_progress_page ? $activity_progress_page:0; + taxonomy_term_save($activity_term); + } + }else if(isset($field_activity_id)) { + $hotspot_query = db_select('taxonomy_term_data','tax') + ->fields('tax',array('tid')) + ->condition('tid',$entity_field_id) + ->execute() + ->fetchAssoc(); + + $tid = $hotspot_query['tid']; + if($activity_firehook != $fire_hook){ + taxonomy_term_delete($tid); + }else{ + $activity_term = taxonomy_term_load($tid); + $activity_term->field_activity_id['und'][0]['value'] = $activity_id; + $activity_term->field_hotspot_activity_type['und'][0]['value'] = $activity_hotspot_value; + $activity_term->field_progress_page_term['und'][0]['value'] = $activity_progress_page; + $activity_term->name = $activity_title; + taxonomy_term_save($activity_term); + } + } +} + +function activities_taxonomy_term_delete($term, $activity){ + + $voc = taxonomy_vocabulary_machine_name_load($term); + $activity_id = $activity->id; + + $query = db_select('field_data_field_activity_id','activity_id') + ->fields('activity_id',array('field_activity_id_value','entity_id')) + ->condition('field_activity_id_value',$activity_id) + ->execute() + ->fetchAssoc(); + + $entity_field_id = $query['entity_id']; + + $hotspot_query = db_select('taxonomy_term_data','tax') + ->fields('tax',array('tid')) + ->condition('tid',$entity_field_id) + ->execute() + ->fetchAssoc(); + + $tid = $hotspot_query['tid']; + + if(isset($tid)){ + taxonomy_term_delete($tid); + } +} + +function activity_report_node_create($activity_id, $activity_date, $term_tid, $check_in_progress = 0, $current_user = 0) { + + $entity_info = entity_load('activity', array($activity_id)); + $activity_name = $entity_info[$activity_id]->title; + $hotspot_activity_type = $entity_info[$activity_id]->field_hotspot_activity['und'][0]['value']; + $activity_progress_status = $entity_info[$activity_id]->field_show_on_progress_page['und'][0]['value']; + $_SESSION['progress_activity_id']= $activity_id; + + // check activity 'show in progress' status + if($check_in_progress) { + if(!$activity_progress_status) { + return FALSE; + } + } + // if show in progress is one, node is created. + if($current_user == 0){ + global $user; + $current_user = $user->uid; + } + + $query = new EntityFieldQuery(); + $query->entityCondition('entity_type', 'node') // grab nodes + ->entityCondition('bundle', 'activity_report') // filter by activity_report type + ->propertyCondition('status', 1) // filter by published + ->propertyCondition('uid', $current_user) // filter by current user + ->count(); // count + + $num_of_nodes = $query->execute(); + $grids = variable_get('no_of_grids'); + + //comparing nodes created with number of grids available + // if($num_of_nodes < $grids){ + $node = new stdClass(); // Creating a new node object + $node->type = 'activity_report'; //Content type + $node->language = LANGUAGE_NONE; + node_object_prepare($node); + $node->title = $activity_name; + $node->status = 1; + $node->uid = $current_user; + $node->field_activity_id_report[LANGUAGE_NONE][0]['value'] = $activity_id; + $node->field_hotspot_activity_report[LANGUAGE_NONE][0]['value'] = $hotspot_activity_type; + $node->field_show_on_progress_report[LANGUAGE_NONE][0]['value'] = $activity_progress_status; + $node->field_term_id[LANGUAGE_NONE][0]['value'] = $term_tid; + $node->field_completion_date[LANGUAGE_NONE][0]['value'] = $activity_date; + node_save($node); + $created_nid = $node->nid; + + $_SESSION['teen_progress_report_nid'] = $created_nid; + // } +} + +/** + * Getting of rafle count for the user + */ +function raffle_count($uid){ + + $query = db_select('eck_raffle','raf') + ->fields('raf',array('id')) + ->condition('uid',$uid) + ->condition('type','raffle_entry') + ->execute(); + $num = $query->rowCount(); + + return $num; +} + +/** + * Function for testing purposes + */ + +function test_page() { + return ''; +} + +// function for statistical report according to stamps earned +function user_nodes_three_stamps($uid){ + + $query = new EntityFieldQuery(); + $entities = $query->entityCondition('entity_type', 'node') + ->entityCondition('bundle', 'activity_report') + ->propertyCondition('uid', $uid) + ->count() + ->execute(); + + if($entities == 3){ + return FALSE; + }else{ + return TRUE; + } +} + +function user_nodes_six_stamps($uid){ + + $query = new EntityFieldQuery(); + $entities = $query->entityCondition('entity_type', 'node') + ->entityCondition('bundle', 'activity_report') + ->propertyCondition('uid', $uid) + ->count() + ->execute(); + + if($entities == 6){ + return FALSE; + }else{ + return TRUE; + } +} + +function user_nodes_nine_stamps($uid){ + + $query = new EntityFieldQuery(); + $entities = $query->entityCondition('entity_type', 'node') + ->entityCondition('bundle', 'activity_report') + ->propertyCondition('uid', $uid) + ->count() + ->execute(); + + if($entities == 9){ + return FALSE; + }else{ + return TRUE; + } +} + +function user_nodes_twelve_stamps($uid){ + + $query = new EntityFieldQuery(); + $entities = $query->entityCondition('entity_type', 'node') + ->entityCondition('bundle', 'activity_report') + ->propertyCondition('uid', $uid) + ->count() + ->execute(); + + if($entities == 12){ + return FALSE; + }else{ + return TRUE; + } +} + +function user_nodes_fifteen_stamps($uid){ + + $query = new EntityFieldQuery(); + $entities = $query->entityCondition('entity_type', 'node') + ->entityCondition('bundle', 'activity_report') + ->propertyCondition('uid', $uid) + ->count() + ->execute(); + + if($entities == 15){ + return FALSE; + }else{ + return TRUE; + } +} + +function user_nodes_eighteen_stamps($uid){ + + $query = new EntityFieldQuery(); + $entities = $query->entityCondition('entity_type', 'node') + ->entityCondition('bundle', 'activity_report') + ->propertyCondition('uid', $uid) + ->count() + ->execute(); + + if($entities == 18){ + return FALSE; + }else{ + return TRUE; + } +} \ No newline at end of file diff --git a/docroot/sites/all/modules/custom/private_msg_custom_teen/templates/progress_page.tpl.php b/docroot/sites/all/modules/custom/private_msg_custom_teen/templates/progress_page.tpl.php new file mode 100644 index 00000000..ab098df4 --- /dev/null +++ b/docroot/sites/all/modules/custom/private_msg_custom_teen/templates/progress_page.tpl.php @@ -0,0 +1,118 @@ + +uid; + $raff_count = raffle_count($current_uid); +?> +
        +

        + +

        +
        + '', 'format' => NULL)); + print $page_desc['value']; ?> +
        + +
        +
        + +
        +
        +
        + +
        +
        + +
        +
        + +
        +
        +
        +
        +
        + Report an Activity'; + print '
        '; + print '
        '; + + $block = block_load('private_msg_custom_teen', 'progress_submit_block'); + $render_block = _block_get_renderable_array(_block_render_blocks(array($block))); + $output = drupal_render($render_block); + print $output; + ?> +
        + +
        +
        '', 'format' => NULL)); + //print $report_block_text['value'] + ?> +
        +
        + + +
        +
        + +
        '', 'format' => NULL)); + print $reward_block['value']; ?> +
        + +
        My Passport Stamps'; + $exceed_limit = ''; + + $criteria = array( + 'uid' => $current_uid, + 'type' => 'activity_report', + ); + + $nodes = entity_load('node',FALSE,$criteria); + + foreach ($nodes as $key => $value) { + $node_date = $value->field_completion_date['und'][0]['value']; + $user_reward = $value->field_won_reward['und'][0]['value']; + $node_type_hotspot = $value->field_hotspot_activity_report['und'][0]['value']; + $user_won_reward = ''; + $hotspot_type_activity = ''; + $n_date = date("m.d.y", strtotime($node_date)); + + if($node_type_hotspot){ + $hotspot_type_activity = '

        Bay Area Hot Spot!

        '; + } + if($user_reward){ + $user_won_reward = '

        Congratulations! You have earned a prize!

        '; + } + + $node_nid[] = '

        '.$n_date.'

        '.$hotspot_type_activity.'

        '.$value->title.'

        '.$user_won_reward; + } + + if(isset($_SESSION['exceed-activity-limit']['status'][0])){ + $exceed_limit = $_SESSION['exceed-activity-limit']['status'][0]; + } + + $i=0; $gr = ceil($grids/6); + for($j=0;$j<$gr;$j++){ + echo "
        "; + for($k=0; $k < 6; $k++){ + if(isset($node_nid[$i])){ + echo "
        ".$node_nid[$i]."
        "; + } + else{ + echo "
        "; + } + $i++; + } + echo '
        '; + } + unset($exceed_limit); ?> +
        diff --git a/docroot/sites/all/modules/custom/random_list_widget_teen/random_list_widget_teen.info b/docroot/sites/all/modules/custom/random_list_widget_teen/random_list_widget_teen.info new file mode 100644 index 00000000..fb0ba700 --- /dev/null +++ b/docroot/sites/all/modules/custom/random_list_widget_teen/random_list_widget_teen.info @@ -0,0 +1,3 @@ +name = "Random List Widget for Teen Program" +description = Display and set value of field to a random value from an options list for teen program. +core = 7.x diff --git a/docroot/sites/all/modules/custom/random_list_widget_teen/random_list_widget_teen.install b/docroot/sites/all/modules/custom/random_list_widget_teen/random_list_widget_teen.install new file mode 100644 index 00000000..ccb34aa6 --- /dev/null +++ b/docroot/sites/all/modules/custom/random_list_widget_teen/random_list_widget_teen.install @@ -0,0 +1,24 @@ + array( +// 'value' => array( +// 'type' => 'varchar', +// 'length' => 255, +// 'not null' => FALSE, +// ), +// ), +// 'indexes' => array( +// 'value' => array('value'), +// ), +// ); +//} diff --git a/docroot/sites/all/modules/custom/random_list_widget_teen/random_list_widget_teen.js b/docroot/sites/all/modules/custom/random_list_widget_teen/random_list_widget_teen.js new file mode 100644 index 00000000..dc5b315c --- /dev/null +++ b/docroot/sites/all/modules/custom/random_list_widget_teen/random_list_widget_teen.js @@ -0,0 +1,23 @@ +/** + * @file + * Adds form selector behaviors for setting up random items. + * May move to ajax down the line. + */ +(function ($) { + Drupal.behaviors.random_list_widget_teen_field = { + attach: function() { + $('.random-list-widget-regenerate').click(function() { + var classes = $(this).attr('class').split(" "); + for (i = 0; i < classes.length; i++) { + if (classes[i].startsWith('random_list_widget_teen_text_')) { + my_list = Drupal.settings[classes[i]]; + var item = my_list[Math.floor(Math.random()*my_list.length)]; + var input = $(this).parent().find('.random-list-widget'); + $(input).val(item); + } + } + return false; + }); + } + } +})(jQuery); \ No newline at end of file diff --git a/docroot/sites/all/modules/custom/random_list_widget_teen/random_list_widget_teen.module b/docroot/sites/all/modules/custom/random_list_widget_teen/random_list_widget_teen.module new file mode 100644 index 00000000..b6d9730c --- /dev/null +++ b/docroot/sites/all/modules/custom/random_list_widget_teen/random_list_widget_teen.module @@ -0,0 +1,128 @@ + MENU_CALLBACK, + 'access callback' => TRUE, + 'page callback' => 'random_list_widget_teen_get_random_field_value', + 'page arguments' => array(2, 3, 4), + 'delivery callback' => 'ajax_deliver', + ); + + return $items; +} + +/** + * Implements hook_field_info(). + */ +function random_list_widget_teen_field_widget_info() { + $field_types = array( + 'text', + 'number_integer', + 'number_decimal', + 'number_float', + ); + $settings = array( + 'available_options' => '', + ); + return array( + 'random_list_widget_teen_randomizer' => array( + 'label' => t('Randomized text from list'), + 'field types' => $field_types, + 'behaviors' => array( + 'multiple values' => FIELD_BEHAVIOR_DEFAULT, + 'default value' => FIELD_BEHAVIOR_DEFAULT, + ), + 'settings' => $settings, + 'weight' => 2, + ), + ); +} + + +/** + * Implements hook_field_widget_settings_form(). + */ +function random_list_widget_teen_field_widget_settings_form($field, $instance) { + $form = array(); + + $settings = &$instance['widget']['settings']; + + $form['available_options'] = array( + '#type' => 'textarea', + '#title' => t('Available options'), + '#description' => t('A list of values that are used for randomizations. Enter one value per line. Do not use html or anything else as it will get stripped out.'), + '#default_value' => isset($settings['available_options']) ? $settings['available_options'] : '', + '#required' => TRUE, + ); + + return $form; +} + +/** + * Implements hook_field_widget_form(). + */ +function random_list_widget_teen_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) { + $options = _random_list_widget_teen_get_available_options($instance); + $js_setting_class = "random_list_widget_teen_text_{$field['field_name']}_{$instance['entity_type']}_{$instance['bundle']}"; + + $element['value'] = array( + '#type' => 'textfield', + '#title' => $instance['label'], + '#default_value' => isset($items[$delta]['value']) ? $items[$delta]['value'] : '', + '#attributes' => array( + 'class' => array( + 'random-list-widget', + $js_setting_class, + ), + ), + '#attached' => array( + 'js' => array( + drupal_get_path('module', 'random_list_widget_teen') . '/random_list_widget_teen.js' => array( + 'type' => 'file', + ), + array( + 'data' => array($js_setting_class => $options), + 'type' => 'setting', + ), + ), + ), + ); + $element['randomized-text-regenerate'] = array( + '#type' => 'submit', + '#value' => t('Change'), + '#attributes' => array( + 'class' => array('random-list-widget-regenerate', $js_setting_class), + ), + ); + return $element; +} + +function random_list_widget_teen_get_random_field_value($field_name, $entity_type, $bundle_name) { + $field_instance = field_info_instance($entity_type, $field_name, $bundle_name); + $options = _random_list_widget_teen_get_available_options($field_instance); + return _random_list_widget_teen_get_random_value($options); +} + +function _random_list_widget_teen_get_available_options($field_instance) { + $options_text = $field_instance['widget']['settings']['available_options']; + $options_array = explode("\n", $options_text); + foreach ($options_array as $key => $option) { + $options[$key] = check_plain($option); + } + return $options; +} + +function _random_list_widget_teen_get_random_value($list) { + return $list[array_rand($list, 1)]; +} diff --git a/docroot/sites/all/modules/custom/reward_notifications_teen/reward_notifications_teen.info b/docroot/sites/all/modules/custom/reward_notifications_teen/reward_notifications_teen.info new file mode 100644 index 00000000..927ac118 --- /dev/null +++ b/docroot/sites/all/modules/custom/reward_notifications_teen/reward_notifications_teen.info @@ -0,0 +1,4 @@ +name = reward_notifications for Teen Program +description = showing of notifications onscreen on getting reward for teen program +core = 7.x +version = 7.x \ No newline at end of file diff --git a/docroot/sites/all/modules/custom/reward_notifications_teen/reward_notifications_teen.install b/docroot/sites/all/modules/custom/reward_notifications_teen/reward_notifications_teen.install new file mode 100644 index 00000000..226d7302 --- /dev/null +++ b/docroot/sites/all/modules/custom/reward_notifications_teen/reward_notifications_teen.install @@ -0,0 +1,100 @@ + 'On Screen message when a user gets an award', + 'fields' => array( + 'id' => array( + 'description' => 'id field', + 'type' => 'serial', + 'not null' => TRUE, + 'unsigned' => TRUE, + ), + 'uid' => array( + 'description' => 'User id', + 'type' => 'int', + 'not null' => TRUE, + ), + 'type' => array( + 'description' => 'reward type', + 'type' => 'varchar', + 'length' => '255', + ), + 'reward_id' => array( + 'description' => 'Id of reward claimed', + 'type' => 'int', + 'not null' => TRUE, + ), + 'reward_name' => array( + 'description' => 'Name of reward received', + 'type' => 'varchar', + 'length' => '255', + ), + 'reward_notifications' => array( + 'description' => 'On screen notification', + 'type' => 'varchar', + 'length' => '1000', + ), + 'reward_mail_notifications' => array( + 'description' => 'Mail notification', + 'type' => 'varchar', + 'length' => '255', + ), + 'notifications_read' => array( + 'description' => 'To check notification is read or not', + 'type' => 'int', + 'not null' => TRUE, + 'default' => 0, + ), + ), + 'primary key' => array('id'), + ); + + /* schema for reward-winners list */ + $schema['winner_list_teen'] = array( + 'description' => 'showing of winners list', + 'fields' => array( + 'id' => array( + 'description' => 'id field', + 'type' => 'serial', + 'not null' => TRUE, + 'unsigned' => TRUE, + ), + 'uid' => array( + 'description' => 'User id', + 'type' => 'int', + 'not null' => TRUE, + ), + 'reward_id' => array( + 'description' => 'Id of reward claimed', + 'type' => 'int', + 'not null' => TRUE, + ), + 'reward_receieved_date' => array( + 'description' => 'Date the reward is receieved', + 'type' => 'varchar', + 'length' => '255', + ), + 'staff_notes' => array( + 'description' => 'Staff notes', + 'type' => 'varchar', + 'length' => '255', + ), + 'reward_name' => array( + 'description' => 'Name of reward received', + 'type' => 'varchar', + 'length' => '255', + ), + 'reward_status' => array( + 'description' => 'checked/unchecked', + 'type' => 'int', + 'not null' => TRUE, + 'default' => 0, + ), + ), + 'primary key' => array('id'), + ); + return $schema; +} \ No newline at end of file diff --git a/docroot/sites/all/modules/custom/reward_notifications_teen/reward_notifications_teen.module b/docroot/sites/all/modules/custom/reward_notifications_teen/reward_notifications_teen.module new file mode 100644 index 00000000..2251b20e --- /dev/null +++ b/docroot/sites/all/modules/custom/reward_notifications_teen/reward_notifications_teen.module @@ -0,0 +1,330 @@ + t('On Screen Message on Reward claim for teen program'), + ); + + return $blocks; +} + +/** +* Implements hook_block_view(). +*/ +function reward_notifications_teen_block_view($delta = '') { + $block = array(); + + switch ($delta) { + case 'Claim_reward_message_teen': + $block['subject'] = t('Reward Notification for teen program'); + $block['content'] = _reward_claim_onscreen_message_teen(); + break; + } + return $block; +} + +function _reward_claim_onscreen_message_teen() { + global $user; + $uid = $user->uid; + + $query = db_select('reward_notification_patron_teen','noti') + ->fields('noti',array('reward_notifications_teen','reward_mail_notifications','id')) + ->condition('uid',$uid) + ->condition('notifications_read',0) + ->execute() + ->fetchAll(); + + foreach($query as $res){ + $onscreen_msg = $res->reward_notifications_teen; + $id = $res->id; + + $rm_html_tags = strip_tags($onscreen_msg); + $rew_message = str_replace(' ', ' ', $rm_html_tags); + + drupal_set_message(t('%string', array('%string' => $rew_message)), 'status'); + + $sub_query = db_update('reward_notification_patron_teen') + ->fields(array('notifications_read' => '1')) + ->condition('id',$id) + ->execute(); + } +} + +/** +* Implements hook_menu(). +*/ + +function reward_notifications_teen_menu(){ + + $items = array(); + + $items['reward/%'] = array( + 'title' => 'Award', + 'access callback' => TRUE, + 'page callback' => 'drupal_get_form', + 'page arguments' => array('claim_reward_teen',1), + 'type' => MENU_NORMAL_ITEM, + ); + + $items['reward-raffle/%'] = array( + 'title' => 'Award', + 'access callback' => TRUE, + 'page callback' => 'drupal_get_form', + 'page arguments' => array('claim_raffle_teen',1), + 'type' => MENU_NORMAL_ITEM, + ); + +return $items; +} + +//function to provide form for reward winners +function claim_reward_teen($form_state,$arg){ + + $rid = $arg['build_info']['args'][0]; + + $query = db_select('eck_reward','rew') + ->fields('rew', array('title', 'id','uid')) + ->condition('id', $rid,'=') + ->execute() + ->fetchAssoc(); + + $reward_id = $query['id']; + $reward_title = $query['title']; + $reward_uid = $query['uid']; + + $query_sub = db_select('winner_list_teen','win') + ->fields('win',array('reward_status','staff_notes','reward_receieved_date')) + ->condition('reward_id', $reward_id, '=') + ->execute() + ->fetchAssoc(); + + $status = $query_sub['reward_status']; + $notes = $query_sub['staff_notes']; + $receieved_date = $query_sub['reward_receieved_date']; + + $form['reward_taken'] = array( + '#title' => t($reward_title), + '#type' => 'checkbox', + '#default_value' => isset($status) ? $status : '0', + ); + + $form['uid'] = array( + '#type' => 'hidden', + '#value' => $reward_uid, + ); + + $form['rid'] = array( + '#type' => 'hidden', + '#value' => $reward_id, + ); + + $form['title'] = array( + '#type' => 'hidden', + '#value' => $reward_title, + ); + + $form['receieved_date'] = array( + '#type' => 'date_popup', + '#date_format' => 'Y-m-d', + '#title' => "Receieved" , + '#default_value' => isset($receieved_date) ? $receieved_date : NULL, + ); + + $form['staff_notes'] = array( + '#title' => t('Staff Notes'), + '#type' => 'textarea', + '#default_value' => isset($notes) ? $notes : NULL, + ); + + $form['submit_button'] = array( + '#type' => 'submit', + '#value' => t('SAVE'), + ); + +return $form; +} + +// submit handler for form build in function claim_reward +function claim_reward_teen_submit($form, &$form_state){ + + $reward_title = $form_state['values']['title']; + $reward_status = $form_state['values']['reward_taken']; + $reward_uid = $form_state['values']['uid']; + $staff_notes = $form_state['values']['staff_notes']; + $reward_rid = $form_state['values']['rid']; + $reward_receieved_date = $form_state['values']['receieved_date']; + + if(isset($reward_receieved_date)){ + $reward_status = '1'; + }else{ + $reward_status = '0'; + } + + $query = db_select('winner_list_teen','win') + ->fields('win',array('reward_id')) + ->condition('reward_id',$reward_rid,'=') + ->execute() + ->fetchAssoc(); + + $r_id = $query['reward_id']; + + if(empty($r_id)){ + db_insert('winner_list_teen') + ->fields(array( + 'uid' => $reward_uid, + 'reward_id' => $reward_rid, + 'staff_notes' => $staff_notes, + 'reward_name' => $reward_title, + 'reward_status' => $reward_status, + 'reward_receieved_date' => $reward_receieved_date, + ))->execute(); + drupal_set_message("saved"); + }else{ + db_update('winner_list_teen') + ->fields(array( + 'reward_status' => $reward_status, + 'staff_notes' => $staff_notes, + 'reward_receieved_date' => $reward_receieved_date, + )) + ->condition('reward_id',$reward_rid,'=') + ->execute(); + drupal_set_message("saved"); + } + $form_state['redirect'] = 'reward-winners'; +} + +/** + * function to provide form for raffle winners + */ +function claim_raffle_teen($form_state, $arg){ + + $rid = $arg['build_info']['args'][0]; + + $query_raf = db_select('eck_raffle','raff') + ->fields('raff', array('title', 'id','uid')) + ->condition('id', $rid,'=') + ->execute() + ->fetchAssoc(); + + $reward_id = $query_raf['id']; + $reward_title = $query_raf['title']; + $reward_uid = $query_raf['uid']; + + $query_sub = db_select('winner_list_teen','win') + ->fields('win',array('reward_status','staff_notes','reward_receieved_date')) + ->condition('reward_id', $reward_id, '=') + ->execute() + ->fetchAssoc(); + + $status = $query_sub['reward_status']; + $notes = $query_sub['staff_notes']; + $receieved_date = $query_sub['reward_receieved_date']; + + $form['reward_taken'] = array( + '#title' => t($reward_title), + '#type' => 'checkbox', + '#default_value' => isset($status) ? $status : '0', + ); + + $form['uid'] = array( + '#type' => 'hidden', + '#value' => $reward_uid, + ); + + $form['rid'] = array( + '#type' => 'hidden', + '#value' => $reward_id, + ); + + $form['title'] = array( + '#type' => 'hidden', + '#value' => $reward_title, + ); + + $form['receieved_date'] = array( + '#type' => 'date_popup', + '#date_format' => 'Y-m-d', + '#title' => "Receieved" , + '#default_value' => isset($receieved_date) ? $receieved_date : NULL, + ); + + $form['staff_notes'] = array( + '#title' => t('Staff Notes'), + '#type' => 'textarea', + '#default_value' => isset($notes) ? $notes : NULL, + ); + + $form['submit_button'] = array( + '#type' => 'submit', + '#value' => t('SAVE'), + ); + +return $form; +} + +/** + * submit handler for form build in function claim_raffle + */ +function claim_raffle_teen_submit($form, &$form_state){ + + $reward_title = $form_state['values']['title']; + $reward_status = $form_state['values']['reward_taken']; + $reward_uid = $form_state['values']['uid']; + $staff_notes = $form_state['values']['staff_notes']; + $reward_rid = $form_state['values']['rid']; + $reward_receieved_date = $form_state['values']['receieved_date']; + + if(isset($reward_receieved_date)){ + $reward_status = '1'; + }else{ + $reward_status = '0'; + } + + $query = db_select('winner_list_teen','win') + ->fields('win',array('reward_id')) + ->condition('reward_id',$reward_rid,'=') + ->execute() + ->fetchAssoc(); + + $r_id = $query['reward_id']; + + if(empty($r_id)){ + db_insert('winner_list_teen') + ->fields(array( + 'uid' => $reward_uid, + 'reward_id' => $reward_rid, + 'staff_notes' => $staff_notes, + 'reward_name' => $reward_title, + 'reward_status' => $reward_status, + 'reward_receieved_date' => $reward_receieved_date, + ))->execute(); + drupal_set_message("saved"); + }else{ + db_update('winner_list_teen') + ->fields(array( + 'reward_status' => $reward_status, + 'staff_notes' => $staff_notes, + 'reward_receieved_date' => $reward_receieved_date, + )) + ->condition('reward_id',$reward_rid,'=') + ->execute(); + drupal_set_message("saved"); + } + + $form_state['redirect'] = 'raffle-winners'; +} \ No newline at end of file diff --git a/docroot/sites/all/modules/features/activity_review/activity_review.features.inc b/docroot/sites/all/modules/features/activity_review/activity_review.features.inc new file mode 100644 index 00000000..c51978ef --- /dev/null +++ b/docroot/sites/all/modules/features/activity_review/activity_review.features.inc @@ -0,0 +1,12 @@ + "3.0"); +} diff --git a/docroot/sites/all/modules/features/activity_review/activity_review.features.menu_custom.inc b/docroot/sites/all/modules/features/activity_review/activity_review.features.menu_custom.inc new file mode 100644 index 00000000..07fc30c1 --- /dev/null +++ b/docroot/sites/all/modules/features/activity_review/activity_review.features.menu_custom.inc @@ -0,0 +1,25 @@ + 'main-menu', + 'title' => 'Main menu', + 'description' => 'The Main menu is used on many sites to show the major sections of the site, often in a top navigation bar.', + ); + // Translatables + // Included for use with string extractors like potx. + t('Main menu'); + t('The Main menu is used on many sites to show the major sections of the site, often in a top navigation bar.'); + + return $menus; +} diff --git a/docroot/sites/all/modules/features/activity_review/activity_review.info b/docroot/sites/all/modules/features/activity_review/activity_review.info new file mode 100644 index 00000000..b1bf8b12 --- /dev/null +++ b/docroot/sites/all/modules/features/activity_review/activity_review.info @@ -0,0 +1,13 @@ +name = Activity Review +description = Activity Review listing page +core = 7.x +package = Features +version = 7.x-1.0 +dependencies[] = features +dependencies[] = menu +dependencies[] = views +features[ctools][] = views:views_default:3.0 +features[features_api][] = api:2 +features[menu_custom][] = main-menu +features[views_view][] = activity_review +project path = sites/all/modules/features diff --git a/docroot/sites/all/modules/features/activity_review/activity_review.module b/docroot/sites/all/modules/features/activity_review/activity_review.module new file mode 100644 index 00000000..f8936ec3 --- /dev/null +++ b/docroot/sites/all/modules/features/activity_review/activity_review.module @@ -0,0 +1,7 @@ +name = 'activity_review'; + $view->description = ''; + $view->tag = 'default'; + $view->base_table = 'node'; + $view->human_name = 'Activity Review'; + $view->core = 7; + $view->api_version = '3.0'; + $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */ + + /* Display: Master */ + $handler = $view->new_display('default', 'Master', 'default'); + $handler->display->display_options['title'] = 'Activity Review'; + $handler->display->display_options['use_more_always'] = FALSE; + $handler->display->display_options['access']['type'] = 'perm'; + $handler->display->display_options['cache']['type'] = 'none'; + $handler->display->display_options['query']['type'] = 'views_query'; + $handler->display->display_options['exposed_form']['type'] = 'basic'; + $handler->display->display_options['pager']['type'] = 'full'; + $handler->display->display_options['pager']['options']['items_per_page'] = '10'; + $handler->display->display_options['style_plugin'] = 'default'; + $handler->display->display_options['row_plugin'] = 'node'; + /* Field: Content: Title */ + $handler->display->display_options['fields']['title']['id'] = 'title'; + $handler->display->display_options['fields']['title']['table'] = 'node'; + $handler->display->display_options['fields']['title']['field'] = 'title'; + $handler->display->display_options['fields']['title']['label'] = ''; + $handler->display->display_options['fields']['title']['alter']['word_boundary'] = FALSE; + $handler->display->display_options['fields']['title']['alter']['ellipsis'] = FALSE; + /* Sort criterion: Content: Post date */ + $handler->display->display_options['sorts']['created']['id'] = 'created'; + $handler->display->display_options['sorts']['created']['table'] = 'node'; + $handler->display->display_options['sorts']['created']['field'] = 'created'; + $handler->display->display_options['sorts']['created']['order'] = 'DESC'; + /* Filter criterion: Content: Published */ + $handler->display->display_options['filters']['status']['id'] = 'status'; + $handler->display->display_options['filters']['status']['table'] = 'node'; + $handler->display->display_options['filters']['status']['field'] = 'status'; + $handler->display->display_options['filters']['status']['value'] = 1; + $handler->display->display_options['filters']['status']['group'] = 1; + $handler->display->display_options['filters']['status']['expose']['operator'] = FALSE; + /* Filter criterion: Content: Type */ + $handler->display->display_options['filters']['type']['id'] = 'type'; + $handler->display->display_options['filters']['type']['table'] = 'node'; + $handler->display->display_options['filters']['type']['field'] = 'type'; + $handler->display->display_options['filters']['type']['value'] = array( + 'review_activity' => 'review_activity', + ); + + /* Display: Page */ + $handler = $view->new_display('page', 'Page', 'page'); + $handler->display->display_options['path'] = 'activity-review'; + $export['activity_review'] = $view; + + return $export; +} diff --git a/docroot/sites/all/modules/features/moview_review_content_type/moview_review_content_type.features.field_base.inc b/docroot/sites/all/modules/features/moview_review_content_type/moview_review_content_type.features.field_base.inc new file mode 100644 index 00000000..ed1de60f --- /dev/null +++ b/docroot/sites/all/modules/features/moview_review_content_type/moview_review_content_type.features.field_base.inc @@ -0,0 +1,308 @@ + 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_actors', + 'field_permissions' => array( + 'type' => 0, + ), + 'indexes' => array( + 'format' => array( + 0 => 'format', + ), + ), + 'locked' => 0, + 'module' => 'text', + 'settings' => array( + 'max_length' => 255, + 'profile2_private' => FALSE, + ), + 'translatable' => 0, + 'type' => 'text', + ); + + // Exported field_base: 'field_catalog_link_movie_review'. + $field_bases['field_catalog_link_movie_review'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_catalog_link_movie_review', + 'field_permissions' => array( + 'type' => 0, + ), + 'indexes' => array(), + 'locked' => 0, + 'module' => 'link', + 'settings' => array( + 'attributes' => array( + 'class' => '', + 'rel' => '', + 'target' => 'default', + ), + 'display' => array( + 'url_cutoff' => 80, + ), + 'enable_tokens' => 1, + 'profile2_private' => FALSE, + 'title' => 'optional', + 'title_maxlength' => 128, + 'title_value' => '', + 'url' => 0, + ), + 'translatable' => 0, + 'type' => 'link_field', + ); + + // Exported field_base: 'field_director'. + $field_bases['field_director'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_director', + 'field_permissions' => array( + 'type' => 0, + ), + 'indexes' => array( + 'format' => array( + 0 => 'format', + ), + ), + 'locked' => 0, + 'module' => 'text', + 'settings' => array( + 'max_length' => 255, + 'profile2_private' => FALSE, + ), + 'translatable' => 0, + 'type' => 'text', + ); + + // Exported field_base: 'field_genre'. + $field_bases['field_genre'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_genre', + 'field_permissions' => array( + 'type' => 0, + ), + 'indexes' => array( + 'value' => array( + 0 => 'value', + ), + ), + 'locked' => 0, + 'module' => 'list', + 'settings' => array( + 'allowed_values' => array( + 'genre_1' => 'Genre 1', + 'genre_2' => 'Genre 2', + 'genre_3' => 'Genre 3', + 'genre_4' => 'Genre 4', + 'genre_5' => 'Genre 5', + 'genre_6' => 'Genre 6', + 'genre_other' => 'Other', + ), + 'allowed_values_function' => '', + 'profile2_private' => FALSE, + ), + 'translatable' => 0, + 'type' => 'list_text', + ); + + // Exported field_base: 'field_genre_other_option'. + $field_bases['field_genre_other_option'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_genre_other_option', + 'field_permissions' => array( + 'type' => 0, + ), + 'indexes' => array( + 'format' => array( + 0 => 'format', + ), + ), + 'locked' => 0, + 'module' => 'text', + 'settings' => array( + 'max_length' => 255, + 'profile2_private' => FALSE, + ), + 'translatable' => 0, + 'type' => 'text', + ); + + // Exported field_base: 'field_language'. + $field_bases['field_language'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_language', + 'field_permissions' => array( + 'type' => 0, + ), + 'indexes' => array( + 'value' => array( + 0 => 'value', + ), + ), + 'locked' => 0, + 'module' => 'list', + 'settings' => array( + 'allowed_values' => array( + 'language_1' => 'Language 1', + 'language_2' => 'Language 2', + 'language_3' => 'Language 3', + 'language_4' => 'Language 4', + 'language_5' => 'language 5', + ), + 'allowed_values_function' => '', + 'profile2_private' => FALSE, + ), + 'translatable' => 0, + 'type' => 'list_text', + ); + + // Exported field_base: 'field_movie_review_sub_titile'. + $field_bases['field_movie_review_sub_titile'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_movie_review_sub_titile', + 'field_permissions' => array( + 'type' => 0, + ), + 'indexes' => array( + 'value' => array( + 0 => 'value', + ), + ), + 'locked' => 0, + 'module' => 'list', + 'settings' => array( + 'allowed_values' => array(), + 'allowed_values_function' => '', + 'profile2_private' => FALSE, + ), + 'translatable' => 0, + 'type' => 'list_text', + ); + + // Exported field_base: 'field_please_select_one'. + $field_bases['field_please_select_one'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_please_select_one', + 'field_permissions' => array( + 'type' => 0, + ), + 'indexes' => array( + 'value' => array( + 0 => 'value', + ), + ), + 'locked' => 0, + 'module' => 'list', + 'settings' => array( + 'allowed_values' => array( + 'public' => 'Other players can read this review and see my username', + 'publicnoname' => 'Other players can read this review, but I don’t want them to see my username', + 'private' => 'I don’t want other players to see this review', + ), + 'allowed_values_function' => '', + 'profile2_private' => FALSE, + ), + 'translatable' => 0, + 'type' => 'list_text', + ); + + // Exported field_base: 'field_rating'. + $field_bases['field_rating'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_rating', + 'field_permissions' => array( + 'type' => 0, + ), + 'indexes' => array( + 'value' => array( + 0 => 'value', + ), + ), + 'locked' => 0, + 'module' => 'list', + 'settings' => array( + 'allowed_values' => array( + 'g' => 'G', + 'pg' => 'PG', + 'pg_13' => 'PG-13', + 'r' => 'R', + ), + 'allowed_values_function' => '', + 'profile2_private' => FALSE, + ), + 'translatable' => 0, + 'type' => 'list_text', + ); + + // Exported field_base: 'field_release_year'. + $field_bases['field_release_year'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_release_year', + 'field_permissions' => array( + 'type' => 0, + ), + 'indexes' => array(), + 'locked' => 0, + 'module' => 'date', + 'settings' => array( + 'cache_count' => 4, + 'cache_enabled' => 0, + 'granularity' => array( + 'day' => 0, + 'hour' => 0, + 'minute' => 0, + 'month' => 0, + 'second' => 0, + 'year' => 'year', + ), + 'profile2_private' => FALSE, + 'timezone_db' => '', + 'todate' => '', + 'tz_handling' => 'none', + ), + 'translatable' => 0, + 'type' => 'datetime', + ); + + return $field_bases; +} diff --git a/docroot/sites/all/modules/features/moview_review_content_type/moview_review_content_type.features.field_instance.inc b/docroot/sites/all/modules/features/moview_review_content_type/moview_review_content_type.features.field_instance.inc new file mode 100644 index 00000000..8e944df0 --- /dev/null +++ b/docroot/sites/all/modules/features/moview_review_content_type/moview_review_content_type.features.field_instance.inc @@ -0,0 +1,635 @@ + 'movie_review', + 'default_value' => NULL, + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'hidden', + 'module' => 'text', + 'settings' => array(), + 'type' => 'text_default', + 'weight' => 0, + ), + 'teaser' => array( + 'label' => 'hidden', + 'module' => 'text', + 'settings' => array( + 'trim_length' => 600, + ), + 'type' => 'text_summary_or_trimmed', + 'weight' => 0, + ), + ), + 'entity_type' => 'node', + 'field_name' => 'body', + 'label' => 'Body', + 'required' => FALSE, + 'settings' => array( + 'display_summary' => TRUE, + 'text_processing' => 1, + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'module' => 'text', + 'settings' => array( + 'rows' => 20, + 'summary_rows' => 5, + ), + 'type' => 'text_textarea_with_summary', + 'weight' => 11, + ), + ); + + // Exported field_instance: 'node-movie_review-field_actors'. + $field_instances['node-movie_review-field_actors'] = array( + 'bundle' => 'movie_review', + 'default_value' => NULL, + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'text', + 'settings' => array(), + 'type' => 'text_default', + 'weight' => 4, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'display_label' => '', + 'entity_type' => 'node', + 'field_name' => 'field_actors', + 'label' => 'Actors', + 'placeholder' => '', + 'required' => 0, + 'settings' => array( + 'better_formats' => array( + 'allowed_formats' => array( + 'filtered_html' => 'filtered_html', + 'filtered_html_with_tables' => 'filtered_html_with_tables', + 'full_html' => 'full_html', + 'php_code' => 'php_code', + 'plain_text' => 'plain_text', + 'simple_html' => 'simple_html', + ), + 'allowed_formats_toggle' => 0, + 'default_order_toggle' => 0, + 'default_order_wrapper' => array( + 'formats' => array( + 'filtered_html' => array( + 'weight' => -9, + ), + 'filtered_html_with_tables' => array( + 'weight' => -7, + ), + 'full_html' => array( + 'weight' => -6, + ), + 'php_code' => array( + 'weight' => -4, + ), + 'plain_text' => array( + 'weight' => -5, + ), + 'simple_html' => array( + 'weight' => -10, + ), + ), + ), + ), + 'linkit' => array( + 'enable' => 0, + 'insert_plugin' => '', + ), + 'text_processing' => 0, + 'user_register_form' => FALSE, + ), + 'use_title_as_placeholder' => 0, + 'widget' => array( + 'active' => 1, + 'module' => 'text', + 'settings' => array( + 'size' => 60, + ), + 'type' => 'text_textfield', + 'weight' => 5, + ), + 'workbench_access_field' => 0, + ); + + // Exported field_instance: + // 'node-movie_review-field_catalog_link_movie_review'. + $field_instances['node-movie_review-field_catalog_link_movie_review'] = array( + 'bundle' => 'movie_review', + 'default_value' => NULL, + 'deleted' => 0, + 'description' => 'Please enter a link to the book in the OPL catalog so that other readers can find it easily.', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'link', + 'settings' => array(), + 'type' => 'link_default', + 'weight' => 9, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'display_label' => '', + 'entity_type' => 'node', + 'field_name' => 'field_catalog_link_movie_review', + 'label' => 'Catalog Link', + 'required' => 0, + 'settings' => array( + 'absolute_url' => 1, + 'attributes' => array( + 'class' => '', + 'configurable_class' => 0, + 'configurable_title' => 0, + 'rel' => '', + 'target' => 'default', + 'title' => '', + ), + 'display' => array( + 'url_cutoff' => 80, + ), + 'enable_tokens' => 1, + 'linkit' => array( + 'enable' => 0, + 'insert_plugin' => '', + ), + 'rel_remove' => 'default', + 'title' => 'none', + 'title_label_use_field_label' => 0, + 'title_maxlength' => 128, + 'title_value' => '', + 'url' => 0, + 'user_register_form' => FALSE, + 'validate_url' => 1, + ), + 'widget' => array( + 'active' => 0, + 'module' => 'link', + 'settings' => array(), + 'type' => 'link_field', + 'weight' => 10, + ), + 'workbench_access_field' => 0, + ); + + // Exported field_instance: 'node-movie_review-field_director'. + $field_instances['node-movie_review-field_director'] = array( + 'bundle' => 'movie_review', + 'default_value' => NULL, + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'text', + 'settings' => array(), + 'type' => 'text_default', + 'weight' => 5, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'display_label' => '', + 'entity_type' => 'node', + 'field_name' => 'field_director', + 'label' => 'Director', + 'placeholder' => '', + 'required' => 0, + 'settings' => array( + 'better_formats' => array( + 'allowed_formats' => array( + 'filtered_html' => 'filtered_html', + 'filtered_html_with_tables' => 'filtered_html_with_tables', + 'full_html' => 'full_html', + 'php_code' => 'php_code', + 'plain_text' => 'plain_text', + 'simple_html' => 'simple_html', + ), + 'allowed_formats_toggle' => 0, + 'default_order_toggle' => 0, + 'default_order_wrapper' => array( + 'formats' => array( + 'filtered_html' => array( + 'weight' => -9, + ), + 'filtered_html_with_tables' => array( + 'weight' => -7, + ), + 'full_html' => array( + 'weight' => -6, + ), + 'php_code' => array( + 'weight' => -4, + ), + 'plain_text' => array( + 'weight' => -5, + ), + 'simple_html' => array( + 'weight' => -10, + ), + ), + ), + ), + 'linkit' => array( + 'enable' => 0, + 'insert_plugin' => '', + ), + 'text_processing' => 0, + 'user_register_form' => FALSE, + ), + 'use_title_as_placeholder' => 0, + 'widget' => array( + 'active' => 1, + 'module' => 'text', + 'settings' => array( + 'size' => 60, + ), + 'type' => 'text_textfield', + 'weight' => 6, + ), + 'workbench_access_field' => 0, + ); + + // Exported field_instance: 'node-movie_review-field_genre'. + $field_instances['node-movie_review-field_genre'] = array( + 'bundle' => 'movie_review', + 'default_value' => NULL, + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'list', + 'settings' => array(), + 'type' => 'list_default', + 'weight' => 2, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'display_label' => '', + 'entity_type' => 'node', + 'field_name' => 'field_genre', + 'label' => 'Genre', + 'required' => 0, + 'settings' => array( + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'options', + 'settings' => array(), + 'type' => 'options_buttons', + 'weight' => 3, + ), + 'workbench_access_field' => 0, + ); + + // Exported field_instance: 'node-movie_review-field_genre_other_option'. + $field_instances['node-movie_review-field_genre_other_option'] = array( + 'bundle' => 'movie_review', + 'default_value' => NULL, + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'text', + 'settings' => array(), + 'type' => 'text_default', + 'weight' => 3, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'display_label' => '', + 'entity_type' => 'node', + 'field_name' => 'field_genre_other_option', + 'label' => 'Genre other option', + 'placeholder' => 'Please Enter Genre', + 'required' => 0, + 'settings' => array( + 'better_formats' => array( + 'allowed_formats' => array( + 'filtered_html' => 'filtered_html', + 'filtered_html_with_tables' => 'filtered_html_with_tables', + 'full_html' => 'full_html', + 'php_code' => 'php_code', + 'plain_text' => 'plain_text', + 'simple_html' => 'simple_html', + ), + 'allowed_formats_toggle' => 0, + 'default_order_toggle' => 0, + 'default_order_wrapper' => array( + 'formats' => array( + 'filtered_html' => array( + 'weight' => -9, + ), + 'filtered_html_with_tables' => array( + 'weight' => -7, + ), + 'full_html' => array( + 'weight' => -6, + ), + 'php_code' => array( + 'weight' => -4, + ), + 'plain_text' => array( + 'weight' => -5, + ), + 'simple_html' => array( + 'weight' => -10, + ), + ), + ), + ), + 'linkit' => array( + 'enable' => 0, + 'insert_plugin' => '', + ), + 'text_processing' => 0, + 'user_register_form' => FALSE, + ), + 'use_title_as_placeholder' => 0, + 'widget' => array( + 'active' => 1, + 'module' => 'text', + 'settings' => array( + 'size' => 60, + ), + 'type' => 'text_textfield', + 'weight' => 4, + ), + 'workbench_access_field' => 0, + ); + + // Exported field_instance: 'node-movie_review-field_language'. + $field_instances['node-movie_review-field_language'] = array( + 'bundle' => 'movie_review', + 'default_value' => NULL, + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'list', + 'settings' => array(), + 'type' => 'list_default', + 'weight' => 6, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'display_label' => '', + 'entity_type' => 'node', + 'field_name' => 'field_language', + 'label' => 'Language', + 'required' => 0, + 'settings' => array( + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'options', + 'settings' => array(), + 'type' => 'options_buttons', + 'weight' => 7, + ), + 'workbench_access_field' => 0, + ); + + // Exported field_instance: 'node-movie_review-field_movie_review_sub_titile'. + $field_instances['node-movie_review-field_movie_review_sub_titile'] = array( + 'bundle' => 'movie_review', + 'default_value' => NULL, + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'list', + 'settings' => array(), + 'type' => 'list_default', + 'weight' => 1, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'display_label' => '', + 'entity_type' => 'node', + 'field_name' => 'field_movie_review_sub_titile', + 'label' => 'Movie Review sub titile', + 'required' => 0, + 'settings' => array( + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'options', + 'settings' => array(), + 'type' => 'options_buttons', + 'weight' => 1, + ), + 'workbench_access_field' => 0, + ); + + // Exported field_instance: 'node-movie_review-field_please_select_one'. + $field_instances['node-movie_review-field_please_select_one'] = array( + 'bundle' => 'movie_review', + 'default_value' => NULL, + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'list', + 'settings' => array(), + 'type' => 'list_default', + 'weight' => 10, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'display_label' => '', + 'entity_type' => 'node', + 'field_name' => 'field_please_select_one', + 'label' => 'Please select one', + 'required' => 0, + 'settings' => array( + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'options', + 'settings' => array(), + 'type' => 'options_buttons', + 'weight' => 12, + ), + 'workbench_access_field' => 0, + ); + + // Exported field_instance: 'node-movie_review-field_rating'. + $field_instances['node-movie_review-field_rating'] = array( + 'bundle' => 'movie_review', + 'default_value' => NULL, + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'list', + 'settings' => array(), + 'type' => 'list_default', + 'weight' => 8, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'display_label' => '', + 'entity_type' => 'node', + 'field_name' => 'field_rating', + 'label' => 'Rating', + 'required' => 0, + 'settings' => array( + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'options', + 'settings' => array(), + 'type' => 'options_buttons', + 'weight' => 9, + ), + 'workbench_access_field' => 0, + ); + + // Exported field_instance: 'node-movie_review-field_release_year'. + $field_instances['node-movie_review-field_release_year'] = array( + 'bundle' => 'movie_review', + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'date', + 'settings' => array( + 'format_type' => 'long', + 'fromto' => 'both', + 'multiple_from' => '', + 'multiple_number' => '', + 'multiple_to' => '', + 'show_remaining_days' => FALSE, + ), + 'type' => 'date_default', + 'weight' => 7, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'display_label' => '', + 'entity_type' => 'node', + 'field_name' => 'field_release_year', + 'label' => 'Release Year', + 'required' => 0, + 'settings' => array( + 'default_value' => 'now', + 'default_value2' => 'same', + 'default_value_code' => '', + 'default_value_code2' => '', + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'date', + 'settings' => array( + 'increment' => 15, + 'input_format' => 'M j Y - g:i:sa', + 'input_format_custom' => '', + 'label_position' => 'above', + 'no_fieldset' => 0, + 'text_parts' => array(), + 'year_range' => '1000:+3', + ), + 'type' => 'date_select', + 'weight' => 8, + ), + 'workbench_access_field' => 0, + ); + + // Translatables + // Included for use with string extractors like potx. + t('Actors'); + t('Body'); + t('Catalog Link'); + t('Director'); + t('Genre'); + t('Genre other option'); + t('Language'); + t('Movie Review sub titile'); + t('Please enter a link to the book in the OPL catalog so that other readers can find it easily.'); + t('Please select one'); + t('Rating'); + t('Release Year'); + + return $field_instances; +} diff --git a/docroot/sites/all/modules/features/moview_review_content_type/moview_review_content_type.features.inc b/docroot/sites/all/modules/features/moview_review_content_type/moview_review_content_type.features.inc new file mode 100644 index 00000000..06c60622 --- /dev/null +++ b/docroot/sites/all/modules/features/moview_review_content_type/moview_review_content_type.features.inc @@ -0,0 +1,32 @@ + "1"); + } +} + +/** + * Implements hook_node_info(). + */ +function moview_review_content_type_node_info() { + $items = array( + 'movie_review' => array( + 'name' => t('Movie Review'), + 'base' => 'node_content', + 'description' => t('This content type is used for Movie Review.'), + 'has_title' => '1', + 'title_label' => t('Title'), + 'help' => '', + ), + ); + drupal_alter('node_info', $items); + return $items; +} diff --git a/docroot/sites/all/modules/features/moview_review_content_type/moview_review_content_type.info b/docroot/sites/all/modules/features/moview_review_content_type/moview_review_content_type.info new file mode 100644 index 00000000..df970574 --- /dev/null +++ b/docroot/sites/all/modules/features/moview_review_content_type/moview_review_content_type.info @@ -0,0 +1,46 @@ +name = Moview Review content type +description = Moview review content type form +core = 7.x +package = Features +version = 7.x-1.0 +dependencies[] = ctools +dependencies[] = date +dependencies[] = features +dependencies[] = link +dependencies[] = list +dependencies[] = node +dependencies[] = options +dependencies[] = program_and_activities_pages +dependencies[] = strongarm +dependencies[] = text +features[ctools][] = strongarm:strongarm:1 +features[features_api][] = api:2 +features[field_base][] = field_actors +features[field_base][] = field_catalog_link_movie_review +features[field_base][] = field_director +features[field_base][] = field_genre +features[field_base][] = field_genre_other_option +features[field_base][] = field_language +features[field_base][] = field_movie_review_sub_titile +features[field_base][] = field_please_select_one +features[field_base][] = field_rating +features[field_base][] = field_release_year +features[field_instance][] = node-movie_review-body +features[field_instance][] = node-movie_review-field_actors +features[field_instance][] = node-movie_review-field_catalog_link_movie_review +features[field_instance][] = node-movie_review-field_director +features[field_instance][] = node-movie_review-field_genre +features[field_instance][] = node-movie_review-field_genre_other_option +features[field_instance][] = node-movie_review-field_language +features[field_instance][] = node-movie_review-field_movie_review_sub_titile +features[field_instance][] = node-movie_review-field_please_select_one +features[field_instance][] = node-movie_review-field_rating +features[field_instance][] = node-movie_review-field_release_year +features[node][] = movie_review +features[variable][] = field_bundle_settings_node__movie_review +features[variable][] = menu_options_movie_review +features[variable][] = menu_parent_movie_review +features[variable][] = node_options_movie_review +features[variable][] = node_preview_movie_review +features[variable][] = node_submitted_movie_review +project path = sites/all/modules/features diff --git a/docroot/sites/all/modules/features/moview_review_content_type/moview_review_content_type.module b/docroot/sites/all/modules/features/moview_review_content_type/moview_review_content_type.module new file mode 100644 index 00000000..e25a77e3 --- /dev/null +++ b/docroot/sites/all/modules/features/moview_review_content_type/moview_review_content_type.module @@ -0,0 +1,7 @@ +disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */ + $strongarm->api_version = 1; + $strongarm->name = 'field_bundle_settings_node__movie_review'; + $strongarm->value = array( + 'view_modes' => array(), + 'extra_fields' => array( + 'form' => array( + 'title' => array( + 'weight' => '2', + ), + 'path' => array( + 'weight' => '0', + ), + ), + 'display' => array(), + ), + ); + $export['field_bundle_settings_node__movie_review'] = $strongarm; + + $strongarm = new stdClass(); + $strongarm->disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */ + $strongarm->api_version = 1; + $strongarm->name = 'menu_options_movie_review'; + $strongarm->value = array( + 0 => 'main-menu', + ); + $export['menu_options_movie_review'] = $strongarm; + + $strongarm = new stdClass(); + $strongarm->disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */ + $strongarm->api_version = 1; + $strongarm->name = 'menu_parent_movie_review'; + $strongarm->value = 'main-menu:0'; + $export['menu_parent_movie_review'] = $strongarm; + + $strongarm = new stdClass(); + $strongarm->disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */ + $strongarm->api_version = 1; + $strongarm->name = 'node_options_movie_review'; + $strongarm->value = array(); + $export['node_options_movie_review'] = $strongarm; + + $strongarm = new stdClass(); + $strongarm->disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */ + $strongarm->api_version = 1; + $strongarm->name = 'node_preview_movie_review'; + $strongarm->value = '1'; + $export['node_preview_movie_review'] = $strongarm; + + $strongarm = new stdClass(); + $strongarm->disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */ + $strongarm->api_version = 1; + $strongarm->name = 'node_submitted_movie_review'; + $strongarm->value = 1; + $export['node_submitted_movie_review'] = $strongarm; + + return $export; +} diff --git a/docroot/sites/all/modules/features/moview_review_view_listing/moview_review_view_listing.features.inc b/docroot/sites/all/modules/features/moview_review_view_listing/moview_review_view_listing.features.inc new file mode 100755 index 00000000..b6952b1e --- /dev/null +++ b/docroot/sites/all/modules/features/moview_review_view_listing/moview_review_view_listing.features.inc @@ -0,0 +1,12 @@ + "3.0"); +} diff --git a/docroot/sites/all/modules/features/moview_review_view_listing/moview_review_view_listing.info b/docroot/sites/all/modules/features/moview_review_view_listing/moview_review_view_listing.info new file mode 100755 index 00000000..305f68e1 --- /dev/null +++ b/docroot/sites/all/modules/features/moview_review_view_listing/moview_review_view_listing.info @@ -0,0 +1,11 @@ +name = Moview Review View Listing +description = View for listing of movie review content +core = 7.x +package = Features +version = 7.x-1.1 +dependencies[] = ctools +dependencies[] = views +features[ctools][] = views:views_default:3.0 +features[features_api][] = api:2 +features[views_view][] = movie_review +project path = sites/all/modules/features diff --git a/docroot/sites/all/modules/features/moview_review_view_listing/moview_review_view_listing.module b/docroot/sites/all/modules/features/moview_review_view_listing/moview_review_view_listing.module new file mode 100755 index 00000000..06f3066b --- /dev/null +++ b/docroot/sites/all/modules/features/moview_review_view_listing/moview_review_view_listing.module @@ -0,0 +1,7 @@ +name = 'movie_review'; + $view->description = ''; + $view->tag = 'default'; + $view->base_table = 'node'; + $view->human_name = 'Movie Review'; + $view->core = 7; + $view->api_version = '3.0'; + $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */ + + /* Display: Master */ + $handler = $view->new_display('default', 'Master', 'default'); + $handler->display->display_options['title'] = 'Movie Review'; + $handler->display->display_options['use_more_always'] = FALSE; + $handler->display->display_options['access']['type'] = 'perm'; + $handler->display->display_options['cache']['type'] = 'none'; + $handler->display->display_options['query']['type'] = 'views_query'; + $handler->display->display_options['exposed_form']['type'] = 'basic'; + $handler->display->display_options['exposed_form']['options']['submit_button'] = 'Search'; + $handler->display->display_options['exposed_form']['options']['sort_asc_label'] = 'Ascending'; + $handler->display->display_options['exposed_form']['options']['sort_desc_label'] = 'Descending'; + $handler->display->display_options['pager']['type'] = 'full'; + $handler->display->display_options['pager']['options']['items_per_page'] = '10'; + $handler->display->display_options['style_plugin'] = 'default'; + $handler->display->display_options['row_plugin'] = 'node'; + /* Field: Content: Title */ + $handler->display->display_options['fields']['title']['id'] = 'title'; + $handler->display->display_options['fields']['title']['table'] = 'node'; + $handler->display->display_options['fields']['title']['field'] = 'title'; + $handler->display->display_options['fields']['title']['label'] = ''; + $handler->display->display_options['fields']['title']['alter']['word_boundary'] = FALSE; + $handler->display->display_options['fields']['title']['alter']['ellipsis'] = FALSE; + /* Sort criterion: Content: Post date */ + $handler->display->display_options['sorts']['created']['id'] = 'created'; + $handler->display->display_options['sorts']['created']['table'] = 'node'; + $handler->display->display_options['sorts']['created']['field'] = 'created'; + $handler->display->display_options['sorts']['created']['order'] = 'DESC'; + $handler->display->display_options['sorts']['created']['exposed'] = TRUE; + $handler->display->display_options['sorts']['created']['expose']['label'] = 'Post date'; + /* Filter criterion: Content: Published */ + $handler->display->display_options['filters']['status']['id'] = 'status'; + $handler->display->display_options['filters']['status']['table'] = 'node'; + $handler->display->display_options['filters']['status']['field'] = 'status'; + $handler->display->display_options['filters']['status']['value'] = 1; + $handler->display->display_options['filters']['status']['group'] = 1; + $handler->display->display_options['filters']['status']['expose']['operator'] = FALSE; + /* Filter criterion: Content: Type */ + $handler->display->display_options['filters']['type']['id'] = 'type'; + $handler->display->display_options['filters']['type']['table'] = 'node'; + $handler->display->display_options['filters']['type']['field'] = 'type'; + $handler->display->display_options['filters']['type']['value'] = array( + 'movie_review' => 'movie_review', + ); + + /* Display: Page */ + $handler = $view->new_display('page', 'Page', 'page'); + $handler->display->display_options['defaults']['pager'] = FALSE; + $handler->display->display_options['pager']['type'] = 'full'; + $handler->display->display_options['pager']['options']['items_per_page'] = '10'; + $handler->display->display_options['pager']['options']['offset'] = '0'; + $handler->display->display_options['pager']['options']['id'] = '0'; + $handler->display->display_options['pager']['options']['quantity'] = '9'; + $handler->display->display_options['pager']['options']['expose']['items_per_page'] = TRUE; + $handler->display->display_options['pager']['options']['expose']['items_per_page_options'] = '10, 20, 30'; + $handler->display->display_options['defaults']['style_plugin'] = FALSE; + $handler->display->display_options['style_plugin'] = 'default'; + $handler->display->display_options['defaults']['style_options'] = FALSE; + $handler->display->display_options['defaults']['row_plugin'] = FALSE; + $handler->display->display_options['row_plugin'] = 'fields'; + $handler->display->display_options['row_options']['inline'] = array( + 'counter' => 'counter', + 'title' => 'title', + 'count' => 'count', + ); + $handler->display->display_options['defaults']['row_options'] = FALSE; + $handler->display->display_options['defaults']['header'] = FALSE; + /* Header: Global: Text area */ + $handler->display->display_options['header']['area']['id'] = 'area'; + $handler->display->display_options['header']['area']['table'] = 'views'; + $handler->display->display_options['header']['area']['field'] = 'area'; + $handler->display->display_options['header']['area']['content'] = '

        Reviews & Booklists

        + +

        Movie Reviews

        '; + $handler->display->display_options['header']['area']['format'] = 'full_html'; + $handler->display->display_options['defaults']['relationships'] = FALSE; + /* Relationship: Content: Author */ + $handler->display->display_options['relationships']['uid']['id'] = 'uid'; + $handler->display->display_options['relationships']['uid']['table'] = 'node'; + $handler->display->display_options['relationships']['uid']['field'] = 'uid'; + /* Relationship: Flags: like counter */ + $handler->display->display_options['relationships']['flag_count_rel']['id'] = 'flag_count_rel'; + $handler->display->display_options['relationships']['flag_count_rel']['table'] = 'node'; + $handler->display->display_options['relationships']['flag_count_rel']['field'] = 'flag_count_rel'; + $handler->display->display_options['relationships']['flag_count_rel']['required'] = 0; + $handler->display->display_options['relationships']['flag_count_rel']['flag'] = 'like'; + /* Relationship: Flags: like */ + $handler->display->display_options['relationships']['flag_content_rel']['id'] = 'flag_content_rel'; + $handler->display->display_options['relationships']['flag_content_rel']['table'] = 'node'; + $handler->display->display_options['relationships']['flag_content_rel']['field'] = 'flag_content_rel'; + $handler->display->display_options['relationships']['flag_content_rel']['required'] = 0; + $handler->display->display_options['relationships']['flag_content_rel']['flag'] = 'like'; + $handler->display->display_options['relationships']['flag_content_rel']['user_scope'] = 'any'; + /* Relationship: User: Profile */ + $handler->display->display_options['relationships']['profile']['id'] = 'profile'; + $handler->display->display_options['relationships']['profile']['table'] = 'users'; + $handler->display->display_options['relationships']['profile']['field'] = 'profile'; + $handler->display->display_options['relationships']['profile']['relationship'] = 'uid'; + $handler->display->display_options['relationships']['profile']['bundle_types'] = array( + 'main' => 'main', + ); + $handler->display->display_options['defaults']['fields'] = FALSE; + /* Field: Global: View result counter */ + $handler->display->display_options['fields']['counter']['id'] = 'counter'; + $handler->display->display_options['fields']['counter']['table'] = 'views'; + $handler->display->display_options['fields']['counter']['field'] = 'counter'; + $handler->display->display_options['fields']['counter']['label'] = ''; + $handler->display->display_options['fields']['counter']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['counter']['counter_start'] = '1'; + $handler->display->display_options['fields']['counter']['reverse'] = 0; + /* Field: Content: Catalog Link */ + $handler->display->display_options['fields']['field_catalog_link_movie_review_1']['id'] = 'field_catalog_link_movie_review_1'; + $handler->display->display_options['fields']['field_catalog_link_movie_review_1']['table'] = 'field_data_field_catalog_link_movie_review'; + $handler->display->display_options['fields']['field_catalog_link_movie_review_1']['field'] = 'field_catalog_link_movie_review'; + $handler->display->display_options['fields']['field_catalog_link_movie_review_1']['exclude'] = TRUE; + $handler->display->display_options['fields']['field_catalog_link_movie_review_1']['click_sort_column'] = 'url'; + /* Field: Content: Title */ + $handler->display->display_options['fields']['title']['id'] = 'title'; + $handler->display->display_options['fields']['title']['table'] = 'node'; + $handler->display->display_options['fields']['title']['field'] = 'title'; + $handler->display->display_options['fields']['title']['label'] = ''; + $handler->display->display_options['fields']['title']['alter']['path'] = '[field_catalog_link_movie_review_1]'; + $handler->display->display_options['fields']['title']['alter']['target'] = '_blank'; + $handler->display->display_options['fields']['title']['alter']['word_boundary'] = FALSE; + $handler->display->display_options['fields']['title']['alter']['ellipsis'] = FALSE; + $handler->display->display_options['fields']['title']['element_label_colon'] = FALSE; + /* Field: User: Uid */ + $handler->display->display_options['fields']['uid']['id'] = 'uid'; + $handler->display->display_options['fields']['uid']['table'] = 'users'; + $handler->display->display_options['fields']['uid']['field'] = 'uid'; + $handler->display->display_options['fields']['uid']['relationship'] = 'uid'; + $handler->display->display_options['fields']['uid']['exclude'] = TRUE; + /* Field: Flags: Flag counter */ + $handler->display->display_options['fields']['count']['id'] = 'count'; + $handler->display->display_options['fields']['count']['table'] = 'flag_counts'; + $handler->display->display_options['fields']['count']['field'] = 'count'; + $handler->display->display_options['fields']['count']['relationship'] = 'flag_count_rel'; + $handler->display->display_options['fields']['count']['label'] = 'Likes'; + /* Field: Content: Genre */ + $handler->display->display_options['fields']['field_genre']['id'] = 'field_genre'; + $handler->display->display_options['fields']['field_genre']['table'] = 'field_data_field_genre'; + $handler->display->display_options['fields']['field_genre']['field'] = 'field_genre'; + /* Field: Content: Actors */ + $handler->display->display_options['fields']['field_actors']['id'] = 'field_actors'; + $handler->display->display_options['fields']['field_actors']['table'] = 'field_data_field_actors'; + $handler->display->display_options['fields']['field_actors']['field'] = 'field_actors'; + $handler->display->display_options['fields']['field_actors']['label'] = ''; + $handler->display->display_options['fields']['field_actors']['alter']['alter_text'] = TRUE; + $handler->display->display_options['fields']['field_actors']['alter']['text'] = 'Actors: [field_actors]'; + $handler->display->display_options['fields']['field_actors']['element_label_colon'] = FALSE; + /* Field: Content: Director */ + $handler->display->display_options['fields']['field_director']['id'] = 'field_director'; + $handler->display->display_options['fields']['field_director']['table'] = 'field_data_field_director'; + $handler->display->display_options['fields']['field_director']['field'] = 'field_director'; + $handler->display->display_options['fields']['field_director']['label'] = ''; + $handler->display->display_options['fields']['field_director']['alter']['alter_text'] = TRUE; + $handler->display->display_options['fields']['field_director']['alter']['text'] = 'Director: [field_director]'; + $handler->display->display_options['fields']['field_director']['element_label_colon'] = FALSE; + /* Field: Content: Language */ + $handler->display->display_options['fields']['field_language']['id'] = 'field_language'; + $handler->display->display_options['fields']['field_language']['table'] = 'field_data_field_language'; + $handler->display->display_options['fields']['field_language']['field'] = 'field_language'; + $handler->display->display_options['fields']['field_language']['label'] = ''; + $handler->display->display_options['fields']['field_language']['alter']['alter_text'] = TRUE; + $handler->display->display_options['fields']['field_language']['alter']['text'] = 'Language: [field_language]'; + $handler->display->display_options['fields']['field_language']['element_label_colon'] = FALSE; + /* Field: Content: Release Year */ + $handler->display->display_options['fields']['field_release_year']['id'] = 'field_release_year'; + $handler->display->display_options['fields']['field_release_year']['table'] = 'field_data_field_release_year'; + $handler->display->display_options['fields']['field_release_year']['field'] = 'field_release_year'; + $handler->display->display_options['fields']['field_release_year']['label'] = ''; + $handler->display->display_options['fields']['field_release_year']['alter']['alter_text'] = TRUE; + $handler->display->display_options['fields']['field_release_year']['alter']['text'] = 'Release Year: [field_release_year]'; + $handler->display->display_options['fields']['field_release_year']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['field_release_year']['settings'] = array( + 'format_type' => 'short', + 'fromto' => 'both', + 'multiple_number' => '', + 'multiple_from' => '', + 'multiple_to' => '', + 'show_remaining_days' => 0, + ); + /* Field: Content: Rating */ + $handler->display->display_options['fields']['field_rating']['id'] = 'field_rating'; + $handler->display->display_options['fields']['field_rating']['table'] = 'field_data_field_rating'; + $handler->display->display_options['fields']['field_rating']['field'] = 'field_rating'; + $handler->display->display_options['fields']['field_rating']['label'] = ''; + $handler->display->display_options['fields']['field_rating']['alter']['alter_text'] = TRUE; + $handler->display->display_options['fields']['field_rating']['alter']['text'] = 'Rating: [field_rating]'; + $handler->display->display_options['fields']['field_rating']['element_label_colon'] = FALSE; + /* Field: Content: Catalog Link */ + $handler->display->display_options['fields']['field_catalog_link_movie_review']['id'] = 'field_catalog_link_movie_review'; + $handler->display->display_options['fields']['field_catalog_link_movie_review']['table'] = 'field_data_field_catalog_link_movie_review'; + $handler->display->display_options['fields']['field_catalog_link_movie_review']['field'] = 'field_catalog_link_movie_review'; + $handler->display->display_options['fields']['field_catalog_link_movie_review']['label'] = ''; + $handler->display->display_options['fields']['field_catalog_link_movie_review']['alter']['alter_text'] = TRUE; + $handler->display->display_options['fields']['field_catalog_link_movie_review']['alter']['text'] = 'Catalog Link: [field_catalog_link_movie_review]'; + $handler->display->display_options['fields']['field_catalog_link_movie_review']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['field_catalog_link_movie_review']['click_sort_column'] = 'url'; + $handler->display->display_options['fields']['field_catalog_link_movie_review']['type'] = 'link_url'; + /* Field: Content: Please select one */ + $handler->display->display_options['fields']['field_please_select_one']['id'] = 'field_please_select_one'; + $handler->display->display_options['fields']['field_please_select_one']['table'] = 'field_data_field_please_select_one'; + $handler->display->display_options['fields']['field_please_select_one']['field'] = 'field_please_select_one'; + $handler->display->display_options['fields']['field_please_select_one']['label'] = ''; + $handler->display->display_options['fields']['field_please_select_one']['exclude'] = TRUE; + $handler->display->display_options['fields']['field_please_select_one']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['field_please_select_one']['type'] = 'list_key'; + /* Field: Global: PHP */ + $handler->display->display_options['fields']['php']['id'] = 'php'; + $handler->display->display_options['fields']['php']['table'] = 'views'; + $handler->display->display_options['fields']['php']['field'] = 'php'; + $handler->display->display_options['fields']['php']['label'] = ''; + $handler->display->display_options['fields']['php']['exclude'] = TRUE; + $handler->display->display_options['fields']['php']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['php']['use_php_setup'] = 0; + $handler->display->display_options['fields']['php']['php_output'] = '_field_data[\'nid\'][\'entity\']; +$privacy_key = $privacy->field_please_select_one[LANGUAGE_NONE][0][\'value\']; +if($privacy_key == \'public\'){ +print \'Reviewed by \'; +} + +?>'; + $handler->display->display_options['fields']['php']['use_php_click_sortable'] = '0'; + $handler->display->display_options['fields']['php']['php_click_sortable'] = ''; + /* Field: Profile: Avatar image */ + $handler->display->display_options['fields']['field_user_avatar']['id'] = 'field_user_avatar'; + $handler->display->display_options['fields']['field_user_avatar']['table'] = 'field_data_field_user_avatar'; + $handler->display->display_options['fields']['field_user_avatar']['field'] = 'field_user_avatar'; + $handler->display->display_options['fields']['field_user_avatar']['relationship'] = 'profile'; + $handler->display->display_options['fields']['field_user_avatar']['label'] = ''; + $handler->display->display_options['fields']['field_user_avatar']['exclude'] = TRUE; + $handler->display->display_options['fields']['field_user_avatar']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['field_user_avatar']['type'] = 'entityreference_entity_view'; + $handler->display->display_options['fields']['field_user_avatar']['settings'] = array( + 'view_mode' => 'teaser', + 'links' => 1, + ); + /* Field: Global: PHP */ + $handler->display->display_options['fields']['php_1']['id'] = 'php_1'; + $handler->display->display_options['fields']['php_1']['table'] = 'views'; + $handler->display->display_options['fields']['php_1']['field'] = 'php'; + $handler->display->display_options['fields']['php_1']['label'] = ''; + $handler->display->display_options['fields']['php_1']['exclude'] = TRUE; + $handler->display->display_options['fields']['php_1']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['php_1']['use_php_setup'] = 0; + $handler->display->display_options['fields']['php_1']['php_output'] = 'field_user_avatar; + +$query = db_select(\'field_data_field_user_avatar\',\'avatar\') +->fields(\'avatar\',array(\'field_user_avatar_target_id\')) +->condition(\'entity_id\',$img_id) +->execute() +->fetchAssoc(); + +$image_id = $query[\'field_user_avatar_target_id\']; + +$query = db_select(\'field_data_field_avatar_image\', \'t\'); +$query->join(\'file_managed\', \'n\', \'n.fid = t.field_avatar_image_fid\'); +$result = $query + ->fields(\'n\', array(\'uri\')) + ->condition(\'t.entity_id\', $image_id) + ->execute(); + +$img_uri = $result->fetchObject(); +$img_uri = $img_uri->uri; +$style = \'avatar_style\'; +$img_path = image_style_url($style, $img_uri); + +$img = ""; + +$privacy = $data->_field_data[\'nid\'][\'entity\']; +$privacy_key = $privacy->field_please_select_one[LANGUAGE_NONE][0][\'value\']; + +if(isset($img_uri)){ + if($privacy_key == \'public\'){ + print $img; + } +} +?>'; + $handler->display->display_options['fields']['php_1']['use_php_click_sortable'] = '0'; + $handler->display->display_options['fields']['php_1']['php_click_sortable'] = ''; + /* Field: Global: PHP */ + $handler->display->display_options['fields']['php_2']['id'] = 'php_2'; + $handler->display->display_options['fields']['php_2']['table'] = 'views'; + $handler->display->display_options['fields']['php_2']['field'] = 'php'; + $handler->display->display_options['fields']['php_2']['label'] = ''; + $handler->display->display_options['fields']['php_2']['exclude'] = TRUE; + $handler->display->display_options['fields']['php_2']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['php_2']['use_php_setup'] = 0; + $handler->display->display_options['fields']['php_2']['php_output'] = '_field_data[\'nid\'][\'entity\']; +$privacy_key = $privacy->field_please_select_one[LANGUAGE_NONE][0][\'value\']; +if($privacy_key == \'public\'){ +echo "uid>".$row->name.""; +} + +?>'; + $handler->display->display_options['fields']['php_2']['use_php_click_sortable'] = '0'; + $handler->display->display_options['fields']['php_2']['php_click_sortable'] = ''; + /* Field: User: Name */ + $handler->display->display_options['fields']['name']['id'] = 'name'; + $handler->display->display_options['fields']['name']['table'] = 'users'; + $handler->display->display_options['fields']['name']['field'] = 'name'; + $handler->display->display_options['fields']['name']['relationship'] = 'uid'; + $handler->display->display_options['fields']['name']['label'] = ''; + $handler->display->display_options['fields']['name']['exclude'] = TRUE; + $handler->display->display_options['fields']['name']['element_label_colon'] = FALSE; + /* Field: Global: Custom text */ + $handler->display->display_options['fields']['nothing']['id'] = 'nothing'; + $handler->display->display_options['fields']['nothing']['table'] = 'views'; + $handler->display->display_options['fields']['nothing']['field'] = 'nothing'; + $handler->display->display_options['fields']['nothing']['label'] = ''; + $handler->display->display_options['fields']['nothing']['alter']['text'] = '
        [php]
        [php_1]
        [php_2]
        '; + $handler->display->display_options['fields']['nothing']['element_label_colon'] = FALSE; + /* Field: Content: Post date */ + $handler->display->display_options['fields']['created']['id'] = 'created'; + $handler->display->display_options['fields']['created']['table'] = 'node'; + $handler->display->display_options['fields']['created']['field'] = 'created'; + $handler->display->display_options['fields']['created']['label'] = ''; + $handler->display->display_options['fields']['created']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['created']['date_format'] = 'custom'; + $handler->display->display_options['fields']['created']['custom_date_format'] = 'M d, Y'; + $handler->display->display_options['fields']['created']['second_date_format'] = 'privatemsg_current_day'; + /* Field: Content: Body */ + $handler->display->display_options['fields']['body']['id'] = 'body'; + $handler->display->display_options['fields']['body']['table'] = 'field_data_body'; + $handler->display->display_options['fields']['body']['field'] = 'body'; + $handler->display->display_options['fields']['body']['label'] = ''; + $handler->display->display_options['fields']['body']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['body']['type'] = 'text_summary_or_trimmed'; + $handler->display->display_options['fields']['body']['settings'] = array( + 'trim_length' => '200', + ); + /* Field: Content: Link */ + $handler->display->display_options['fields']['view_node']['id'] = 'view_node'; + $handler->display->display_options['fields']['view_node']['table'] = 'views_entity_node'; + $handler->display->display_options['fields']['view_node']['field'] = 'view_node'; + $handler->display->display_options['fields']['view_node']['label'] = ''; + $handler->display->display_options['fields']['view_node']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['view_node']['text'] = 'View full review'; + $handler->display->display_options['defaults']['sorts'] = FALSE; + /* Sort criterion: Content: Post date */ + $handler->display->display_options['sorts']['created']['id'] = 'created'; + $handler->display->display_options['sorts']['created']['table'] = 'node'; + $handler->display->display_options['sorts']['created']['field'] = 'created'; + $handler->display->display_options['sorts']['created']['order'] = 'DESC'; + $handler->display->display_options['sorts']['created']['exposed'] = TRUE; + $handler->display->display_options['sorts']['created']['expose']['label'] = 'Post date'; + $handler->display->display_options['sorts']['created']['granularity'] = 'year'; + /* Sort criterion: Flags: Flag counter */ + $handler->display->display_options['sorts']['count']['id'] = 'count'; + $handler->display->display_options['sorts']['count']['table'] = 'flag_counts'; + $handler->display->display_options['sorts']['count']['field'] = 'count'; + $handler->display->display_options['sorts']['count']['relationship'] = 'flag_count_rel'; + $handler->display->display_options['sorts']['count']['order'] = 'DESC'; + $handler->display->display_options['sorts']['count']['exposed'] = TRUE; + $handler->display->display_options['sorts']['count']['expose']['label'] = 'Flag counter'; + $handler->display->display_options['defaults']['filter_groups'] = FALSE; + $handler->display->display_options['defaults']['filters'] = FALSE; + /* Filter criterion: Content: Published */ + $handler->display->display_options['filters']['status']['id'] = 'status'; + $handler->display->display_options['filters']['status']['table'] = 'node'; + $handler->display->display_options['filters']['status']['field'] = 'status'; + $handler->display->display_options['filters']['status']['value'] = 1; + $handler->display->display_options['filters']['status']['group'] = 1; + $handler->display->display_options['filters']['status']['expose']['operator'] = FALSE; + /* Filter criterion: Content: Type */ + $handler->display->display_options['filters']['type']['id'] = 'type'; + $handler->display->display_options['filters']['type']['table'] = 'node'; + $handler->display->display_options['filters']['type']['field'] = 'type'; + $handler->display->display_options['filters']['type']['value'] = array( + 'movie_review' => 'movie_review', + ); + /* Filter criterion: Search: Search Terms */ + $handler->display->display_options['filters']['keys']['id'] = 'keys'; + $handler->display->display_options['filters']['keys']['table'] = 'search_index'; + $handler->display->display_options['filters']['keys']['field'] = 'keys'; + $handler->display->display_options['filters']['keys']['exposed'] = TRUE; + $handler->display->display_options['filters']['keys']['expose']['operator_id'] = 'keys_op'; + $handler->display->display_options['filters']['keys']['expose']['label'] = 'Search'; + $handler->display->display_options['filters']['keys']['expose']['operator'] = 'keys_op'; + $handler->display->display_options['filters']['keys']['expose']['identifier'] = 'keys'; + $handler->display->display_options['filters']['keys']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + /* Filter criterion: User: Name (raw) */ + $handler->display->display_options['filters']['name']['id'] = 'name'; + $handler->display->display_options['filters']['name']['table'] = 'users'; + $handler->display->display_options['filters']['name']['field'] = 'name'; + $handler->display->display_options['filters']['name']['relationship'] = 'uid'; + $handler->display->display_options['filters']['name']['operator'] = 'contains'; + $handler->display->display_options['filters']['name']['exposed'] = TRUE; + $handler->display->display_options['filters']['name']['expose']['operator_id'] = 'name_op'; + $handler->display->display_options['filters']['name']['expose']['label'] = 'Reviewer'; + $handler->display->display_options['filters']['name']['expose']['operator'] = 'name_op'; + $handler->display->display_options['filters']['name']['expose']['identifier'] = 'name'; + $handler->display->display_options['filters']['name']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + /* Filter criterion: Content: Title */ + $handler->display->display_options['filters']['title']['id'] = 'title'; + $handler->display->display_options['filters']['title']['table'] = 'node'; + $handler->display->display_options['filters']['title']['field'] = 'title'; + $handler->display->display_options['filters']['title']['operator'] = 'contains'; + $handler->display->display_options['filters']['title']['exposed'] = TRUE; + $handler->display->display_options['filters']['title']['expose']['operator_id'] = 'title_op'; + $handler->display->display_options['filters']['title']['expose']['label'] = 'By Movie Title'; + $handler->display->display_options['filters']['title']['expose']['operator'] = 'title_op'; + $handler->display->display_options['filters']['title']['expose']['identifier'] = 'title'; + $handler->display->display_options['filters']['title']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + /* Filter criterion: Content: Please select one (field_please_select_one) */ + $handler->display->display_options['filters']['field_please_select_one_value']['id'] = 'field_please_select_one_value'; + $handler->display->display_options['filters']['field_please_select_one_value']['table'] = 'field_data_field_please_select_one'; + $handler->display->display_options['filters']['field_please_select_one_value']['field'] = 'field_please_select_one_value'; + $handler->display->display_options['filters']['field_please_select_one_value']['value'] = array( + 'public' => 'public', + 'publicnoname' => 'publicnoname', + ); + /* Filter criterion: Content: Genre (field_genre) */ + $handler->display->display_options['filters']['field_genre_value']['id'] = 'field_genre_value'; + $handler->display->display_options['filters']['field_genre_value']['table'] = 'field_data_field_genre'; + $handler->display->display_options['filters']['field_genre_value']['field'] = 'field_genre_value'; + $handler->display->display_options['filters']['field_genre_value']['exposed'] = TRUE; + $handler->display->display_options['filters']['field_genre_value']['expose']['operator_id'] = 'field_genre_value_op'; + $handler->display->display_options['filters']['field_genre_value']['expose']['label'] = 'By Genre'; + $handler->display->display_options['filters']['field_genre_value']['expose']['operator'] = 'field_genre_value_op'; + $handler->display->display_options['filters']['field_genre_value']['expose']['identifier'] = 'field_genre_value'; + $handler->display->display_options['filters']['field_genre_value']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + $handler->display->display_options['path'] = 'movie-review'; + + /* Display: Staff */ + $handler = $view->new_display('page', 'Staff', 'page_1'); + $handler->display->display_options['defaults']['pager'] = FALSE; + $handler->display->display_options['pager']['type'] = 'full'; + $handler->display->display_options['pager']['options']['items_per_page'] = '10'; + $handler->display->display_options['pager']['options']['offset'] = '0'; + $handler->display->display_options['pager']['options']['id'] = '0'; + $handler->display->display_options['pager']['options']['quantity'] = '9'; + $handler->display->display_options['pager']['options']['expose']['items_per_page'] = TRUE; + $handler->display->display_options['pager']['options']['expose']['items_per_page_options'] = '10, 20, 30'; + $handler->display->display_options['defaults']['style_plugin'] = FALSE; + $handler->display->display_options['style_plugin'] = 'default'; + $handler->display->display_options['defaults']['style_options'] = FALSE; + $handler->display->display_options['defaults']['row_plugin'] = FALSE; + $handler->display->display_options['row_plugin'] = 'fields'; + $handler->display->display_options['row_options']['inline'] = array( + 'counter' => 'counter', + 'title' => 'title', + 'count' => 'count', + ); + $handler->display->display_options['defaults']['row_options'] = FALSE; + $handler->display->display_options['defaults']['header'] = FALSE; + /* Header: Global: Text area */ + $handler->display->display_options['header']['area']['id'] = 'area'; + $handler->display->display_options['header']['area']['table'] = 'views'; + $handler->display->display_options['header']['area']['field'] = 'area'; + $handler->display->display_options['header']['area']['content'] = '

        Reviews & Booklists

        + +

        Movie Reviews

        '; + $handler->display->display_options['header']['area']['format'] = 'full_html'; + $handler->display->display_options['defaults']['relationships'] = FALSE; + /* Relationship: Content: Author */ + $handler->display->display_options['relationships']['uid']['id'] = 'uid'; + $handler->display->display_options['relationships']['uid']['table'] = 'node'; + $handler->display->display_options['relationships']['uid']['field'] = 'uid'; + /* Relationship: Flags: like counter */ + $handler->display->display_options['relationships']['flag_count_rel']['id'] = 'flag_count_rel'; + $handler->display->display_options['relationships']['flag_count_rel']['table'] = 'node'; + $handler->display->display_options['relationships']['flag_count_rel']['field'] = 'flag_count_rel'; + $handler->display->display_options['relationships']['flag_count_rel']['required'] = 0; + $handler->display->display_options['relationships']['flag_count_rel']['flag'] = 'like'; + /* Relationship: Flags: like */ + $handler->display->display_options['relationships']['flag_content_rel']['id'] = 'flag_content_rel'; + $handler->display->display_options['relationships']['flag_content_rel']['table'] = 'node'; + $handler->display->display_options['relationships']['flag_content_rel']['field'] = 'flag_content_rel'; + $handler->display->display_options['relationships']['flag_content_rel']['required'] = 0; + $handler->display->display_options['relationships']['flag_content_rel']['flag'] = 'like'; + $handler->display->display_options['relationships']['flag_content_rel']['user_scope'] = 'any'; + /* Relationship: User: Profile */ + $handler->display->display_options['relationships']['profile']['id'] = 'profile'; + $handler->display->display_options['relationships']['profile']['table'] = 'users'; + $handler->display->display_options['relationships']['profile']['field'] = 'profile'; + $handler->display->display_options['relationships']['profile']['relationship'] = 'uid'; + $handler->display->display_options['relationships']['profile']['bundle_types'] = array( + 'main' => 'main', + ); + $handler->display->display_options['defaults']['fields'] = FALSE; + /* Field: User: Uid */ + $handler->display->display_options['fields']['uid']['id'] = 'uid'; + $handler->display->display_options['fields']['uid']['table'] = 'users'; + $handler->display->display_options['fields']['uid']['field'] = 'uid'; + $handler->display->display_options['fields']['uid']['relationship'] = 'uid'; + $handler->display->display_options['fields']['uid']['exclude'] = TRUE; + /* Field: Global: View result counter */ + $handler->display->display_options['fields']['counter']['id'] = 'counter'; + $handler->display->display_options['fields']['counter']['table'] = 'views'; + $handler->display->display_options['fields']['counter']['field'] = 'counter'; + $handler->display->display_options['fields']['counter']['label'] = ''; + $handler->display->display_options['fields']['counter']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['counter']['counter_start'] = '1'; + $handler->display->display_options['fields']['counter']['reverse'] = 0; + /* Field: Content: Catalog Link */ + $handler->display->display_options['fields']['field_catalog_link_movie_review_1']['id'] = 'field_catalog_link_movie_review_1'; + $handler->display->display_options['fields']['field_catalog_link_movie_review_1']['table'] = 'field_data_field_catalog_link_movie_review'; + $handler->display->display_options['fields']['field_catalog_link_movie_review_1']['field'] = 'field_catalog_link_movie_review'; + $handler->display->display_options['fields']['field_catalog_link_movie_review_1']['exclude'] = TRUE; + $handler->display->display_options['fields']['field_catalog_link_movie_review_1']['click_sort_column'] = 'url'; + /* Field: Content: Title */ + $handler->display->display_options['fields']['title']['id'] = 'title'; + $handler->display->display_options['fields']['title']['table'] = 'node'; + $handler->display->display_options['fields']['title']['field'] = 'title'; + $handler->display->display_options['fields']['title']['label'] = ''; + $handler->display->display_options['fields']['title']['alter']['path'] = '[field_catalog_link_movie_review_1]'; + $handler->display->display_options['fields']['title']['alter']['target'] = '_blank'; + $handler->display->display_options['fields']['title']['alter']['word_boundary'] = FALSE; + $handler->display->display_options['fields']['title']['alter']['ellipsis'] = FALSE; + $handler->display->display_options['fields']['title']['element_label_colon'] = FALSE; + /* Field: Flags: Flag counter */ + $handler->display->display_options['fields']['count']['id'] = 'count'; + $handler->display->display_options['fields']['count']['table'] = 'flag_counts'; + $handler->display->display_options['fields']['count']['field'] = 'count'; + $handler->display->display_options['fields']['count']['relationship'] = 'flag_count_rel'; + $handler->display->display_options['fields']['count']['label'] = 'Likes'; + /* Field: Content: Genre */ + $handler->display->display_options['fields']['field_genre']['id'] = 'field_genre'; + $handler->display->display_options['fields']['field_genre']['table'] = 'field_data_field_genre'; + $handler->display->display_options['fields']['field_genre']['field'] = 'field_genre'; + /* Field: Content: Actors */ + $handler->display->display_options['fields']['field_actors']['id'] = 'field_actors'; + $handler->display->display_options['fields']['field_actors']['table'] = 'field_data_field_actors'; + $handler->display->display_options['fields']['field_actors']['field'] = 'field_actors'; + $handler->display->display_options['fields']['field_actors']['label'] = ''; + $handler->display->display_options['fields']['field_actors']['alter']['alter_text'] = TRUE; + $handler->display->display_options['fields']['field_actors']['alter']['text'] = 'Actors: [field_actors]'; + $handler->display->display_options['fields']['field_actors']['element_label_colon'] = FALSE; + /* Field: Content: Director */ + $handler->display->display_options['fields']['field_director']['id'] = 'field_director'; + $handler->display->display_options['fields']['field_director']['table'] = 'field_data_field_director'; + $handler->display->display_options['fields']['field_director']['field'] = 'field_director'; + $handler->display->display_options['fields']['field_director']['label'] = ''; + $handler->display->display_options['fields']['field_director']['alter']['alter_text'] = TRUE; + $handler->display->display_options['fields']['field_director']['alter']['text'] = 'Director: [field_director]'; + $handler->display->display_options['fields']['field_director']['element_label_colon'] = FALSE; + /* Field: Content: Language */ + $handler->display->display_options['fields']['field_language']['id'] = 'field_language'; + $handler->display->display_options['fields']['field_language']['table'] = 'field_data_field_language'; + $handler->display->display_options['fields']['field_language']['field'] = 'field_language'; + $handler->display->display_options['fields']['field_language']['label'] = ''; + $handler->display->display_options['fields']['field_language']['alter']['alter_text'] = TRUE; + $handler->display->display_options['fields']['field_language']['alter']['text'] = 'Language: [field_language]'; + $handler->display->display_options['fields']['field_language']['element_label_colon'] = FALSE; + /* Field: Content: Release Year */ + $handler->display->display_options['fields']['field_release_year']['id'] = 'field_release_year'; + $handler->display->display_options['fields']['field_release_year']['table'] = 'field_data_field_release_year'; + $handler->display->display_options['fields']['field_release_year']['field'] = 'field_release_year'; + $handler->display->display_options['fields']['field_release_year']['label'] = ''; + $handler->display->display_options['fields']['field_release_year']['alter']['alter_text'] = TRUE; + $handler->display->display_options['fields']['field_release_year']['alter']['text'] = 'Release Year: [field_release_year]'; + $handler->display->display_options['fields']['field_release_year']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['field_release_year']['settings'] = array( + 'format_type' => 'short', + 'fromto' => 'both', + 'multiple_number' => '', + 'multiple_from' => '', + 'multiple_to' => '', + 'show_remaining_days' => 0, + ); + /* Field: Content: Rating */ + $handler->display->display_options['fields']['field_rating']['id'] = 'field_rating'; + $handler->display->display_options['fields']['field_rating']['table'] = 'field_data_field_rating'; + $handler->display->display_options['fields']['field_rating']['field'] = 'field_rating'; + $handler->display->display_options['fields']['field_rating']['label'] = ''; + $handler->display->display_options['fields']['field_rating']['alter']['alter_text'] = TRUE; + $handler->display->display_options['fields']['field_rating']['alter']['text'] = 'Rating: [field_rating]'; + $handler->display->display_options['fields']['field_rating']['element_label_colon'] = FALSE; + /* Field: Content: Catalog Link */ + $handler->display->display_options['fields']['field_catalog_link_movie_review']['id'] = 'field_catalog_link_movie_review'; + $handler->display->display_options['fields']['field_catalog_link_movie_review']['table'] = 'field_data_field_catalog_link_movie_review'; + $handler->display->display_options['fields']['field_catalog_link_movie_review']['field'] = 'field_catalog_link_movie_review'; + $handler->display->display_options['fields']['field_catalog_link_movie_review']['label'] = ''; + $handler->display->display_options['fields']['field_catalog_link_movie_review']['alter']['alter_text'] = TRUE; + $handler->display->display_options['fields']['field_catalog_link_movie_review']['alter']['text'] = 'Catalog Link: [field_catalog_link_movie_review]'; + $handler->display->display_options['fields']['field_catalog_link_movie_review']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['field_catalog_link_movie_review']['click_sort_column'] = 'url'; + $handler->display->display_options['fields']['field_catalog_link_movie_review']['type'] = 'link_url'; + /* Field: Content: Please select one */ + $handler->display->display_options['fields']['field_please_select_one']['id'] = 'field_please_select_one'; + $handler->display->display_options['fields']['field_please_select_one']['table'] = 'field_data_field_please_select_one'; + $handler->display->display_options['fields']['field_please_select_one']['field'] = 'field_please_select_one'; + $handler->display->display_options['fields']['field_please_select_one']['label'] = ''; + $handler->display->display_options['fields']['field_please_select_one']['exclude'] = TRUE; + $handler->display->display_options['fields']['field_please_select_one']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['field_please_select_one']['type'] = 'list_key'; + /* Field: Global: PHP */ + $handler->display->display_options['fields']['php']['id'] = 'php'; + $handler->display->display_options['fields']['php']['table'] = 'views'; + $handler->display->display_options['fields']['php']['field'] = 'php'; + $handler->display->display_options['fields']['php']['label'] = ''; + $handler->display->display_options['fields']['php']['exclude'] = TRUE; + $handler->display->display_options['fields']['php']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['php']['use_php_setup'] = 0; + $handler->display->display_options['fields']['php']['php_output'] = '_field_data[\'nid\'][\'entity\']; +$privacy_key = $privacy->field_please_select_one[LANGUAGE_NONE][0][\'value\']; +if($privacy_key == \'public\'){ +print \'Reviewed by \'; +} + +?>'; + $handler->display->display_options['fields']['php']['use_php_click_sortable'] = '0'; + $handler->display->display_options['fields']['php']['php_click_sortable'] = ''; + /* Field: Profile: Avatar image */ + $handler->display->display_options['fields']['field_user_avatar']['id'] = 'field_user_avatar'; + $handler->display->display_options['fields']['field_user_avatar']['table'] = 'field_data_field_user_avatar'; + $handler->display->display_options['fields']['field_user_avatar']['field'] = 'field_user_avatar'; + $handler->display->display_options['fields']['field_user_avatar']['relationship'] = 'profile'; + $handler->display->display_options['fields']['field_user_avatar']['label'] = ''; + $handler->display->display_options['fields']['field_user_avatar']['exclude'] = TRUE; + $handler->display->display_options['fields']['field_user_avatar']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['field_user_avatar']['type'] = 'entityreference_entity_view'; + $handler->display->display_options['fields']['field_user_avatar']['settings'] = array( + 'view_mode' => 'teaser', + 'links' => 1, + ); + /* Field: Global: PHP */ + $handler->display->display_options['fields']['php_1']['id'] = 'php_1'; + $handler->display->display_options['fields']['php_1']['table'] = 'views'; + $handler->display->display_options['fields']['php_1']['field'] = 'php'; + $handler->display->display_options['fields']['php_1']['label'] = ''; + $handler->display->display_options['fields']['php_1']['exclude'] = TRUE; + $handler->display->display_options['fields']['php_1']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['php_1']['use_php_setup'] = 0; + $handler->display->display_options['fields']['php_1']['php_output'] = 'field_user_avatar; + +$query = db_select(\'field_data_field_user_avatar\',\'avatar\') +->fields(\'avatar\',array(\'field_user_avatar_target_id\')) +->condition(\'entity_id\',$img_id) +->execute() +->fetchAssoc(); + +$image_id = $query[\'field_user_avatar_target_id\']; + +$query = db_select(\'field_data_field_avatar_image\', \'t\'); +$query->join(\'file_managed\', \'n\', \'n.fid = t.field_avatar_image_fid\'); +$result = $query + ->fields(\'n\', array(\'uri\')) + ->condition(\'t.entity_id\', $image_id) + ->execute(); + +$img_uri = $result->fetchObject(); +$img_uri = $img_uri->uri; +$style = \'avatar_style\'; +$img_path = image_style_url($style, $img_uri); + +$img = ""; + +$privacy = $data->_field_data[\'nid\'][\'entity\']; +$privacy_key = $privacy->field_please_select_one[LANGUAGE_NONE][0][\'value\']; + +if(isset($img_uri)){ + if($privacy_key == \'public\'){ + print $img; + } +} +?>'; + $handler->display->display_options['fields']['php_1']['use_php_click_sortable'] = '0'; + $handler->display->display_options['fields']['php_1']['php_click_sortable'] = ''; + /* Field: User: Name */ + $handler->display->display_options['fields']['name']['id'] = 'name'; + $handler->display->display_options['fields']['name']['table'] = 'users'; + $handler->display->display_options['fields']['name']['field'] = 'name'; + $handler->display->display_options['fields']['name']['relationship'] = 'uid'; + $handler->display->display_options['fields']['name']['label'] = ''; + $handler->display->display_options['fields']['name']['exclude'] = TRUE; + $handler->display->display_options['fields']['name']['element_label_colon'] = FALSE; + /* Field: Global: PHP */ + $handler->display->display_options['fields']['php_2']['id'] = 'php_2'; + $handler->display->display_options['fields']['php_2']['table'] = 'views'; + $handler->display->display_options['fields']['php_2']['field'] = 'php'; + $handler->display->display_options['fields']['php_2']['label'] = ''; + $handler->display->display_options['fields']['php_2']['exclude'] = TRUE; + $handler->display->display_options['fields']['php_2']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['php_2']['use_php_setup'] = 0; + $handler->display->display_options['fields']['php_2']['php_output'] = '_field_data[\'nid\'][\'entity\']; +$privacy_key = $privacy->field_please_select_one[LANGUAGE_NONE][0][\'value\']; +if($privacy_key == \'public\'){ +echo "uid>".$row->name.""; +} + +?>'; + $handler->display->display_options['fields']['php_2']['use_php_click_sortable'] = '0'; + $handler->display->display_options['fields']['php_2']['php_click_sortable'] = ''; + /* Field: Global: Custom text */ + $handler->display->display_options['fields']['nothing']['id'] = 'nothing'; + $handler->display->display_options['fields']['nothing']['table'] = 'views'; + $handler->display->display_options['fields']['nothing']['field'] = 'nothing'; + $handler->display->display_options['fields']['nothing']['label'] = ''; + $handler->display->display_options['fields']['nothing']['alter']['text'] = '
        [php]
        [php_1]
        [php_2]
        '; + $handler->display->display_options['fields']['nothing']['element_label_colon'] = FALSE; + /* Field: Content: Post date */ + $handler->display->display_options['fields']['created']['id'] = 'created'; + $handler->display->display_options['fields']['created']['table'] = 'node'; + $handler->display->display_options['fields']['created']['field'] = 'created'; + $handler->display->display_options['fields']['created']['label'] = ''; + $handler->display->display_options['fields']['created']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['created']['date_format'] = 'custom'; + $handler->display->display_options['fields']['created']['custom_date_format'] = 'M d, Y'; + $handler->display->display_options['fields']['created']['second_date_format'] = 'privatemsg_current_day'; + /* Field: Content: Body */ + $handler->display->display_options['fields']['body']['id'] = 'body'; + $handler->display->display_options['fields']['body']['table'] = 'field_data_body'; + $handler->display->display_options['fields']['body']['field'] = 'body'; + $handler->display->display_options['fields']['body']['label'] = ''; + $handler->display->display_options['fields']['body']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['body']['type'] = 'text_summary_or_trimmed'; + $handler->display->display_options['fields']['body']['settings'] = array( + 'trim_length' => '200', + ); + /* Field: Content: Link */ + $handler->display->display_options['fields']['view_node']['id'] = 'view_node'; + $handler->display->display_options['fields']['view_node']['table'] = 'views_entity_node'; + $handler->display->display_options['fields']['view_node']['field'] = 'view_node'; + $handler->display->display_options['fields']['view_node']['label'] = ''; + $handler->display->display_options['fields']['view_node']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['view_node']['text'] = 'View full review'; + $handler->display->display_options['defaults']['sorts'] = FALSE; + /* Sort criterion: Content: Post date */ + $handler->display->display_options['sorts']['created']['id'] = 'created'; + $handler->display->display_options['sorts']['created']['table'] = 'node'; + $handler->display->display_options['sorts']['created']['field'] = 'created'; + $handler->display->display_options['sorts']['created']['order'] = 'DESC'; + $handler->display->display_options['sorts']['created']['exposed'] = TRUE; + $handler->display->display_options['sorts']['created']['expose']['label'] = 'Post date'; + $handler->display->display_options['sorts']['created']['granularity'] = 'year'; + /* Sort criterion: Flags: Flag counter */ + $handler->display->display_options['sorts']['count']['id'] = 'count'; + $handler->display->display_options['sorts']['count']['table'] = 'flag_counts'; + $handler->display->display_options['sorts']['count']['field'] = 'count'; + $handler->display->display_options['sorts']['count']['relationship'] = 'flag_count_rel'; + $handler->display->display_options['sorts']['count']['order'] = 'DESC'; + $handler->display->display_options['sorts']['count']['exposed'] = TRUE; + $handler->display->display_options['sorts']['count']['expose']['label'] = 'Flag counter'; + $handler->display->display_options['defaults']['filter_groups'] = FALSE; + $handler->display->display_options['defaults']['filters'] = FALSE; + /* Filter criterion: Content: Published */ + $handler->display->display_options['filters']['status']['id'] = 'status'; + $handler->display->display_options['filters']['status']['table'] = 'node'; + $handler->display->display_options['filters']['status']['field'] = 'status'; + $handler->display->display_options['filters']['status']['value'] = 1; + $handler->display->display_options['filters']['status']['group'] = 1; + $handler->display->display_options['filters']['status']['expose']['operator'] = FALSE; + /* Filter criterion: Content: Type */ + $handler->display->display_options['filters']['type']['id'] = 'type'; + $handler->display->display_options['filters']['type']['table'] = 'node'; + $handler->display->display_options['filters']['type']['field'] = 'type'; + $handler->display->display_options['filters']['type']['value'] = array( + 'movie_review' => 'movie_review', + ); + /* Filter criterion: Search: Search Terms */ + $handler->display->display_options['filters']['keys']['id'] = 'keys'; + $handler->display->display_options['filters']['keys']['table'] = 'search_index'; + $handler->display->display_options['filters']['keys']['field'] = 'keys'; + $handler->display->display_options['filters']['keys']['exposed'] = TRUE; + $handler->display->display_options['filters']['keys']['expose']['operator_id'] = 'keys_op'; + $handler->display->display_options['filters']['keys']['expose']['label'] = 'Search'; + $handler->display->display_options['filters']['keys']['expose']['operator'] = 'keys_op'; + $handler->display->display_options['filters']['keys']['expose']['identifier'] = 'keys'; + $handler->display->display_options['filters']['keys']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + /* Filter criterion: User: Name (raw) */ + $handler->display->display_options['filters']['name']['id'] = 'name'; + $handler->display->display_options['filters']['name']['table'] = 'users'; + $handler->display->display_options['filters']['name']['field'] = 'name'; + $handler->display->display_options['filters']['name']['relationship'] = 'uid'; + $handler->display->display_options['filters']['name']['operator'] = 'contains'; + $handler->display->display_options['filters']['name']['exposed'] = TRUE; + $handler->display->display_options['filters']['name']['expose']['operator_id'] = 'name_op'; + $handler->display->display_options['filters']['name']['expose']['label'] = 'Reviewer'; + $handler->display->display_options['filters']['name']['expose']['operator'] = 'name_op'; + $handler->display->display_options['filters']['name']['expose']['identifier'] = 'name'; + $handler->display->display_options['filters']['name']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + /* Filter criterion: Content: Title */ + $handler->display->display_options['filters']['title']['id'] = 'title'; + $handler->display->display_options['filters']['title']['table'] = 'node'; + $handler->display->display_options['filters']['title']['field'] = 'title'; + $handler->display->display_options['filters']['title']['operator'] = 'contains'; + $handler->display->display_options['filters']['title']['exposed'] = TRUE; + $handler->display->display_options['filters']['title']['expose']['operator_id'] = 'title_op'; + $handler->display->display_options['filters']['title']['expose']['label'] = 'By Movie Title'; + $handler->display->display_options['filters']['title']['expose']['operator'] = 'title_op'; + $handler->display->display_options['filters']['title']['expose']['identifier'] = 'title'; + $handler->display->display_options['filters']['title']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + /* Filter criterion: Content: Please select one (field_please_select_one) */ + $handler->display->display_options['filters']['field_please_select_one_value']['id'] = 'field_please_select_one_value'; + $handler->display->display_options['filters']['field_please_select_one_value']['table'] = 'field_data_field_please_select_one'; + $handler->display->display_options['filters']['field_please_select_one_value']['field'] = 'field_please_select_one_value'; + $handler->display->display_options['filters']['field_please_select_one_value']['value'] = array( + 'public' => 'public', + 'publicnoname' => 'publicnoname', + ); + /* Filter criterion: User: Roles */ + $handler->display->display_options['filters']['rid']['id'] = 'rid'; + $handler->display->display_options['filters']['rid']['table'] = 'users_roles'; + $handler->display->display_options['filters']['rid']['field'] = 'rid'; + $handler->display->display_options['filters']['rid']['relationship'] = 'uid'; + $handler->display->display_options['filters']['rid']['value'] = array( + 10 => '10', + ); + /* Filter criterion: Content: Genre (field_genre) */ + $handler->display->display_options['filters']['field_genre_value']['id'] = 'field_genre_value'; + $handler->display->display_options['filters']['field_genre_value']['table'] = 'field_data_field_genre'; + $handler->display->display_options['filters']['field_genre_value']['field'] = 'field_genre_value'; + $handler->display->display_options['filters']['field_genre_value']['exposed'] = TRUE; + $handler->display->display_options['filters']['field_genre_value']['expose']['operator_id'] = 'field_genre_value_op'; + $handler->display->display_options['filters']['field_genre_value']['expose']['label'] = 'By Genre'; + $handler->display->display_options['filters']['field_genre_value']['expose']['operator'] = 'field_genre_value_op'; + $handler->display->display_options['filters']['field_genre_value']['expose']['identifier'] = 'field_genre_value'; + $handler->display->display_options['filters']['field_genre_value']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + $handler->display->display_options['path'] = 'movie-review/staff'; + + /* Display: Players */ + $handler = $view->new_display('page', 'Players', 'page_2'); + $handler->display->display_options['defaults']['pager'] = FALSE; + $handler->display->display_options['pager']['type'] = 'full'; + $handler->display->display_options['pager']['options']['items_per_page'] = '10'; + $handler->display->display_options['pager']['options']['offset'] = '0'; + $handler->display->display_options['pager']['options']['id'] = '0'; + $handler->display->display_options['pager']['options']['quantity'] = '9'; + $handler->display->display_options['pager']['options']['expose']['items_per_page'] = TRUE; + $handler->display->display_options['pager']['options']['expose']['items_per_page_options'] = '10, 20, 30'; + $handler->display->display_options['defaults']['style_plugin'] = FALSE; + $handler->display->display_options['style_plugin'] = 'default'; + $handler->display->display_options['defaults']['style_options'] = FALSE; + $handler->display->display_options['defaults']['row_plugin'] = FALSE; + $handler->display->display_options['row_plugin'] = 'fields'; + $handler->display->display_options['row_options']['inline'] = array( + 'counter' => 'counter', + 'title' => 'title', + 'count' => 'count', + ); + $handler->display->display_options['defaults']['row_options'] = FALSE; + $handler->display->display_options['defaults']['header'] = FALSE; + /* Header: Global: Text area */ + $handler->display->display_options['header']['area']['id'] = 'area'; + $handler->display->display_options['header']['area']['table'] = 'views'; + $handler->display->display_options['header']['area']['field'] = 'area'; + $handler->display->display_options['header']['area']['content'] = '

        Reviews & Booklists

        + +

        Movie Reviews

        '; + $handler->display->display_options['header']['area']['format'] = 'full_html'; + $handler->display->display_options['defaults']['relationships'] = FALSE; + /* Relationship: Content: Author */ + $handler->display->display_options['relationships']['uid']['id'] = 'uid'; + $handler->display->display_options['relationships']['uid']['table'] = 'node'; + $handler->display->display_options['relationships']['uid']['field'] = 'uid'; + /* Relationship: Flags: like counter */ + $handler->display->display_options['relationships']['flag_count_rel']['id'] = 'flag_count_rel'; + $handler->display->display_options['relationships']['flag_count_rel']['table'] = 'node'; + $handler->display->display_options['relationships']['flag_count_rel']['field'] = 'flag_count_rel'; + $handler->display->display_options['relationships']['flag_count_rel']['required'] = 0; + $handler->display->display_options['relationships']['flag_count_rel']['flag'] = 'like'; + /* Relationship: Flags: like */ + $handler->display->display_options['relationships']['flag_content_rel']['id'] = 'flag_content_rel'; + $handler->display->display_options['relationships']['flag_content_rel']['table'] = 'node'; + $handler->display->display_options['relationships']['flag_content_rel']['field'] = 'flag_content_rel'; + $handler->display->display_options['relationships']['flag_content_rel']['required'] = 0; + $handler->display->display_options['relationships']['flag_content_rel']['flag'] = 'like'; + $handler->display->display_options['relationships']['flag_content_rel']['user_scope'] = 'any'; + /* Relationship: User: Profile */ + $handler->display->display_options['relationships']['profile']['id'] = 'profile'; + $handler->display->display_options['relationships']['profile']['table'] = 'users'; + $handler->display->display_options['relationships']['profile']['field'] = 'profile'; + $handler->display->display_options['relationships']['profile']['relationship'] = 'uid'; + $handler->display->display_options['relationships']['profile']['bundle_types'] = array( + 'main' => 'main', + ); + $handler->display->display_options['defaults']['fields'] = FALSE; + /* Field: User: Uid */ + $handler->display->display_options['fields']['uid']['id'] = 'uid'; + $handler->display->display_options['fields']['uid']['table'] = 'users'; + $handler->display->display_options['fields']['uid']['field'] = 'uid'; + $handler->display->display_options['fields']['uid']['relationship'] = 'uid'; + $handler->display->display_options['fields']['uid']['exclude'] = TRUE; + /* Field: Global: View result counter */ + $handler->display->display_options['fields']['counter']['id'] = 'counter'; + $handler->display->display_options['fields']['counter']['table'] = 'views'; + $handler->display->display_options['fields']['counter']['field'] = 'counter'; + $handler->display->display_options['fields']['counter']['label'] = ''; + $handler->display->display_options['fields']['counter']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['counter']['counter_start'] = '1'; + $handler->display->display_options['fields']['counter']['reverse'] = 0; + /* Field: Content: Catalog Link */ + $handler->display->display_options['fields']['field_catalog_link_movie_review_1']['id'] = 'field_catalog_link_movie_review_1'; + $handler->display->display_options['fields']['field_catalog_link_movie_review_1']['table'] = 'field_data_field_catalog_link_movie_review'; + $handler->display->display_options['fields']['field_catalog_link_movie_review_1']['field'] = 'field_catalog_link_movie_review'; + $handler->display->display_options['fields']['field_catalog_link_movie_review_1']['exclude'] = TRUE; + $handler->display->display_options['fields']['field_catalog_link_movie_review_1']['click_sort_column'] = 'url'; + /* Field: Content: Title */ + $handler->display->display_options['fields']['title']['id'] = 'title'; + $handler->display->display_options['fields']['title']['table'] = 'node'; + $handler->display->display_options['fields']['title']['field'] = 'title'; + $handler->display->display_options['fields']['title']['label'] = ''; + $handler->display->display_options['fields']['title']['alter']['path'] = '[field_catalog_link_movie_review_1]'; + $handler->display->display_options['fields']['title']['alter']['target'] = '_blank'; + $handler->display->display_options['fields']['title']['alter']['word_boundary'] = FALSE; + $handler->display->display_options['fields']['title']['alter']['ellipsis'] = FALSE; + $handler->display->display_options['fields']['title']['element_label_colon'] = FALSE; + /* Field: Flags: Flag counter */ + $handler->display->display_options['fields']['count']['id'] = 'count'; + $handler->display->display_options['fields']['count']['table'] = 'flag_counts'; + $handler->display->display_options['fields']['count']['field'] = 'count'; + $handler->display->display_options['fields']['count']['relationship'] = 'flag_count_rel'; + $handler->display->display_options['fields']['count']['label'] = 'Likes'; + /* Field: Content: Genre */ + $handler->display->display_options['fields']['field_genre']['id'] = 'field_genre'; + $handler->display->display_options['fields']['field_genre']['table'] = 'field_data_field_genre'; + $handler->display->display_options['fields']['field_genre']['field'] = 'field_genre'; + /* Field: Content: Actors */ + $handler->display->display_options['fields']['field_actors']['id'] = 'field_actors'; + $handler->display->display_options['fields']['field_actors']['table'] = 'field_data_field_actors'; + $handler->display->display_options['fields']['field_actors']['field'] = 'field_actors'; + $handler->display->display_options['fields']['field_actors']['label'] = ''; + $handler->display->display_options['fields']['field_actors']['alter']['alter_text'] = TRUE; + $handler->display->display_options['fields']['field_actors']['alter']['text'] = 'Actors: [field_actors]'; + $handler->display->display_options['fields']['field_actors']['element_label_colon'] = FALSE; + /* Field: Content: Director */ + $handler->display->display_options['fields']['field_director']['id'] = 'field_director'; + $handler->display->display_options['fields']['field_director']['table'] = 'field_data_field_director'; + $handler->display->display_options['fields']['field_director']['field'] = 'field_director'; + $handler->display->display_options['fields']['field_director']['label'] = ''; + $handler->display->display_options['fields']['field_director']['alter']['alter_text'] = TRUE; + $handler->display->display_options['fields']['field_director']['alter']['text'] = 'Director: [field_director]'; + $handler->display->display_options['fields']['field_director']['element_label_colon'] = FALSE; + /* Field: Content: Language */ + $handler->display->display_options['fields']['field_language']['id'] = 'field_language'; + $handler->display->display_options['fields']['field_language']['table'] = 'field_data_field_language'; + $handler->display->display_options['fields']['field_language']['field'] = 'field_language'; + $handler->display->display_options['fields']['field_language']['label'] = ''; + $handler->display->display_options['fields']['field_language']['alter']['alter_text'] = TRUE; + $handler->display->display_options['fields']['field_language']['alter']['text'] = 'Language: [field_language]'; + $handler->display->display_options['fields']['field_language']['element_label_colon'] = FALSE; + /* Field: Content: Release Year */ + $handler->display->display_options['fields']['field_release_year']['id'] = 'field_release_year'; + $handler->display->display_options['fields']['field_release_year']['table'] = 'field_data_field_release_year'; + $handler->display->display_options['fields']['field_release_year']['field'] = 'field_release_year'; + $handler->display->display_options['fields']['field_release_year']['label'] = ''; + $handler->display->display_options['fields']['field_release_year']['alter']['alter_text'] = TRUE; + $handler->display->display_options['fields']['field_release_year']['alter']['text'] = 'Release Year: [field_release_year]'; + $handler->display->display_options['fields']['field_release_year']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['field_release_year']['settings'] = array( + 'format_type' => 'short', + 'fromto' => 'both', + 'multiple_number' => '', + 'multiple_from' => '', + 'multiple_to' => '', + 'show_remaining_days' => 0, + ); + /* Field: Content: Rating */ + $handler->display->display_options['fields']['field_rating']['id'] = 'field_rating'; + $handler->display->display_options['fields']['field_rating']['table'] = 'field_data_field_rating'; + $handler->display->display_options['fields']['field_rating']['field'] = 'field_rating'; + $handler->display->display_options['fields']['field_rating']['label'] = ''; + $handler->display->display_options['fields']['field_rating']['alter']['alter_text'] = TRUE; + $handler->display->display_options['fields']['field_rating']['alter']['text'] = 'Rating: [field_rating]'; + $handler->display->display_options['fields']['field_rating']['element_label_colon'] = FALSE; + /* Field: Content: Catalog Link */ + $handler->display->display_options['fields']['field_catalog_link_movie_review']['id'] = 'field_catalog_link_movie_review'; + $handler->display->display_options['fields']['field_catalog_link_movie_review']['table'] = 'field_data_field_catalog_link_movie_review'; + $handler->display->display_options['fields']['field_catalog_link_movie_review']['field'] = 'field_catalog_link_movie_review'; + $handler->display->display_options['fields']['field_catalog_link_movie_review']['label'] = ''; + $handler->display->display_options['fields']['field_catalog_link_movie_review']['alter']['alter_text'] = TRUE; + $handler->display->display_options['fields']['field_catalog_link_movie_review']['alter']['text'] = 'Catalog Link: [field_catalog_link_movie_review]'; + $handler->display->display_options['fields']['field_catalog_link_movie_review']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['field_catalog_link_movie_review']['click_sort_column'] = 'url'; + $handler->display->display_options['fields']['field_catalog_link_movie_review']['type'] = 'link_url'; + /* Field: Content: Please select one */ + $handler->display->display_options['fields']['field_please_select_one']['id'] = 'field_please_select_one'; + $handler->display->display_options['fields']['field_please_select_one']['table'] = 'field_data_field_please_select_one'; + $handler->display->display_options['fields']['field_please_select_one']['field'] = 'field_please_select_one'; + $handler->display->display_options['fields']['field_please_select_one']['label'] = ''; + $handler->display->display_options['fields']['field_please_select_one']['exclude'] = TRUE; + $handler->display->display_options['fields']['field_please_select_one']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['field_please_select_one']['type'] = 'list_key'; + /* Field: Global: PHP */ + $handler->display->display_options['fields']['php']['id'] = 'php'; + $handler->display->display_options['fields']['php']['table'] = 'views'; + $handler->display->display_options['fields']['php']['field'] = 'php'; + $handler->display->display_options['fields']['php']['label'] = ''; + $handler->display->display_options['fields']['php']['exclude'] = TRUE; + $handler->display->display_options['fields']['php']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['php']['use_php_setup'] = 0; + $handler->display->display_options['fields']['php']['php_output'] = '_field_data[\'nid\'][\'entity\']; +$privacy_key = $privacy->field_please_select_one[LANGUAGE_NONE][0][\'value\']; +if($privacy_key == \'public\'){ +print \'Reviewed by \'; +} + +?>'; + $handler->display->display_options['fields']['php']['use_php_click_sortable'] = '0'; + $handler->display->display_options['fields']['php']['php_click_sortable'] = ''; + /* Field: Profile: Avatar image */ + $handler->display->display_options['fields']['field_user_avatar']['id'] = 'field_user_avatar'; + $handler->display->display_options['fields']['field_user_avatar']['table'] = 'field_data_field_user_avatar'; + $handler->display->display_options['fields']['field_user_avatar']['field'] = 'field_user_avatar'; + $handler->display->display_options['fields']['field_user_avatar']['relationship'] = 'profile'; + $handler->display->display_options['fields']['field_user_avatar']['label'] = ''; + $handler->display->display_options['fields']['field_user_avatar']['exclude'] = TRUE; + $handler->display->display_options['fields']['field_user_avatar']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['field_user_avatar']['type'] = 'entityreference_entity_view'; + $handler->display->display_options['fields']['field_user_avatar']['settings'] = array( + 'view_mode' => 'teaser', + 'links' => 1, + ); + /* Field: Global: PHP */ + $handler->display->display_options['fields']['php_1']['id'] = 'php_1'; + $handler->display->display_options['fields']['php_1']['table'] = 'views'; + $handler->display->display_options['fields']['php_1']['field'] = 'php'; + $handler->display->display_options['fields']['php_1']['label'] = ''; + $handler->display->display_options['fields']['php_1']['exclude'] = TRUE; + $handler->display->display_options['fields']['php_1']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['php_1']['use_php_setup'] = 0; + $handler->display->display_options['fields']['php_1']['php_output'] = 'field_user_avatar; + +$query = db_select(\'field_data_field_user_avatar\',\'avatar\') +->fields(\'avatar\',array(\'field_user_avatar_target_id\')) +->condition(\'entity_id\',$img_id) +->execute() +->fetchAssoc(); + +$image_id = $query[\'field_user_avatar_target_id\']; + +$query = db_select(\'field_data_field_avatar_image\', \'t\'); +$query->join(\'file_managed\', \'n\', \'n.fid = t.field_avatar_image_fid\'); +$result = $query + ->fields(\'n\', array(\'uri\')) + ->condition(\'t.entity_id\', $image_id) + ->execute(); + +$img_uri = $result->fetchObject(); +$img_uri = $img_uri->uri; +$style = \'avatar_style\'; +$img_path = image_style_url($style, $img_uri); + +$img = ""; + +$privacy = $data->_field_data[\'nid\'][\'entity\']; +$privacy_key = $privacy->field_please_select_one[LANGUAGE_NONE][0][\'value\']; + +if(isset($img_uri)){ + if($privacy_key == \'public\'){ + print $img; + } +} +?>'; + $handler->display->display_options['fields']['php_1']['use_php_click_sortable'] = '0'; + $handler->display->display_options['fields']['php_1']['php_click_sortable'] = ''; + /* Field: User: Name */ + $handler->display->display_options['fields']['name']['id'] = 'name'; + $handler->display->display_options['fields']['name']['table'] = 'users'; + $handler->display->display_options['fields']['name']['field'] = 'name'; + $handler->display->display_options['fields']['name']['relationship'] = 'uid'; + $handler->display->display_options['fields']['name']['label'] = ''; + $handler->display->display_options['fields']['name']['exclude'] = TRUE; + $handler->display->display_options['fields']['name']['element_label_colon'] = FALSE; + /* Field: Global: PHP */ + $handler->display->display_options['fields']['php_2']['id'] = 'php_2'; + $handler->display->display_options['fields']['php_2']['table'] = 'views'; + $handler->display->display_options['fields']['php_2']['field'] = 'php'; + $handler->display->display_options['fields']['php_2']['label'] = ''; + $handler->display->display_options['fields']['php_2']['exclude'] = TRUE; + $handler->display->display_options['fields']['php_2']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['php_2']['use_php_setup'] = 0; + $handler->display->display_options['fields']['php_2']['php_output'] = '_field_data[\'nid\'][\'entity\']; +$privacy_key = $privacy->field_please_select_one[LANGUAGE_NONE][0][\'value\']; +if($privacy_key == \'public\'){ +echo "uid>".$row->name.""; +} + +?>'; + $handler->display->display_options['fields']['php_2']['use_php_click_sortable'] = '0'; + $handler->display->display_options['fields']['php_2']['php_click_sortable'] = ''; + /* Field: Global: Custom text */ + $handler->display->display_options['fields']['nothing']['id'] = 'nothing'; + $handler->display->display_options['fields']['nothing']['table'] = 'views'; + $handler->display->display_options['fields']['nothing']['field'] = 'nothing'; + $handler->display->display_options['fields']['nothing']['label'] = ''; + $handler->display->display_options['fields']['nothing']['alter']['text'] = '
        [php]
        [php_1]
        [php_2]
        '; + $handler->display->display_options['fields']['nothing']['element_label_colon'] = FALSE; + /* Field: Content: Post date */ + $handler->display->display_options['fields']['created']['id'] = 'created'; + $handler->display->display_options['fields']['created']['table'] = 'node'; + $handler->display->display_options['fields']['created']['field'] = 'created'; + $handler->display->display_options['fields']['created']['label'] = ''; + $handler->display->display_options['fields']['created']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['created']['date_format'] = 'custom'; + $handler->display->display_options['fields']['created']['custom_date_format'] = 'M d, Y'; + $handler->display->display_options['fields']['created']['second_date_format'] = 'privatemsg_current_day'; + /* Field: Content: Body */ + $handler->display->display_options['fields']['body']['id'] = 'body'; + $handler->display->display_options['fields']['body']['table'] = 'field_data_body'; + $handler->display->display_options['fields']['body']['field'] = 'body'; + $handler->display->display_options['fields']['body']['label'] = ''; + $handler->display->display_options['fields']['body']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['body']['type'] = 'text_summary_or_trimmed'; + $handler->display->display_options['fields']['body']['settings'] = array( + 'trim_length' => '200', + ); + /* Field: Content: Link */ + $handler->display->display_options['fields']['view_node']['id'] = 'view_node'; + $handler->display->display_options['fields']['view_node']['table'] = 'views_entity_node'; + $handler->display->display_options['fields']['view_node']['field'] = 'view_node'; + $handler->display->display_options['fields']['view_node']['label'] = ''; + $handler->display->display_options['fields']['view_node']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['view_node']['text'] = 'View full review'; + $handler->display->display_options['defaults']['sorts'] = FALSE; + /* Sort criterion: Content: Post date */ + $handler->display->display_options['sorts']['created']['id'] = 'created'; + $handler->display->display_options['sorts']['created']['table'] = 'node'; + $handler->display->display_options['sorts']['created']['field'] = 'created'; + $handler->display->display_options['sorts']['created']['order'] = 'DESC'; + $handler->display->display_options['sorts']['created']['exposed'] = TRUE; + $handler->display->display_options['sorts']['created']['expose']['label'] = 'Post date'; + $handler->display->display_options['sorts']['created']['granularity'] = 'year'; + /* Sort criterion: Flags: Flag counter */ + $handler->display->display_options['sorts']['count']['id'] = 'count'; + $handler->display->display_options['sorts']['count']['table'] = 'flag_counts'; + $handler->display->display_options['sorts']['count']['field'] = 'count'; + $handler->display->display_options['sorts']['count']['relationship'] = 'flag_count_rel'; + $handler->display->display_options['sorts']['count']['order'] = 'DESC'; + $handler->display->display_options['sorts']['count']['exposed'] = TRUE; + $handler->display->display_options['sorts']['count']['expose']['label'] = 'Flag counter'; + $handler->display->display_options['defaults']['filter_groups'] = FALSE; + $handler->display->display_options['defaults']['filters'] = FALSE; + /* Filter criterion: Content: Published */ + $handler->display->display_options['filters']['status']['id'] = 'status'; + $handler->display->display_options['filters']['status']['table'] = 'node'; + $handler->display->display_options['filters']['status']['field'] = 'status'; + $handler->display->display_options['filters']['status']['value'] = 1; + $handler->display->display_options['filters']['status']['group'] = 1; + $handler->display->display_options['filters']['status']['expose']['operator'] = FALSE; + /* Filter criterion: Content: Type */ + $handler->display->display_options['filters']['type']['id'] = 'type'; + $handler->display->display_options['filters']['type']['table'] = 'node'; + $handler->display->display_options['filters']['type']['field'] = 'type'; + $handler->display->display_options['filters']['type']['value'] = array( + 'movie_review' => 'movie_review', + ); + /* Filter criterion: Search: Search Terms */ + $handler->display->display_options['filters']['keys']['id'] = 'keys'; + $handler->display->display_options['filters']['keys']['table'] = 'search_index'; + $handler->display->display_options['filters']['keys']['field'] = 'keys'; + $handler->display->display_options['filters']['keys']['exposed'] = TRUE; + $handler->display->display_options['filters']['keys']['expose']['operator_id'] = 'keys_op'; + $handler->display->display_options['filters']['keys']['expose']['label'] = 'Search'; + $handler->display->display_options['filters']['keys']['expose']['operator'] = 'keys_op'; + $handler->display->display_options['filters']['keys']['expose']['identifier'] = 'keys'; + $handler->display->display_options['filters']['keys']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + /* Filter criterion: User: Name (raw) */ + $handler->display->display_options['filters']['name']['id'] = 'name'; + $handler->display->display_options['filters']['name']['table'] = 'users'; + $handler->display->display_options['filters']['name']['field'] = 'name'; + $handler->display->display_options['filters']['name']['relationship'] = 'uid'; + $handler->display->display_options['filters']['name']['operator'] = 'contains'; + $handler->display->display_options['filters']['name']['exposed'] = TRUE; + $handler->display->display_options['filters']['name']['expose']['operator_id'] = 'name_op'; + $handler->display->display_options['filters']['name']['expose']['label'] = 'Reviewer'; + $handler->display->display_options['filters']['name']['expose']['operator'] = 'name_op'; + $handler->display->display_options['filters']['name']['expose']['identifier'] = 'name'; + $handler->display->display_options['filters']['name']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + /* Filter criterion: Content: Title */ + $handler->display->display_options['filters']['title']['id'] = 'title'; + $handler->display->display_options['filters']['title']['table'] = 'node'; + $handler->display->display_options['filters']['title']['field'] = 'title'; + $handler->display->display_options['filters']['title']['operator'] = 'contains'; + $handler->display->display_options['filters']['title']['exposed'] = TRUE; + $handler->display->display_options['filters']['title']['expose']['operator_id'] = 'title_op'; + $handler->display->display_options['filters']['title']['expose']['label'] = 'By Movie Title'; + $handler->display->display_options['filters']['title']['expose']['operator'] = 'title_op'; + $handler->display->display_options['filters']['title']['expose']['identifier'] = 'title'; + $handler->display->display_options['filters']['title']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + /* Filter criterion: Content: Please select one (field_please_select_one) */ + $handler->display->display_options['filters']['field_please_select_one_value']['id'] = 'field_please_select_one_value'; + $handler->display->display_options['filters']['field_please_select_one_value']['table'] = 'field_data_field_please_select_one'; + $handler->display->display_options['filters']['field_please_select_one_value']['field'] = 'field_please_select_one_value'; + $handler->display->display_options['filters']['field_please_select_one_value']['value'] = array( + 'public' => 'public', + 'publicnoname' => 'publicnoname', + ); + /* Filter criterion: User: Roles */ + $handler->display->display_options['filters']['rid']['id'] = 'rid'; + $handler->display->display_options['filters']['rid']['table'] = 'users_roles'; + $handler->display->display_options['filters']['rid']['field'] = 'rid'; + $handler->display->display_options['filters']['rid']['relationship'] = 'uid'; + $handler->display->display_options['filters']['rid']['value'] = array( + 6 => '6', + ); + /* Filter criterion: Content: Genre (field_genre) */ + $handler->display->display_options['filters']['field_genre_value']['id'] = 'field_genre_value'; + $handler->display->display_options['filters']['field_genre_value']['table'] = 'field_data_field_genre'; + $handler->display->display_options['filters']['field_genre_value']['field'] = 'field_genre_value'; + $handler->display->display_options['filters']['field_genre_value']['exposed'] = TRUE; + $handler->display->display_options['filters']['field_genre_value']['expose']['operator_id'] = 'field_genre_value_op'; + $handler->display->display_options['filters']['field_genre_value']['expose']['label'] = 'By Genre'; + $handler->display->display_options['filters']['field_genre_value']['expose']['operator'] = 'field_genre_value_op'; + $handler->display->display_options['filters']['field_genre_value']['expose']['identifier'] = 'field_genre_value'; + $handler->display->display_options['filters']['field_genre_value']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + $handler->display->display_options['path'] = 'movie-review/players'; + $export['movie_review'] = $view; + + return $export; +} diff --git a/docroot/sites/all/modules/features/music_review_content_type/music_review_content_type.features.field_base.inc b/docroot/sites/all/modules/features/music_review_content_type/music_review_content_type.features.field_base.inc new file mode 100644 index 00000000..53f531e1 --- /dev/null +++ b/docroot/sites/all/modules/features/music_review_content_type/music_review_content_type.features.field_base.inc @@ -0,0 +1,161 @@ + 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_artist_performer', + 'field_permissions' => array( + 'type' => 0, + ), + 'indexes' => array( + 'format' => array( + 0 => 'format', + ), + ), + 'locked' => 0, + 'module' => 'text', + 'settings' => array( + 'max_length' => 255, + 'profile2_private' => FALSE, + ), + 'translatable' => 0, + 'type' => 'text', + ); + + // Exported field_base: 'field_catalog_link_music'. + $field_bases['field_catalog_link_music'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_catalog_link_music', + 'field_permissions' => array( + 'type' => 0, + ), + 'indexes' => array(), + 'locked' => 0, + 'module' => 'link', + 'settings' => array( + 'attributes' => array( + 'class' => '', + 'rel' => '', + 'target' => 'default', + ), + 'display' => array( + 'url_cutoff' => 80, + ), + 'enable_tokens' => 1, + 'profile2_private' => FALSE, + 'title' => 'optional', + 'title_maxlength' => 128, + 'title_value' => '', + 'url' => 0, + ), + 'translatable' => 0, + 'type' => 'link_field', + ); + + // Exported field_base: 'field_genre_music'. + $field_bases['field_genre_music'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_genre_music', + 'field_permissions' => array( + 'type' => 0, + ), + 'indexes' => array( + 'value' => array( + 0 => 'value', + ), + ), + 'locked' => 0, + 'module' => 'list', + 'settings' => array( + 'allowed_values' => array( + 'genre_1_music' => 'Genre 1', + 'genre_2_music' => 'Genre 2', + 'genre_3_music' => 'Genre 3', + 'genre_4_music' => 'Genre 4', + 'genre_5_music' => 'Genre 5', + 'genre_6_music' => 'Genre 6', + 'genre_other_music' => 'Other', + ), + 'allowed_values_function' => '', + 'profile2_private' => FALSE, + ), + 'translatable' => 0, + 'type' => 'list_text', + ); + + // Exported field_base: 'field_genre_other_option_music'. + $field_bases['field_genre_other_option_music'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_genre_other_option_music', + 'field_permissions' => array( + 'type' => 0, + ), + 'indexes' => array( + 'format' => array( + 0 => 'format', + ), + ), + 'locked' => 0, + 'module' => 'text', + 'settings' => array( + 'max_length' => 255, + 'profile2_private' => FALSE, + ), + 'translatable' => 0, + 'type' => 'text', + ); + + // Exported field_base: 'field_please_select_one_music'. + $field_bases['field_please_select_one_music'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_please_select_one_music', + 'field_permissions' => array( + 'type' => 0, + ), + 'indexes' => array( + 'value' => array( + 0 => 'value', + ), + ), + 'locked' => 0, + 'module' => 'list', + 'settings' => array( + 'allowed_values' => array( + 'public' => 'Other players can read this review and see my username', + 'publicnoname' => 'Other players can read this review, but I don’t want them to see my username', + 'private' => 'I don’t want other players to see this review', + ), + 'allowed_values_function' => '', + 'profile2_private' => FALSE, + ), + 'translatable' => 0, + 'type' => 'list_text', + ); + + return $field_bases; +} diff --git a/docroot/sites/all/modules/features/music_review_content_type/music_review_content_type.features.field_instance.inc b/docroot/sites/all/modules/features/music_review_content_type/music_review_content_type.features.field_instance.inc new file mode 100644 index 00000000..6ca669ec --- /dev/null +++ b/docroot/sites/all/modules/features/music_review_content_type/music_review_content_type.features.field_instance.inc @@ -0,0 +1,373 @@ + 'music_review', + 'default_value' => NULL, + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'hidden', + 'module' => 'text', + 'settings' => array(), + 'type' => 'text_default', + 'weight' => 0, + ), + 'teaser' => array( + 'label' => 'hidden', + 'module' => 'text', + 'settings' => array( + 'trim_length' => 600, + ), + 'type' => 'text_summary_or_trimmed', + 'weight' => 0, + ), + ), + 'entity_type' => 'node', + 'field_name' => 'body', + 'label' => 'Body', + 'required' => FALSE, + 'settings' => array( + 'display_summary' => TRUE, + 'text_processing' => 1, + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'module' => 'text', + 'settings' => array( + 'rows' => 20, + 'summary_rows' => 5, + ), + 'type' => 'text_textarea_with_summary', + 'weight' => 5, + ), + ); + + // Exported field_instance: 'node-music_review-field_artist_performer'. + $field_instances['node-music_review-field_artist_performer'] = array( + 'bundle' => 'music_review', + 'default_value' => NULL, + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'text', + 'settings' => array(), + 'type' => 'text_default', + 'weight' => 1, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'display_label' => '', + 'entity_type' => 'node', + 'field_name' => 'field_artist_performer', + 'label' => 'Artist/Performer', + 'placeholder' => '', + 'required' => 1, + 'settings' => array( + 'better_formats' => array( + 'allowed_formats' => array( + 'filtered_html' => 'filtered_html', + 'filtered_html_with_tables' => 'filtered_html_with_tables', + 'full_html' => 'full_html', + 'php_code' => 'php_code', + 'plain_text' => 'plain_text', + 'simple_html' => 'simple_html', + ), + 'allowed_formats_toggle' => 0, + 'default_order_toggle' => 0, + 'default_order_wrapper' => array( + 'formats' => array( + 'filtered_html' => array( + 'weight' => -9, + ), + 'filtered_html_with_tables' => array( + 'weight' => -7, + ), + 'full_html' => array( + 'weight' => -6, + ), + 'php_code' => array( + 'weight' => -4, + ), + 'plain_text' => array( + 'weight' => -5, + ), + 'simple_html' => array( + 'weight' => -10, + ), + ), + ), + ), + 'linkit' => array( + 'enable' => 0, + 'insert_plugin' => '', + ), + 'text_processing' => 0, + 'user_register_form' => FALSE, + ), + 'use_title_as_placeholder' => 0, + 'widget' => array( + 'active' => 1, + 'module' => 'text', + 'settings' => array( + 'size' => 60, + ), + 'type' => 'text_textfield', + 'weight' => 0, + ), + 'workbench_access_field' => 0, + ); + + // Exported field_instance: 'node-music_review-field_catalog_link_music'. + $field_instances['node-music_review-field_catalog_link_music'] = array( + 'bundle' => 'music_review', + 'default_value' => NULL, + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'link', + 'settings' => array(), + 'type' => 'link_default', + 'weight' => 4, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'display_label' => '', + 'entity_type' => 'node', + 'field_name' => 'field_catalog_link_music', + 'label' => 'Catalog Link', + 'required' => 0, + 'settings' => array( + 'absolute_url' => 1, + 'attributes' => array( + 'class' => '', + 'configurable_class' => 0, + 'configurable_title' => 0, + 'rel' => '', + 'target' => 'default', + 'title' => '', + ), + 'display' => array( + 'url_cutoff' => 80, + ), + 'enable_tokens' => 1, + 'linkit' => array( + 'enable' => 0, + 'insert_plugin' => '', + ), + 'rel_remove' => 'default', + 'title' => 'none', + 'title_label_use_field_label' => 0, + 'title_maxlength' => 128, + 'title_value' => '', + 'url' => 0, + 'user_register_form' => FALSE, + 'validate_url' => 1, + ), + 'widget' => array( + 'active' => 0, + 'module' => 'link', + 'settings' => array(), + 'type' => 'link_field', + 'weight' => 4, + ), + 'workbench_access_field' => 0, + ); + + // Exported field_instance: 'node-music_review-field_genre_music'. + $field_instances['node-music_review-field_genre_music'] = array( + 'bundle' => 'music_review', + 'default_value' => NULL, + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'list', + 'settings' => array(), + 'type' => 'list_default', + 'weight' => 2, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'display_label' => '', + 'entity_type' => 'node', + 'field_name' => 'field_genre_music', + 'label' => 'Genre', + 'required' => 0, + 'settings' => array( + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'options', + 'settings' => array(), + 'type' => 'options_buttons', + 'weight' => 2, + ), + 'workbench_access_field' => 0, + ); + + // Exported field_instance: + // 'node-music_review-field_genre_other_option_music'. + $field_instances['node-music_review-field_genre_other_option_music'] = array( + 'bundle' => 'music_review', + 'default_value' => NULL, + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'text', + 'settings' => array(), + 'type' => 'text_default', + 'weight' => 3, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'display_label' => '', + 'entity_type' => 'node', + 'field_name' => 'field_genre_other_option_music', + 'label' => 'Genre other option', + 'placeholder' => 'Please Enter Genre', + 'required' => 0, + 'settings' => array( + 'better_formats' => array( + 'allowed_formats' => array( + 'filtered_html' => 'filtered_html', + 'filtered_html_with_tables' => 'filtered_html_with_tables', + 'full_html' => 'full_html', + 'php_code' => 'php_code', + 'plain_text' => 'plain_text', + 'simple_html' => 'simple_html', + ), + 'allowed_formats_toggle' => 0, + 'default_order_toggle' => 0, + 'default_order_wrapper' => array( + 'formats' => array( + 'filtered_html' => array( + 'weight' => -9, + ), + 'filtered_html_with_tables' => array( + 'weight' => -7, + ), + 'full_html' => array( + 'weight' => -6, + ), + 'php_code' => array( + 'weight' => -4, + ), + 'plain_text' => array( + 'weight' => -5, + ), + 'simple_html' => array( + 'weight' => -10, + ), + ), + ), + ), + 'linkit' => array( + 'enable' => 0, + 'insert_plugin' => '', + ), + 'text_processing' => 0, + 'user_register_form' => FALSE, + ), + 'use_title_as_placeholder' => 0, + 'widget' => array( + 'active' => 1, + 'module' => 'text', + 'settings' => array( + 'size' => 60, + ), + 'type' => 'text_textfield', + 'weight' => 3, + ), + 'workbench_access_field' => 0, + ); + + // Exported field_instance: 'node-music_review-field_please_select_one_music'. + $field_instances['node-music_review-field_please_select_one_music'] = array( + 'bundle' => 'music_review', + 'default_value' => NULL, + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'list', + 'settings' => array(), + 'type' => 'list_default', + 'weight' => 5, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'display_label' => '', + 'entity_type' => 'node', + 'field_name' => 'field_please_select_one_music', + 'label' => 'Please select one:', + 'required' => 0, + 'settings' => array( + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'options', + 'settings' => array(), + 'type' => 'options_buttons', + 'weight' => 6, + ), + 'workbench_access_field' => 0, + ); + + // Translatables + // Included for use with string extractors like potx. + t('Artist/Performer'); + t('Body'); + t('Catalog Link'); + t('Genre'); + t('Genre other option'); + t('Please select one:'); + + return $field_instances; +} diff --git a/docroot/sites/all/modules/features/music_review_content_type/music_review_content_type.features.inc b/docroot/sites/all/modules/features/music_review_content_type/music_review_content_type.features.inc new file mode 100644 index 00000000..fc72dd68 --- /dev/null +++ b/docroot/sites/all/modules/features/music_review_content_type/music_review_content_type.features.inc @@ -0,0 +1,32 @@ + "1"); + } +} + +/** + * Implements hook_node_info(). + */ +function music_review_content_type_node_info() { + $items = array( + 'music_review' => array( + 'name' => t('Music Review'), + 'base' => 'node_content', + 'description' => t('This content type is used for Music Review.'), + 'has_title' => '1', + 'title_label' => t('Title'), + 'help' => '', + ), + ); + drupal_alter('node_info', $items); + return $items; +} diff --git a/docroot/sites/all/modules/features/music_review_content_type/music_review_content_type.info b/docroot/sites/all/modules/features/music_review_content_type/music_review_content_type.info new file mode 100644 index 00000000..882be830 --- /dev/null +++ b/docroot/sites/all/modules/features/music_review_content_type/music_review_content_type.info @@ -0,0 +1,35 @@ +name = Music review content type +description = Music review content type fields +core = 7.x +package = Features +version = 7.x-1.0 +dependencies[] = ctools +dependencies[] = features +dependencies[] = link +dependencies[] = list +dependencies[] = node +dependencies[] = options +dependencies[] = program_and_activities_pages +dependencies[] = strongarm +dependencies[] = text +features[ctools][] = strongarm:strongarm:1 +features[features_api][] = api:2 +features[field_base][] = field_artist_performer +features[field_base][] = field_catalog_link_music +features[field_base][] = field_genre_music +features[field_base][] = field_genre_other_option_music +features[field_base][] = field_please_select_one_music +features[field_instance][] = node-music_review-body +features[field_instance][] = node-music_review-field_artist_performer +features[field_instance][] = node-music_review-field_catalog_link_music +features[field_instance][] = node-music_review-field_genre_music +features[field_instance][] = node-music_review-field_genre_other_option_music +features[field_instance][] = node-music_review-field_please_select_one_music +features[node][] = music_review +features[variable][] = field_bundle_settings_node__music_review +features[variable][] = menu_options_music_review +features[variable][] = menu_parent_music_review +features[variable][] = node_options_music_review +features[variable][] = node_preview_music_review +features[variable][] = node_submitted_music_review +project path = sites/all/modules/features diff --git a/docroot/sites/all/modules/features/music_review_content_type/music_review_content_type.module b/docroot/sites/all/modules/features/music_review_content_type/music_review_content_type.module new file mode 100644 index 00000000..08cc2c04 --- /dev/null +++ b/docroot/sites/all/modules/features/music_review_content_type/music_review_content_type.module @@ -0,0 +1,7 @@ +disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */ + $strongarm->api_version = 1; + $strongarm->name = 'field_bundle_settings_node__music_review'; + $strongarm->value = array( + 'view_modes' => array(), + 'extra_fields' => array( + 'form' => array( + 'title' => array( + 'weight' => '1', + ), + 'path' => array( + 'weight' => '7', + ), + ), + 'display' => array(), + ), + ); + $export['field_bundle_settings_node__music_review'] = $strongarm; + + $strongarm = new stdClass(); + $strongarm->disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */ + $strongarm->api_version = 1; + $strongarm->name = 'menu_options_music_review'; + $strongarm->value = array( + 0 => 'main-menu', + ); + $export['menu_options_music_review'] = $strongarm; + + $strongarm = new stdClass(); + $strongarm->disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */ + $strongarm->api_version = 1; + $strongarm->name = 'menu_parent_music_review'; + $strongarm->value = 'main-menu:0'; + $export['menu_parent_music_review'] = $strongarm; + + $strongarm = new stdClass(); + $strongarm->disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */ + $strongarm->api_version = 1; + $strongarm->name = 'node_options_music_review'; + $strongarm->value = array(); + $export['node_options_music_review'] = $strongarm; + + $strongarm = new stdClass(); + $strongarm->disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */ + $strongarm->api_version = 1; + $strongarm->name = 'node_preview_music_review'; + $strongarm->value = '1'; + $export['node_preview_music_review'] = $strongarm; + + $strongarm = new stdClass(); + $strongarm->disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */ + $strongarm->api_version = 1; + $strongarm->name = 'node_submitted_music_review'; + $strongarm->value = 1; + $export['node_submitted_music_review'] = $strongarm; + + return $export; +} diff --git a/docroot/sites/all/modules/features/music_review_listing_view/music_review_listing_view.features.inc b/docroot/sites/all/modules/features/music_review_listing_view/music_review_listing_view.features.inc new file mode 100755 index 00000000..c0489856 --- /dev/null +++ b/docroot/sites/all/modules/features/music_review_listing_view/music_review_listing_view.features.inc @@ -0,0 +1,12 @@ + "3.0"); +} diff --git a/docroot/sites/all/modules/features/music_review_listing_view/music_review_listing_view.info b/docroot/sites/all/modules/features/music_review_listing_view/music_review_listing_view.info new file mode 100755 index 00000000..120d127d --- /dev/null +++ b/docroot/sites/all/modules/features/music_review_listing_view/music_review_listing_view.info @@ -0,0 +1,11 @@ +name = Music Review listing view +description = Music Review listing view page +core = 7.x +package = Features +version = 7.x-1.1 +dependencies[] = ctools +dependencies[] = views +features[ctools][] = views:views_default:3.0 +features[features_api][] = api:2 +features[views_view][] = music_review_listing +project path = sites/all/modules/features diff --git a/docroot/sites/all/modules/features/music_review_listing_view/music_review_listing_view.module b/docroot/sites/all/modules/features/music_review_listing_view/music_review_listing_view.module new file mode 100755 index 00000000..3b4ce11f --- /dev/null +++ b/docroot/sites/all/modules/features/music_review_listing_view/music_review_listing_view.module @@ -0,0 +1,7 @@ +name = 'music_review_listing'; + $view->description = ''; + $view->tag = 'default'; + $view->base_table = 'node'; + $view->human_name = 'Music review listing'; + $view->core = 7; + $view->api_version = '3.0'; + $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */ + + /* Display: Master */ + $handler = $view->new_display('default', 'Master', 'default'); + $handler->display->display_options['title'] = 'Music review listing'; + $handler->display->display_options['use_more_always'] = FALSE; + $handler->display->display_options['access']['type'] = 'perm'; + $handler->display->display_options['cache']['type'] = 'none'; + $handler->display->display_options['query']['type'] = 'views_query'; + $handler->display->display_options['exposed_form']['type'] = 'basic'; + $handler->display->display_options['exposed_form']['options']['submit_button'] = 'Search'; + $handler->display->display_options['exposed_form']['options']['sort_asc_label'] = 'Ascending'; + $handler->display->display_options['exposed_form']['options']['sort_desc_label'] = 'Descending'; + $handler->display->display_options['pager']['type'] = 'full'; + $handler->display->display_options['pager']['options']['items_per_page'] = '10'; + $handler->display->display_options['style_plugin'] = 'default'; + $handler->display->display_options['row_plugin'] = 'node'; + /* Field: Content: Title */ + $handler->display->display_options['fields']['title']['id'] = 'title'; + $handler->display->display_options['fields']['title']['table'] = 'node'; + $handler->display->display_options['fields']['title']['field'] = 'title'; + $handler->display->display_options['fields']['title']['label'] = ''; + $handler->display->display_options['fields']['title']['alter']['word_boundary'] = FALSE; + $handler->display->display_options['fields']['title']['alter']['ellipsis'] = FALSE; + /* Sort criterion: Content: Post date */ + $handler->display->display_options['sorts']['created']['id'] = 'created'; + $handler->display->display_options['sorts']['created']['table'] = 'node'; + $handler->display->display_options['sorts']['created']['field'] = 'created'; + $handler->display->display_options['sorts']['created']['order'] = 'DESC'; + /* Filter criterion: Content: Published */ + $handler->display->display_options['filters']['status']['id'] = 'status'; + $handler->display->display_options['filters']['status']['table'] = 'node'; + $handler->display->display_options['filters']['status']['field'] = 'status'; + $handler->display->display_options['filters']['status']['value'] = 1; + $handler->display->display_options['filters']['status']['group'] = 1; + $handler->display->display_options['filters']['status']['expose']['operator'] = FALSE; + /* Filter criterion: Content: Type */ + $handler->display->display_options['filters']['type']['id'] = 'type'; + $handler->display->display_options['filters']['type']['table'] = 'node'; + $handler->display->display_options['filters']['type']['field'] = 'type'; + $handler->display->display_options['filters']['type']['value'] = array( + 'music_review' => 'music_review', + ); + + /* Display: Page */ + $handler = $view->new_display('page', 'Page', 'page'); + $handler->display->display_options['defaults']['pager'] = FALSE; + $handler->display->display_options['pager']['type'] = 'full'; + $handler->display->display_options['pager']['options']['items_per_page'] = '10'; + $handler->display->display_options['pager']['options']['offset'] = '0'; + $handler->display->display_options['pager']['options']['id'] = '0'; + $handler->display->display_options['pager']['options']['quantity'] = '9'; + $handler->display->display_options['pager']['options']['expose']['items_per_page'] = TRUE; + $handler->display->display_options['pager']['options']['expose']['items_per_page_options'] = '10, 20, 30'; + $handler->display->display_options['defaults']['style_plugin'] = FALSE; + $handler->display->display_options['style_plugin'] = 'default'; + $handler->display->display_options['defaults']['style_options'] = FALSE; + $handler->display->display_options['defaults']['row_plugin'] = FALSE; + $handler->display->display_options['row_plugin'] = 'fields'; + $handler->display->display_options['row_options']['inline'] = array( + 'title' => 'title', + 'counter' => 'counter', + ); + $handler->display->display_options['defaults']['row_options'] = FALSE; + $handler->display->display_options['defaults']['header'] = FALSE; + /* Header: Global: Text area */ + $handler->display->display_options['header']['area']['id'] = 'area'; + $handler->display->display_options['header']['area']['table'] = 'views'; + $handler->display->display_options['header']['area']['field'] = 'area'; + $handler->display->display_options['header']['area']['content'] = '

        Reviews & Booklists

        + +

        Music Reviews

        '; + $handler->display->display_options['header']['area']['format'] = 'full_html'; + $handler->display->display_options['defaults']['relationships'] = FALSE; + /* Relationship: Content: Author */ + $handler->display->display_options['relationships']['uid']['id'] = 'uid'; + $handler->display->display_options['relationships']['uid']['table'] = 'node'; + $handler->display->display_options['relationships']['uid']['field'] = 'uid'; + /* Relationship: Flags: like counter */ + $handler->display->display_options['relationships']['flag_count_rel']['id'] = 'flag_count_rel'; + $handler->display->display_options['relationships']['flag_count_rel']['table'] = 'node'; + $handler->display->display_options['relationships']['flag_count_rel']['field'] = 'flag_count_rel'; + $handler->display->display_options['relationships']['flag_count_rel']['required'] = 0; + $handler->display->display_options['relationships']['flag_count_rel']['flag'] = 'like'; + /* Relationship: Flags: like */ + $handler->display->display_options['relationships']['flag_content_rel']['id'] = 'flag_content_rel'; + $handler->display->display_options['relationships']['flag_content_rel']['table'] = 'node'; + $handler->display->display_options['relationships']['flag_content_rel']['field'] = 'flag_content_rel'; + $handler->display->display_options['relationships']['flag_content_rel']['required'] = 0; + $handler->display->display_options['relationships']['flag_content_rel']['flag'] = 'like'; + $handler->display->display_options['relationships']['flag_content_rel']['user_scope'] = 'any'; + /* Relationship: User: Profile */ + $handler->display->display_options['relationships']['profile']['id'] = 'profile'; + $handler->display->display_options['relationships']['profile']['table'] = 'users'; + $handler->display->display_options['relationships']['profile']['field'] = 'profile'; + $handler->display->display_options['relationships']['profile']['relationship'] = 'uid'; + $handler->display->display_options['relationships']['profile']['bundle_types'] = array( + 'main' => 'main', + ); + $handler->display->display_options['defaults']['fields'] = FALSE; + /* Field: Global: View result counter */ + $handler->display->display_options['fields']['counter']['id'] = 'counter'; + $handler->display->display_options['fields']['counter']['table'] = 'views'; + $handler->display->display_options['fields']['counter']['field'] = 'counter'; + $handler->display->display_options['fields']['counter']['label'] = ''; + $handler->display->display_options['fields']['counter']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['counter']['counter_start'] = '1'; + $handler->display->display_options['fields']['counter']['reverse'] = 0; + /* Field: Content: Title */ + $handler->display->display_options['fields']['title']['id'] = 'title'; + $handler->display->display_options['fields']['title']['table'] = 'node'; + $handler->display->display_options['fields']['title']['field'] = 'title'; + $handler->display->display_options['fields']['title']['label'] = ''; + $handler->display->display_options['fields']['title']['alter']['word_boundary'] = FALSE; + $handler->display->display_options['fields']['title']['alter']['ellipsis'] = FALSE; + $handler->display->display_options['fields']['title']['element_label_colon'] = FALSE; + /* Field: Flags: Flag counter */ + $handler->display->display_options['fields']['count']['id'] = 'count'; + $handler->display->display_options['fields']['count']['table'] = 'flag_counts'; + $handler->display->display_options['fields']['count']['field'] = 'count'; + $handler->display->display_options['fields']['count']['relationship'] = 'flag_count_rel'; + $handler->display->display_options['fields']['count']['label'] = 'Likes'; + /* Field: Content: Artist/Performer */ + $handler->display->display_options['fields']['field_artist_performer']['id'] = 'field_artist_performer'; + $handler->display->display_options['fields']['field_artist_performer']['table'] = 'field_data_field_artist_performer'; + $handler->display->display_options['fields']['field_artist_performer']['field'] = 'field_artist_performer'; + $handler->display->display_options['fields']['field_artist_performer']['label'] = ''; + $handler->display->display_options['fields']['field_artist_performer']['alter']['alter_text'] = TRUE; + $handler->display->display_options['fields']['field_artist_performer']['alter']['text'] = 'Artist: [field_artist_performer]'; + $handler->display->display_options['fields']['field_artist_performer']['element_label_colon'] = FALSE; + /* Field: Content: Genre */ + $handler->display->display_options['fields']['field_genre_music']['id'] = 'field_genre_music'; + $handler->display->display_options['fields']['field_genre_music']['table'] = 'field_data_field_genre_music'; + $handler->display->display_options['fields']['field_genre_music']['field'] = 'field_genre_music'; + $handler->display->display_options['fields']['field_genre_music']['label'] = ''; + $handler->display->display_options['fields']['field_genre_music']['exclude'] = TRUE; + $handler->display->display_options['fields']['field_genre_music']['element_label_colon'] = FALSE; + /* Field: Content: Genre other option */ + $handler->display->display_options['fields']['field_genre_other_option_music']['id'] = 'field_genre_other_option_music'; + $handler->display->display_options['fields']['field_genre_other_option_music']['table'] = 'field_data_field_genre_other_option_music'; + $handler->display->display_options['fields']['field_genre_other_option_music']['field'] = 'field_genre_other_option_music'; + $handler->display->display_options['fields']['field_genre_other_option_music']['label'] = ''; + $handler->display->display_options['fields']['field_genre_other_option_music']['exclude'] = TRUE; + $handler->display->display_options['fields']['field_genre_other_option_music']['alter']['alter_text'] = TRUE; + $handler->display->display_options['fields']['field_genre_other_option_music']['alter']['text'] = 'Genre: [field_genre_other_option_music-value]'; + $handler->display->display_options['fields']['field_genre_other_option_music']['element_label_colon'] = FALSE; + /* Field: Global: PHP */ + $handler->display->display_options['fields']['php']['id'] = 'php'; + $handler->display->display_options['fields']['php']['table'] = 'views'; + $handler->display->display_options['fields']['php']['field'] = 'php'; + $handler->display->display_options['fields']['php']['label'] = ''; + $handler->display->display_options['fields']['php']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['php']['use_php_setup'] = 0; + $handler->display->display_options['fields']['php']['php_output'] = 'field_field_genre_music[0][\'rendered\'][\'#markup\']; +$other_option_val = $data->field_field_genre_music[0][\'rendered\'][\'#markup\']; +$other_option_value = $data->field_field_genre_other_option_music[0][\'rendered\'][\'#markup\']; + +if(isset($other_option_val)){ +if($other_option_val == \'Other\'){ +echo \'Genre: \'.$other_option_value; +}else{ +echo \'Genre: \'.$value; +} +} + +?>'; + $handler->display->display_options['fields']['php']['use_php_click_sortable'] = '0'; + $handler->display->display_options['fields']['php']['php_click_sortable'] = ''; + /* Field: Content: Catalog Link */ + $handler->display->display_options['fields']['field_catalog_link_music']['id'] = 'field_catalog_link_music'; + $handler->display->display_options['fields']['field_catalog_link_music']['table'] = 'field_data_field_catalog_link_music'; + $handler->display->display_options['fields']['field_catalog_link_music']['field'] = 'field_catalog_link_music'; + $handler->display->display_options['fields']['field_catalog_link_music']['label'] = ''; + $handler->display->display_options['fields']['field_catalog_link_music']['alter']['alter_text'] = TRUE; + $handler->display->display_options['fields']['field_catalog_link_music']['alter']['text'] = 'Catalog Link: [field_catalog_link_music]'; + $handler->display->display_options['fields']['field_catalog_link_music']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['field_catalog_link_music']['click_sort_column'] = 'url'; + $handler->display->display_options['fields']['field_catalog_link_music']['type'] = 'link_url'; + /* Field: Content: Please select one: */ + $handler->display->display_options['fields']['field_please_select_one_music']['id'] = 'field_please_select_one_music'; + $handler->display->display_options['fields']['field_please_select_one_music']['table'] = 'field_data_field_please_select_one_music'; + $handler->display->display_options['fields']['field_please_select_one_music']['field'] = 'field_please_select_one_music'; + $handler->display->display_options['fields']['field_please_select_one_music']['label'] = ''; + $handler->display->display_options['fields']['field_please_select_one_music']['exclude'] = TRUE; + $handler->display->display_options['fields']['field_please_select_one_music']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['field_please_select_one_music']['type'] = 'list_key'; + /* Field: Global: PHP */ + $handler->display->display_options['fields']['php_1']['id'] = 'php_1'; + $handler->display->display_options['fields']['php_1']['table'] = 'views'; + $handler->display->display_options['fields']['php_1']['field'] = 'php'; + $handler->display->display_options['fields']['php_1']['label'] = ''; + $handler->display->display_options['fields']['php_1']['exclude'] = TRUE; + $handler->display->display_options['fields']['php_1']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['php_1']['use_php_setup'] = 0; + $handler->display->display_options['fields']['php_1']['php_output'] = '_field_data[\'nid\'][\'entity\']; +$privacy_key = $privacy->field_please_select_one_music[LANGUAGE_NONE][0][\'value\']; +if($privacy_key == \'public\'){ +print \'Reviewed by \'; +} + +?>'; + $handler->display->display_options['fields']['php_1']['use_php_click_sortable'] = '0'; + $handler->display->display_options['fields']['php_1']['php_click_sortable'] = ''; + /* Field: Profile: Avatar image */ + $handler->display->display_options['fields']['field_user_avatar']['id'] = 'field_user_avatar'; + $handler->display->display_options['fields']['field_user_avatar']['table'] = 'field_data_field_user_avatar'; + $handler->display->display_options['fields']['field_user_avatar']['field'] = 'field_user_avatar'; + $handler->display->display_options['fields']['field_user_avatar']['relationship'] = 'profile'; + $handler->display->display_options['fields']['field_user_avatar']['label'] = ''; + $handler->display->display_options['fields']['field_user_avatar']['exclude'] = TRUE; + $handler->display->display_options['fields']['field_user_avatar']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['field_user_avatar']['type'] = 'entityreference_entity_view'; + $handler->display->display_options['fields']['field_user_avatar']['settings'] = array( + 'view_mode' => 'teaser', + 'links' => 1, + ); + /* Field: User: Uid */ + $handler->display->display_options['fields']['uid']['id'] = 'uid'; + $handler->display->display_options['fields']['uid']['table'] = 'users'; + $handler->display->display_options['fields']['uid']['field'] = 'uid'; + $handler->display->display_options['fields']['uid']['relationship'] = 'uid'; + $handler->display->display_options['fields']['uid']['label'] = ''; + $handler->display->display_options['fields']['uid']['exclude'] = TRUE; + $handler->display->display_options['fields']['uid']['element_label_colon'] = FALSE; + /* Field: Global: PHP */ + $handler->display->display_options['fields']['php_2']['id'] = 'php_2'; + $handler->display->display_options['fields']['php_2']['table'] = 'views'; + $handler->display->display_options['fields']['php_2']['field'] = 'php'; + $handler->display->display_options['fields']['php_2']['label'] = ''; + $handler->display->display_options['fields']['php_2']['exclude'] = TRUE; + $handler->display->display_options['fields']['php_2']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['php_2']['use_php_setup'] = 0; + $handler->display->display_options['fields']['php_2']['php_output'] = 'field_user_avatar; + +$query = db_select(\'field_data_field_user_avatar\',\'avatar\') +->fields(\'avatar\',array(\'field_user_avatar_target_id\')) +->condition(\'entity_id\',$img_id) +->execute() +->fetchAssoc(); + +$image_id = $query[\'field_user_avatar_target_id\']; + +$query = db_select(\'field_data_field_avatar_image\', \'t\'); +$query->join(\'file_managed\', \'n\', \'n.fid = t.field_avatar_image_fid\'); +$result = $query + ->fields(\'n\', array(\'uri\')) + ->condition(\'t.entity_id\', $image_id) + ->execute(); + +$img_uri = $result->fetchObject(); +$img_uri = $img_uri->uri; +$style = \'avatar_style\'; +$img_path = image_style_url($style, $img_uri); + +$img = ""; + +$privacy = $data->_field_data[\'nid\'][\'entity\']; +$privacy_key = $privacy->field_please_select_one_music[LANGUAGE_NONE][0][\'value\']; + +if(isset($img_uri)){ + if($privacy_key == \'public\'){ + print $img; + } +} +?>'; + $handler->display->display_options['fields']['php_2']['use_php_click_sortable'] = '0'; + $handler->display->display_options['fields']['php_2']['php_click_sortable'] = ''; + /* Field: User: Name */ + $handler->display->display_options['fields']['name']['id'] = 'name'; + $handler->display->display_options['fields']['name']['table'] = 'users'; + $handler->display->display_options['fields']['name']['field'] = 'name'; + $handler->display->display_options['fields']['name']['relationship'] = 'uid'; + $handler->display->display_options['fields']['name']['label'] = ''; + $handler->display->display_options['fields']['name']['exclude'] = TRUE; + $handler->display->display_options['fields']['name']['element_label_colon'] = FALSE; + /* Field: Global: PHP */ + $handler->display->display_options['fields']['php_3']['id'] = 'php_3'; + $handler->display->display_options['fields']['php_3']['table'] = 'views'; + $handler->display->display_options['fields']['php_3']['field'] = 'php'; + $handler->display->display_options['fields']['php_3']['label'] = ''; + $handler->display->display_options['fields']['php_3']['exclude'] = TRUE; + $handler->display->display_options['fields']['php_3']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['php_3']['use_php_setup'] = 0; + $handler->display->display_options['fields']['php_3']['php_output'] = '_field_data[\'nid\'][\'entity\']; +$privacy_key = $privacy->field_please_select_one_music[LANGUAGE_NONE][0][\'value\']; +if($privacy_key == \'public\'){ +echo "uid>".$row->name.""; +} + +?>'; + $handler->display->display_options['fields']['php_3']['use_php_click_sortable'] = '0'; + $handler->display->display_options['fields']['php_3']['php_click_sortable'] = ''; + /* Field: Global: Custom text */ + $handler->display->display_options['fields']['nothing']['id'] = 'nothing'; + $handler->display->display_options['fields']['nothing']['table'] = 'views'; + $handler->display->display_options['fields']['nothing']['field'] = 'nothing'; + $handler->display->display_options['fields']['nothing']['label'] = ''; + $handler->display->display_options['fields']['nothing']['alter']['text'] = '
        [php_1]
        [php_2]
        [php_3]
        '; + $handler->display->display_options['fields']['nothing']['element_label_colon'] = FALSE; + /* Field: Content: Post date */ + $handler->display->display_options['fields']['created']['id'] = 'created'; + $handler->display->display_options['fields']['created']['table'] = 'node'; + $handler->display->display_options['fields']['created']['field'] = 'created'; + $handler->display->display_options['fields']['created']['label'] = ''; + $handler->display->display_options['fields']['created']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['created']['date_format'] = 'custom'; + $handler->display->display_options['fields']['created']['custom_date_format'] = 'M d, Y'; + $handler->display->display_options['fields']['created']['second_date_format'] = 'privatemsg_current_day'; + /* Field: Content: Body */ + $handler->display->display_options['fields']['body']['id'] = 'body'; + $handler->display->display_options['fields']['body']['table'] = 'field_data_body'; + $handler->display->display_options['fields']['body']['field'] = 'body'; + $handler->display->display_options['fields']['body']['label'] = ''; + $handler->display->display_options['fields']['body']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['body']['type'] = 'text_trimmed'; + $handler->display->display_options['fields']['body']['settings'] = array( + 'trim_length' => '200', + ); + /* Field: Content: Link */ + $handler->display->display_options['fields']['view_node']['id'] = 'view_node'; + $handler->display->display_options['fields']['view_node']['table'] = 'views_entity_node'; + $handler->display->display_options['fields']['view_node']['field'] = 'view_node'; + $handler->display->display_options['fields']['view_node']['label'] = ''; + $handler->display->display_options['fields']['view_node']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['view_node']['text'] = 'View full review'; + $handler->display->display_options['defaults']['sorts'] = FALSE; + /* Sort criterion: Content: Post date */ + $handler->display->display_options['sorts']['created']['id'] = 'created'; + $handler->display->display_options['sorts']['created']['table'] = 'node'; + $handler->display->display_options['sorts']['created']['field'] = 'created'; + $handler->display->display_options['sorts']['created']['order'] = 'DESC'; + /* Sort criterion: Content: Post date */ + $handler->display->display_options['sorts']['created_1']['id'] = 'created_1'; + $handler->display->display_options['sorts']['created_1']['table'] = 'node'; + $handler->display->display_options['sorts']['created_1']['field'] = 'created'; + $handler->display->display_options['sorts']['created_1']['exposed'] = TRUE; + $handler->display->display_options['sorts']['created_1']['expose']['label'] = 'Post date'; + $handler->display->display_options['sorts']['created_1']['granularity'] = 'day'; + $handler->display->display_options['defaults']['filter_groups'] = FALSE; + $handler->display->display_options['defaults']['filters'] = FALSE; + /* Filter criterion: Content: Published */ + $handler->display->display_options['filters']['status']['id'] = 'status'; + $handler->display->display_options['filters']['status']['table'] = 'node'; + $handler->display->display_options['filters']['status']['field'] = 'status'; + $handler->display->display_options['filters']['status']['value'] = 1; + $handler->display->display_options['filters']['status']['group'] = 1; + $handler->display->display_options['filters']['status']['expose']['operator'] = FALSE; + /* Filter criterion: Content: Type */ + $handler->display->display_options['filters']['type']['id'] = 'type'; + $handler->display->display_options['filters']['type']['table'] = 'node'; + $handler->display->display_options['filters']['type']['field'] = 'type'; + $handler->display->display_options['filters']['type']['value'] = array( + 'music_review' => 'music_review', + ); + $handler->display->display_options['filters']['type']['group'] = 1; + /* Filter criterion: Search: Search Terms */ + $handler->display->display_options['filters']['keys']['id'] = 'keys'; + $handler->display->display_options['filters']['keys']['table'] = 'search_index'; + $handler->display->display_options['filters']['keys']['field'] = 'keys'; + $handler->display->display_options['filters']['keys']['group'] = 1; + $handler->display->display_options['filters']['keys']['exposed'] = TRUE; + $handler->display->display_options['filters']['keys']['expose']['operator_id'] = 'keys_op'; + $handler->display->display_options['filters']['keys']['expose']['label'] = 'Search'; + $handler->display->display_options['filters']['keys']['expose']['operator'] = 'keys_op'; + $handler->display->display_options['filters']['keys']['expose']['identifier'] = 'keys'; + $handler->display->display_options['filters']['keys']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + /* Filter criterion: User: Name (raw) */ + $handler->display->display_options['filters']['name']['id'] = 'name'; + $handler->display->display_options['filters']['name']['table'] = 'users'; + $handler->display->display_options['filters']['name']['field'] = 'name'; + $handler->display->display_options['filters']['name']['relationship'] = 'uid'; + $handler->display->display_options['filters']['name']['operator'] = 'contains'; + $handler->display->display_options['filters']['name']['group'] = 1; + $handler->display->display_options['filters']['name']['exposed'] = TRUE; + $handler->display->display_options['filters']['name']['expose']['operator_id'] = 'name_op'; + $handler->display->display_options['filters']['name']['expose']['label'] = 'Reviewer'; + $handler->display->display_options['filters']['name']['expose']['operator'] = 'name_op'; + $handler->display->display_options['filters']['name']['expose']['identifier'] = 'name'; + $handler->display->display_options['filters']['name']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + /* Filter criterion: Content: Title */ + $handler->display->display_options['filters']['title']['id'] = 'title'; + $handler->display->display_options['filters']['title']['table'] = 'node'; + $handler->display->display_options['filters']['title']['field'] = 'title'; + $handler->display->display_options['filters']['title']['operator'] = 'contains'; + $handler->display->display_options['filters']['title']['group'] = 1; + $handler->display->display_options['filters']['title']['exposed'] = TRUE; + $handler->display->display_options['filters']['title']['expose']['operator_id'] = 'title_op'; + $handler->display->display_options['filters']['title']['expose']['label'] = 'by Title'; + $handler->display->display_options['filters']['title']['expose']['operator'] = 'title_op'; + $handler->display->display_options['filters']['title']['expose']['identifier'] = 'title'; + $handler->display->display_options['filters']['title']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + /* Filter criterion: Content: Please select one: (field_please_select_one_music) */ + $handler->display->display_options['filters']['field_please_select_one_music_value']['id'] = 'field_please_select_one_music_value'; + $handler->display->display_options['filters']['field_please_select_one_music_value']['table'] = 'field_data_field_please_select_one_music'; + $handler->display->display_options['filters']['field_please_select_one_music_value']['field'] = 'field_please_select_one_music_value'; + $handler->display->display_options['filters']['field_please_select_one_music_value']['value'] = array( + 'public' => 'public', + 'publicnoname' => 'publicnoname', + ); + $handler->display->display_options['filters']['field_please_select_one_music_value']['group'] = 1; + /* Filter criterion: Content: Artist/Performer (field_artist_performer) */ + $handler->display->display_options['filters']['field_artist_performer_value']['id'] = 'field_artist_performer_value'; + $handler->display->display_options['filters']['field_artist_performer_value']['table'] = 'field_data_field_artist_performer'; + $handler->display->display_options['filters']['field_artist_performer_value']['field'] = 'field_artist_performer_value'; + $handler->display->display_options['filters']['field_artist_performer_value']['operator'] = 'contains'; + $handler->display->display_options['filters']['field_artist_performer_value']['group'] = 1; + $handler->display->display_options['filters']['field_artist_performer_value']['exposed'] = TRUE; + $handler->display->display_options['filters']['field_artist_performer_value']['expose']['operator_id'] = 'field_artist_performer_value_op'; + $handler->display->display_options['filters']['field_artist_performer_value']['expose']['label'] = 'By Artist'; + $handler->display->display_options['filters']['field_artist_performer_value']['expose']['operator'] = 'field_artist_performer_value_op'; + $handler->display->display_options['filters']['field_artist_performer_value']['expose']['identifier'] = 'field_artist_performer_value'; + $handler->display->display_options['filters']['field_artist_performer_value']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + /* Filter criterion: Content: Genre (field_genre_music) */ + $handler->display->display_options['filters']['field_genre_music_value']['id'] = 'field_genre_music_value'; + $handler->display->display_options['filters']['field_genre_music_value']['table'] = 'field_data_field_genre_music'; + $handler->display->display_options['filters']['field_genre_music_value']['field'] = 'field_genre_music_value'; + $handler->display->display_options['filters']['field_genre_music_value']['group'] = 1; + $handler->display->display_options['filters']['field_genre_music_value']['exposed'] = TRUE; + $handler->display->display_options['filters']['field_genre_music_value']['expose']['operator_id'] = 'field_genre_music_value_op'; + $handler->display->display_options['filters']['field_genre_music_value']['expose']['label'] = 'By Genre'; + $handler->display->display_options['filters']['field_genre_music_value']['expose']['operator'] = 'field_genre_music_value_op'; + $handler->display->display_options['filters']['field_genre_music_value']['expose']['identifier'] = 'field_genre_music_value'; + $handler->display->display_options['filters']['field_genre_music_value']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + $handler->display->display_options['path'] = 'music-review-listing'; + + /* Display: Staff */ + $handler = $view->new_display('page', 'Staff', 'page_1'); + $handler->display->display_options['defaults']['pager'] = FALSE; + $handler->display->display_options['pager']['type'] = 'full'; + $handler->display->display_options['pager']['options']['items_per_page'] = '10'; + $handler->display->display_options['pager']['options']['offset'] = '0'; + $handler->display->display_options['pager']['options']['id'] = '0'; + $handler->display->display_options['pager']['options']['quantity'] = '9'; + $handler->display->display_options['pager']['options']['expose']['items_per_page'] = TRUE; + $handler->display->display_options['pager']['options']['expose']['items_per_page_options'] = '10, 20, 30'; + $handler->display->display_options['defaults']['style_plugin'] = FALSE; + $handler->display->display_options['style_plugin'] = 'default'; + $handler->display->display_options['defaults']['style_options'] = FALSE; + $handler->display->display_options['defaults']['row_plugin'] = FALSE; + $handler->display->display_options['row_plugin'] = 'fields'; + $handler->display->display_options['row_options']['inline'] = array( + 'title' => 'title', + 'counter' => 'counter', + ); + $handler->display->display_options['defaults']['row_options'] = FALSE; + $handler->display->display_options['defaults']['header'] = FALSE; + /* Header: Global: Text area */ + $handler->display->display_options['header']['area']['id'] = 'area'; + $handler->display->display_options['header']['area']['table'] = 'views'; + $handler->display->display_options['header']['area']['field'] = 'area'; + $handler->display->display_options['header']['area']['content'] = '

        Reviews & Booklists

        + +

        Music Reviews

        '; + $handler->display->display_options['header']['area']['format'] = 'simple_html'; + $handler->display->display_options['defaults']['relationships'] = FALSE; + /* Relationship: Content: Author */ + $handler->display->display_options['relationships']['uid']['id'] = 'uid'; + $handler->display->display_options['relationships']['uid']['table'] = 'node'; + $handler->display->display_options['relationships']['uid']['field'] = 'uid'; + /* Relationship: Flags: like counter */ + $handler->display->display_options['relationships']['flag_count_rel']['id'] = 'flag_count_rel'; + $handler->display->display_options['relationships']['flag_count_rel']['table'] = 'node'; + $handler->display->display_options['relationships']['flag_count_rel']['field'] = 'flag_count_rel'; + $handler->display->display_options['relationships']['flag_count_rel']['required'] = 0; + $handler->display->display_options['relationships']['flag_count_rel']['flag'] = 'like'; + /* Relationship: Flags: like */ + $handler->display->display_options['relationships']['flag_content_rel']['id'] = 'flag_content_rel'; + $handler->display->display_options['relationships']['flag_content_rel']['table'] = 'node'; + $handler->display->display_options['relationships']['flag_content_rel']['field'] = 'flag_content_rel'; + $handler->display->display_options['relationships']['flag_content_rel']['required'] = 0; + $handler->display->display_options['relationships']['flag_content_rel']['flag'] = 'like'; + $handler->display->display_options['relationships']['flag_content_rel']['user_scope'] = 'any'; + /* Relationship: User: Profile */ + $handler->display->display_options['relationships']['profile']['id'] = 'profile'; + $handler->display->display_options['relationships']['profile']['table'] = 'users'; + $handler->display->display_options['relationships']['profile']['field'] = 'profile'; + $handler->display->display_options['relationships']['profile']['relationship'] = 'uid'; + $handler->display->display_options['relationships']['profile']['bundle_types'] = array( + 'main' => 'main', + ); + $handler->display->display_options['defaults']['fields'] = FALSE; + /* Field: Global: View result counter */ + $handler->display->display_options['fields']['counter']['id'] = 'counter'; + $handler->display->display_options['fields']['counter']['table'] = 'views'; + $handler->display->display_options['fields']['counter']['field'] = 'counter'; + $handler->display->display_options['fields']['counter']['label'] = ''; + $handler->display->display_options['fields']['counter']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['counter']['counter_start'] = '1'; + $handler->display->display_options['fields']['counter']['reverse'] = 0; + /* Field: Content: Title */ + $handler->display->display_options['fields']['title']['id'] = 'title'; + $handler->display->display_options['fields']['title']['table'] = 'node'; + $handler->display->display_options['fields']['title']['field'] = 'title'; + $handler->display->display_options['fields']['title']['label'] = ''; + $handler->display->display_options['fields']['title']['alter']['word_boundary'] = FALSE; + $handler->display->display_options['fields']['title']['alter']['ellipsis'] = FALSE; + $handler->display->display_options['fields']['title']['element_label_colon'] = FALSE; + /* Field: Flags: Flag counter */ + $handler->display->display_options['fields']['count']['id'] = 'count'; + $handler->display->display_options['fields']['count']['table'] = 'flag_counts'; + $handler->display->display_options['fields']['count']['field'] = 'count'; + $handler->display->display_options['fields']['count']['relationship'] = 'flag_count_rel'; + $handler->display->display_options['fields']['count']['label'] = 'Likes'; + /* Field: Content: Artist/Performer */ + $handler->display->display_options['fields']['field_artist_performer']['id'] = 'field_artist_performer'; + $handler->display->display_options['fields']['field_artist_performer']['table'] = 'field_data_field_artist_performer'; + $handler->display->display_options['fields']['field_artist_performer']['field'] = 'field_artist_performer'; + $handler->display->display_options['fields']['field_artist_performer']['label'] = ''; + $handler->display->display_options['fields']['field_artist_performer']['alter']['alter_text'] = TRUE; + $handler->display->display_options['fields']['field_artist_performer']['alter']['text'] = 'Artist: [field_artist_performer]'; + $handler->display->display_options['fields']['field_artist_performer']['element_label_colon'] = FALSE; + /* Field: Content: Genre */ + $handler->display->display_options['fields']['field_genre_music']['id'] = 'field_genre_music'; + $handler->display->display_options['fields']['field_genre_music']['table'] = 'field_data_field_genre_music'; + $handler->display->display_options['fields']['field_genre_music']['field'] = 'field_genre_music'; + $handler->display->display_options['fields']['field_genre_music']['label'] = ''; + $handler->display->display_options['fields']['field_genre_music']['exclude'] = TRUE; + $handler->display->display_options['fields']['field_genre_music']['element_label_colon'] = FALSE; + /* Field: Content: Genre other option */ + $handler->display->display_options['fields']['field_genre_other_option_music']['id'] = 'field_genre_other_option_music'; + $handler->display->display_options['fields']['field_genre_other_option_music']['table'] = 'field_data_field_genre_other_option_music'; + $handler->display->display_options['fields']['field_genre_other_option_music']['field'] = 'field_genre_other_option_music'; + $handler->display->display_options['fields']['field_genre_other_option_music']['label'] = ''; + $handler->display->display_options['fields']['field_genre_other_option_music']['exclude'] = TRUE; + $handler->display->display_options['fields']['field_genre_other_option_music']['alter']['alter_text'] = TRUE; + $handler->display->display_options['fields']['field_genre_other_option_music']['alter']['text'] = 'Genre: [field_genre_other_option_music-value]'; + $handler->display->display_options['fields']['field_genre_other_option_music']['element_label_colon'] = FALSE; + /* Field: Global: PHP */ + $handler->display->display_options['fields']['php']['id'] = 'php'; + $handler->display->display_options['fields']['php']['table'] = 'views'; + $handler->display->display_options['fields']['php']['field'] = 'php'; + $handler->display->display_options['fields']['php']['label'] = ''; + $handler->display->display_options['fields']['php']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['php']['use_php_setup'] = 0; + $handler->display->display_options['fields']['php']['php_output'] = 'field_field_genre_music[0][\'rendered\'][\'#markup\']; +$other_option_val = $data->field_field_genre_music[0][\'rendered\'][\'#markup\']; +$other_option_value = $data->field_field_genre_other_option_music[0][\'rendered\'][\'#markup\']; + +if(isset($other_option_val)){ +if($other_option_val == \'Other\'){ +echo \'Genre: \'.$other_option_value; +}else{ +echo \'Genre: \'.$value; +} +} + +?>'; + $handler->display->display_options['fields']['php']['use_php_click_sortable'] = '0'; + $handler->display->display_options['fields']['php']['php_click_sortable'] = ''; + /* Field: Content: Catalog Link */ + $handler->display->display_options['fields']['field_catalog_link_music']['id'] = 'field_catalog_link_music'; + $handler->display->display_options['fields']['field_catalog_link_music']['table'] = 'field_data_field_catalog_link_music'; + $handler->display->display_options['fields']['field_catalog_link_music']['field'] = 'field_catalog_link_music'; + $handler->display->display_options['fields']['field_catalog_link_music']['label'] = ''; + $handler->display->display_options['fields']['field_catalog_link_music']['alter']['alter_text'] = TRUE; + $handler->display->display_options['fields']['field_catalog_link_music']['alter']['text'] = 'Catalog Link: [field_catalog_link_music]'; + $handler->display->display_options['fields']['field_catalog_link_music']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['field_catalog_link_music']['click_sort_column'] = 'url'; + $handler->display->display_options['fields']['field_catalog_link_music']['type'] = 'link_url'; + /* Field: Content: Please select one: */ + $handler->display->display_options['fields']['field_please_select_one_music']['id'] = 'field_please_select_one_music'; + $handler->display->display_options['fields']['field_please_select_one_music']['table'] = 'field_data_field_please_select_one_music'; + $handler->display->display_options['fields']['field_please_select_one_music']['field'] = 'field_please_select_one_music'; + $handler->display->display_options['fields']['field_please_select_one_music']['label'] = ''; + $handler->display->display_options['fields']['field_please_select_one_music']['exclude'] = TRUE; + $handler->display->display_options['fields']['field_please_select_one_music']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['field_please_select_one_music']['type'] = 'list_key'; + /* Field: Global: PHP */ + $handler->display->display_options['fields']['php_1']['id'] = 'php_1'; + $handler->display->display_options['fields']['php_1']['table'] = 'views'; + $handler->display->display_options['fields']['php_1']['field'] = 'php'; + $handler->display->display_options['fields']['php_1']['label'] = ''; + $handler->display->display_options['fields']['php_1']['exclude'] = TRUE; + $handler->display->display_options['fields']['php_1']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['php_1']['use_php_setup'] = 0; + $handler->display->display_options['fields']['php_1']['php_output'] = '_field_data[\'nid\'][\'entity\']; +$privacy_key = $privacy->field_please_select_one_music[LANGUAGE_NONE][0][\'value\']; +if($privacy_key == \'public\'){ +print \'Reviewed by \'; +} + +?>'; + $handler->display->display_options['fields']['php_1']['use_php_click_sortable'] = '0'; + $handler->display->display_options['fields']['php_1']['php_click_sortable'] = ''; + /* Field: Profile: Avatar image */ + $handler->display->display_options['fields']['field_user_avatar']['id'] = 'field_user_avatar'; + $handler->display->display_options['fields']['field_user_avatar']['table'] = 'field_data_field_user_avatar'; + $handler->display->display_options['fields']['field_user_avatar']['field'] = 'field_user_avatar'; + $handler->display->display_options['fields']['field_user_avatar']['relationship'] = 'profile'; + $handler->display->display_options['fields']['field_user_avatar']['label'] = ''; + $handler->display->display_options['fields']['field_user_avatar']['exclude'] = TRUE; + $handler->display->display_options['fields']['field_user_avatar']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['field_user_avatar']['type'] = 'entityreference_entity_view'; + $handler->display->display_options['fields']['field_user_avatar']['settings'] = array( + 'view_mode' => 'teaser', + 'links' => 1, + ); + /* Field: User: Uid */ + $handler->display->display_options['fields']['uid']['id'] = 'uid'; + $handler->display->display_options['fields']['uid']['table'] = 'users'; + $handler->display->display_options['fields']['uid']['field'] = 'uid'; + $handler->display->display_options['fields']['uid']['relationship'] = 'uid'; + $handler->display->display_options['fields']['uid']['exclude'] = TRUE; + /* Field: User: Name */ + $handler->display->display_options['fields']['name']['id'] = 'name'; + $handler->display->display_options['fields']['name']['table'] = 'users'; + $handler->display->display_options['fields']['name']['field'] = 'name'; + $handler->display->display_options['fields']['name']['relationship'] = 'uid'; + $handler->display->display_options['fields']['name']['label'] = ''; + $handler->display->display_options['fields']['name']['exclude'] = TRUE; + $handler->display->display_options['fields']['name']['element_label_colon'] = FALSE; + /* Field: Global: PHP */ + $handler->display->display_options['fields']['php_2']['id'] = 'php_2'; + $handler->display->display_options['fields']['php_2']['table'] = 'views'; + $handler->display->display_options['fields']['php_2']['field'] = 'php'; + $handler->display->display_options['fields']['php_2']['label'] = ''; + $handler->display->display_options['fields']['php_2']['exclude'] = TRUE; + $handler->display->display_options['fields']['php_2']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['php_2']['use_php_setup'] = 0; + $handler->display->display_options['fields']['php_2']['php_output'] = 'field_user_avatar; + +$query = db_select(\'field_data_field_user_avatar\',\'avatar\') +->fields(\'avatar\',array(\'field_user_avatar_target_id\')) +->condition(\'entity_id\',$img_id) +->execute() +->fetchAssoc(); + +$image_id = $query[\'field_user_avatar_target_id\']; + +$query = db_select(\'field_data_field_avatar_image\', \'t\'); +$query->join(\'file_managed\', \'n\', \'n.fid = t.field_avatar_image_fid\'); +$result = $query + ->fields(\'n\', array(\'uri\')) + ->condition(\'t.entity_id\', $image_id) + ->execute(); + +$img_uri = $result->fetchObject(); +$img_uri = $img_uri->uri; +$style = \'avatar_style\'; +$img_path = image_style_url($style, $img_uri); + +$img = ""; + +$privacy = $data->_field_data[\'nid\'][\'entity\']; +$privacy_key = $privacy->field_please_select_one_music[LANGUAGE_NONE][0][\'value\']; + +if(isset($img_uri)){ + if($privacy_key == \'public\'){ + print $img; + } +} +?>'; + $handler->display->display_options['fields']['php_2']['use_php_click_sortable'] = '0'; + $handler->display->display_options['fields']['php_2']['php_click_sortable'] = ''; + /* Field: Global: PHP */ + $handler->display->display_options['fields']['php_3']['id'] = 'php_3'; + $handler->display->display_options['fields']['php_3']['table'] = 'views'; + $handler->display->display_options['fields']['php_3']['field'] = 'php'; + $handler->display->display_options['fields']['php_3']['label'] = ''; + $handler->display->display_options['fields']['php_3']['exclude'] = TRUE; + $handler->display->display_options['fields']['php_3']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['php_3']['use_php_setup'] = 0; + $handler->display->display_options['fields']['php_3']['php_output'] = '_field_data[\'nid\'][\'entity\']; +$privacy_key = $privacy->field_please_select_one_music[LANGUAGE_NONE][0][\'value\']; +if($privacy_key == \'public\'){ +echo "uid>".$row->name.""; +} + +?>'; + $handler->display->display_options['fields']['php_3']['use_php_click_sortable'] = '0'; + $handler->display->display_options['fields']['php_3']['php_click_sortable'] = ''; + /* Field: Global: Custom text */ + $handler->display->display_options['fields']['nothing']['id'] = 'nothing'; + $handler->display->display_options['fields']['nothing']['table'] = 'views'; + $handler->display->display_options['fields']['nothing']['field'] = 'nothing'; + $handler->display->display_options['fields']['nothing']['label'] = ''; + $handler->display->display_options['fields']['nothing']['alter']['text'] = '
        [php_1]
        [php_2]
        [php_3]
        '; + $handler->display->display_options['fields']['nothing']['element_label_colon'] = FALSE; + /* Field: Content: Post date */ + $handler->display->display_options['fields']['created']['id'] = 'created'; + $handler->display->display_options['fields']['created']['table'] = 'node'; + $handler->display->display_options['fields']['created']['field'] = 'created'; + $handler->display->display_options['fields']['created']['label'] = ''; + $handler->display->display_options['fields']['created']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['created']['date_format'] = 'custom'; + $handler->display->display_options['fields']['created']['custom_date_format'] = 'M d, Y'; + $handler->display->display_options['fields']['created']['second_date_format'] = 'privatemsg_current_day'; + /* Field: Content: Body */ + $handler->display->display_options['fields']['body']['id'] = 'body'; + $handler->display->display_options['fields']['body']['table'] = 'field_data_body'; + $handler->display->display_options['fields']['body']['field'] = 'body'; + $handler->display->display_options['fields']['body']['label'] = ''; + $handler->display->display_options['fields']['body']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['body']['type'] = 'text_trimmed'; + $handler->display->display_options['fields']['body']['settings'] = array( + 'trim_length' => '200', + ); + /* Field: Content: Link */ + $handler->display->display_options['fields']['view_node']['id'] = 'view_node'; + $handler->display->display_options['fields']['view_node']['table'] = 'views_entity_node'; + $handler->display->display_options['fields']['view_node']['field'] = 'view_node'; + $handler->display->display_options['fields']['view_node']['label'] = ''; + $handler->display->display_options['fields']['view_node']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['view_node']['text'] = 'View full review'; + $handler->display->display_options['defaults']['sorts'] = FALSE; + /* Sort criterion: Content: Post date */ + $handler->display->display_options['sorts']['created']['id'] = 'created'; + $handler->display->display_options['sorts']['created']['table'] = 'node'; + $handler->display->display_options['sorts']['created']['field'] = 'created'; + $handler->display->display_options['sorts']['created']['order'] = 'DESC'; + /* Sort criterion: Content: Post date */ + $handler->display->display_options['sorts']['created_1']['id'] = 'created_1'; + $handler->display->display_options['sorts']['created_1']['table'] = 'node'; + $handler->display->display_options['sorts']['created_1']['field'] = 'created'; + $handler->display->display_options['sorts']['created_1']['exposed'] = TRUE; + $handler->display->display_options['sorts']['created_1']['expose']['label'] = 'Post date'; + $handler->display->display_options['sorts']['created_1']['granularity'] = 'day'; + $handler->display->display_options['defaults']['filter_groups'] = FALSE; + $handler->display->display_options['defaults']['filters'] = FALSE; + /* Filter criterion: Content: Published */ + $handler->display->display_options['filters']['status']['id'] = 'status'; + $handler->display->display_options['filters']['status']['table'] = 'node'; + $handler->display->display_options['filters']['status']['field'] = 'status'; + $handler->display->display_options['filters']['status']['value'] = 1; + $handler->display->display_options['filters']['status']['group'] = 1; + $handler->display->display_options['filters']['status']['expose']['operator'] = FALSE; + /* Filter criterion: Content: Type */ + $handler->display->display_options['filters']['type']['id'] = 'type'; + $handler->display->display_options['filters']['type']['table'] = 'node'; + $handler->display->display_options['filters']['type']['field'] = 'type'; + $handler->display->display_options['filters']['type']['value'] = array( + 'music_review' => 'music_review', + ); + $handler->display->display_options['filters']['type']['group'] = 1; + /* Filter criterion: Search: Search Terms */ + $handler->display->display_options['filters']['keys']['id'] = 'keys'; + $handler->display->display_options['filters']['keys']['table'] = 'search_index'; + $handler->display->display_options['filters']['keys']['field'] = 'keys'; + $handler->display->display_options['filters']['keys']['group'] = 1; + $handler->display->display_options['filters']['keys']['exposed'] = TRUE; + $handler->display->display_options['filters']['keys']['expose']['operator_id'] = 'keys_op'; + $handler->display->display_options['filters']['keys']['expose']['label'] = 'Search'; + $handler->display->display_options['filters']['keys']['expose']['operator'] = 'keys_op'; + $handler->display->display_options['filters']['keys']['expose']['identifier'] = 'keys'; + $handler->display->display_options['filters']['keys']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + /* Filter criterion: User: Name (raw) */ + $handler->display->display_options['filters']['name']['id'] = 'name'; + $handler->display->display_options['filters']['name']['table'] = 'users'; + $handler->display->display_options['filters']['name']['field'] = 'name'; + $handler->display->display_options['filters']['name']['relationship'] = 'uid'; + $handler->display->display_options['filters']['name']['operator'] = 'contains'; + $handler->display->display_options['filters']['name']['group'] = 1; + $handler->display->display_options['filters']['name']['exposed'] = TRUE; + $handler->display->display_options['filters']['name']['expose']['operator_id'] = 'name_op'; + $handler->display->display_options['filters']['name']['expose']['label'] = 'Reviewer'; + $handler->display->display_options['filters']['name']['expose']['operator'] = 'name_op'; + $handler->display->display_options['filters']['name']['expose']['identifier'] = 'name'; + $handler->display->display_options['filters']['name']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + /* Filter criterion: Content: Title */ + $handler->display->display_options['filters']['title']['id'] = 'title'; + $handler->display->display_options['filters']['title']['table'] = 'node'; + $handler->display->display_options['filters']['title']['field'] = 'title'; + $handler->display->display_options['filters']['title']['operator'] = 'contains'; + $handler->display->display_options['filters']['title']['group'] = 1; + $handler->display->display_options['filters']['title']['exposed'] = TRUE; + $handler->display->display_options['filters']['title']['expose']['operator_id'] = 'title_op'; + $handler->display->display_options['filters']['title']['expose']['label'] = 'by Title'; + $handler->display->display_options['filters']['title']['expose']['operator'] = 'title_op'; + $handler->display->display_options['filters']['title']['expose']['identifier'] = 'title'; + $handler->display->display_options['filters']['title']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + /* Filter criterion: Content: Please select one: (field_please_select_one_music) */ + $handler->display->display_options['filters']['field_please_select_one_music_value']['id'] = 'field_please_select_one_music_value'; + $handler->display->display_options['filters']['field_please_select_one_music_value']['table'] = 'field_data_field_please_select_one_music'; + $handler->display->display_options['filters']['field_please_select_one_music_value']['field'] = 'field_please_select_one_music_value'; + $handler->display->display_options['filters']['field_please_select_one_music_value']['value'] = array( + 'public' => 'public', + 'publicnoname' => 'publicnoname', + ); + $handler->display->display_options['filters']['field_please_select_one_music_value']['group'] = 1; + /* Filter criterion: User: Roles */ + $handler->display->display_options['filters']['rid']['id'] = 'rid'; + $handler->display->display_options['filters']['rid']['table'] = 'users_roles'; + $handler->display->display_options['filters']['rid']['field'] = 'rid'; + $handler->display->display_options['filters']['rid']['relationship'] = 'uid'; + $handler->display->display_options['filters']['rid']['value'] = array( + 10 => '10', + ); + $handler->display->display_options['filters']['rid']['group'] = 1; + /* Filter criterion: Content: Artist/Performer (field_artist_performer) */ + $handler->display->display_options['filters']['field_artist_performer_value']['id'] = 'field_artist_performer_value'; + $handler->display->display_options['filters']['field_artist_performer_value']['table'] = 'field_data_field_artist_performer'; + $handler->display->display_options['filters']['field_artist_performer_value']['field'] = 'field_artist_performer_value'; + $handler->display->display_options['filters']['field_artist_performer_value']['operator'] = 'contains'; + $handler->display->display_options['filters']['field_artist_performer_value']['group'] = 1; + $handler->display->display_options['filters']['field_artist_performer_value']['exposed'] = TRUE; + $handler->display->display_options['filters']['field_artist_performer_value']['expose']['operator_id'] = 'field_artist_performer_value_op'; + $handler->display->display_options['filters']['field_artist_performer_value']['expose']['label'] = 'By Artist'; + $handler->display->display_options['filters']['field_artist_performer_value']['expose']['operator'] = 'field_artist_performer_value_op'; + $handler->display->display_options['filters']['field_artist_performer_value']['expose']['identifier'] = 'field_artist_performer_value'; + $handler->display->display_options['filters']['field_artist_performer_value']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + /* Filter criterion: Content: Genre (field_genre_music) */ + $handler->display->display_options['filters']['field_genre_music_value']['id'] = 'field_genre_music_value'; + $handler->display->display_options['filters']['field_genre_music_value']['table'] = 'field_data_field_genre_music'; + $handler->display->display_options['filters']['field_genre_music_value']['field'] = 'field_genre_music_value'; + $handler->display->display_options['filters']['field_genre_music_value']['group'] = 1; + $handler->display->display_options['filters']['field_genre_music_value']['exposed'] = TRUE; + $handler->display->display_options['filters']['field_genre_music_value']['expose']['operator_id'] = 'field_genre_music_value_op'; + $handler->display->display_options['filters']['field_genre_music_value']['expose']['label'] = 'By Genre'; + $handler->display->display_options['filters']['field_genre_music_value']['expose']['operator'] = 'field_genre_music_value_op'; + $handler->display->display_options['filters']['field_genre_music_value']['expose']['identifier'] = 'field_genre_music_value'; + $handler->display->display_options['filters']['field_genre_music_value']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + $handler->display->display_options['path'] = 'music-review-listing/staff'; + + /* Display: Players */ + $handler = $view->new_display('page', 'Players', 'page_2'); + $handler->display->display_options['defaults']['pager'] = FALSE; + $handler->display->display_options['pager']['type'] = 'full'; + $handler->display->display_options['pager']['options']['items_per_page'] = '10'; + $handler->display->display_options['pager']['options']['offset'] = '0'; + $handler->display->display_options['pager']['options']['id'] = '0'; + $handler->display->display_options['pager']['options']['quantity'] = '9'; + $handler->display->display_options['pager']['options']['expose']['items_per_page'] = TRUE; + $handler->display->display_options['pager']['options']['expose']['items_per_page_options'] = '10, 20, 30'; + $handler->display->display_options['defaults']['style_plugin'] = FALSE; + $handler->display->display_options['style_plugin'] = 'default'; + $handler->display->display_options['defaults']['style_options'] = FALSE; + $handler->display->display_options['defaults']['row_plugin'] = FALSE; + $handler->display->display_options['row_plugin'] = 'fields'; + $handler->display->display_options['row_options']['inline'] = array( + 'title' => 'title', + 'counter' => 'counter', + ); + $handler->display->display_options['defaults']['row_options'] = FALSE; + $handler->display->display_options['defaults']['header'] = FALSE; + /* Header: Global: Text area */ + $handler->display->display_options['header']['area']['id'] = 'area'; + $handler->display->display_options['header']['area']['table'] = 'views'; + $handler->display->display_options['header']['area']['field'] = 'area'; + $handler->display->display_options['header']['area']['content'] = '

        Reviews & Booklists

        + +

        Music Reviews

        '; + $handler->display->display_options['header']['area']['format'] = 'simple_html'; + $handler->display->display_options['defaults']['relationships'] = FALSE; + /* Relationship: Content: Author */ + $handler->display->display_options['relationships']['uid']['id'] = 'uid'; + $handler->display->display_options['relationships']['uid']['table'] = 'node'; + $handler->display->display_options['relationships']['uid']['field'] = 'uid'; + /* Relationship: Flags: like counter */ + $handler->display->display_options['relationships']['flag_count_rel']['id'] = 'flag_count_rel'; + $handler->display->display_options['relationships']['flag_count_rel']['table'] = 'node'; + $handler->display->display_options['relationships']['flag_count_rel']['field'] = 'flag_count_rel'; + $handler->display->display_options['relationships']['flag_count_rel']['required'] = 0; + $handler->display->display_options['relationships']['flag_count_rel']['flag'] = 'like'; + /* Relationship: Flags: like */ + $handler->display->display_options['relationships']['flag_content_rel']['id'] = 'flag_content_rel'; + $handler->display->display_options['relationships']['flag_content_rel']['table'] = 'node'; + $handler->display->display_options['relationships']['flag_content_rel']['field'] = 'flag_content_rel'; + $handler->display->display_options['relationships']['flag_content_rel']['required'] = 0; + $handler->display->display_options['relationships']['flag_content_rel']['flag'] = 'like'; + $handler->display->display_options['relationships']['flag_content_rel']['user_scope'] = 'any'; + /* Relationship: User: Profile */ + $handler->display->display_options['relationships']['profile']['id'] = 'profile'; + $handler->display->display_options['relationships']['profile']['table'] = 'users'; + $handler->display->display_options['relationships']['profile']['field'] = 'profile'; + $handler->display->display_options['relationships']['profile']['relationship'] = 'uid'; + $handler->display->display_options['relationships']['profile']['bundle_types'] = array( + 'main' => 'main', + ); + $handler->display->display_options['defaults']['fields'] = FALSE; + /* Field: Global: View result counter */ + $handler->display->display_options['fields']['counter']['id'] = 'counter'; + $handler->display->display_options['fields']['counter']['table'] = 'views'; + $handler->display->display_options['fields']['counter']['field'] = 'counter'; + $handler->display->display_options['fields']['counter']['label'] = ''; + $handler->display->display_options['fields']['counter']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['counter']['counter_start'] = '1'; + $handler->display->display_options['fields']['counter']['reverse'] = 0; + /* Field: Content: Title */ + $handler->display->display_options['fields']['title']['id'] = 'title'; + $handler->display->display_options['fields']['title']['table'] = 'node'; + $handler->display->display_options['fields']['title']['field'] = 'title'; + $handler->display->display_options['fields']['title']['label'] = ''; + $handler->display->display_options['fields']['title']['alter']['word_boundary'] = FALSE; + $handler->display->display_options['fields']['title']['alter']['ellipsis'] = FALSE; + $handler->display->display_options['fields']['title']['element_label_colon'] = FALSE; + /* Field: Flags: Flag counter */ + $handler->display->display_options['fields']['count']['id'] = 'count'; + $handler->display->display_options['fields']['count']['table'] = 'flag_counts'; + $handler->display->display_options['fields']['count']['field'] = 'count'; + $handler->display->display_options['fields']['count']['relationship'] = 'flag_count_rel'; + $handler->display->display_options['fields']['count']['label'] = 'Likes'; + /* Field: Content: Artist/Performer */ + $handler->display->display_options['fields']['field_artist_performer']['id'] = 'field_artist_performer'; + $handler->display->display_options['fields']['field_artist_performer']['table'] = 'field_data_field_artist_performer'; + $handler->display->display_options['fields']['field_artist_performer']['field'] = 'field_artist_performer'; + $handler->display->display_options['fields']['field_artist_performer']['label'] = ''; + $handler->display->display_options['fields']['field_artist_performer']['alter']['alter_text'] = TRUE; + $handler->display->display_options['fields']['field_artist_performer']['alter']['text'] = 'Artist: [field_artist_performer]'; + $handler->display->display_options['fields']['field_artist_performer']['element_label_colon'] = FALSE; + /* Field: Content: Genre */ + $handler->display->display_options['fields']['field_genre_music']['id'] = 'field_genre_music'; + $handler->display->display_options['fields']['field_genre_music']['table'] = 'field_data_field_genre_music'; + $handler->display->display_options['fields']['field_genre_music']['field'] = 'field_genre_music'; + $handler->display->display_options['fields']['field_genre_music']['label'] = ''; + $handler->display->display_options['fields']['field_genre_music']['exclude'] = TRUE; + $handler->display->display_options['fields']['field_genre_music']['element_label_colon'] = FALSE; + /* Field: Content: Genre other option */ + $handler->display->display_options['fields']['field_genre_other_option_music']['id'] = 'field_genre_other_option_music'; + $handler->display->display_options['fields']['field_genre_other_option_music']['table'] = 'field_data_field_genre_other_option_music'; + $handler->display->display_options['fields']['field_genre_other_option_music']['field'] = 'field_genre_other_option_music'; + $handler->display->display_options['fields']['field_genre_other_option_music']['label'] = ''; + $handler->display->display_options['fields']['field_genre_other_option_music']['exclude'] = TRUE; + $handler->display->display_options['fields']['field_genre_other_option_music']['alter']['alter_text'] = TRUE; + $handler->display->display_options['fields']['field_genre_other_option_music']['alter']['text'] = 'Genre: [field_genre_other_option_music-value]'; + $handler->display->display_options['fields']['field_genre_other_option_music']['element_label_colon'] = FALSE; + /* Field: Global: PHP */ + $handler->display->display_options['fields']['php']['id'] = 'php'; + $handler->display->display_options['fields']['php']['table'] = 'views'; + $handler->display->display_options['fields']['php']['field'] = 'php'; + $handler->display->display_options['fields']['php']['label'] = ''; + $handler->display->display_options['fields']['php']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['php']['use_php_setup'] = 0; + $handler->display->display_options['fields']['php']['php_output'] = 'field_field_genre_music[0][\'rendered\'][\'#markup\']; +$other_option_val = $data->field_field_genre_music[0][\'rendered\'][\'#markup\']; +$other_option_value = $data->field_field_genre_other_option_music[0][\'rendered\'][\'#markup\']; + +if(isset($other_option_val)){ +if($other_option_val == \'Other\'){ +echo \'Genre: \'.$other_option_value; +}else{ +echo \'Genre: \'.$value; +} +} + +?>'; + $handler->display->display_options['fields']['php']['use_php_click_sortable'] = '0'; + $handler->display->display_options['fields']['php']['php_click_sortable'] = ''; + /* Field: Content: Catalog Link */ + $handler->display->display_options['fields']['field_catalog_link_music']['id'] = 'field_catalog_link_music'; + $handler->display->display_options['fields']['field_catalog_link_music']['table'] = 'field_data_field_catalog_link_music'; + $handler->display->display_options['fields']['field_catalog_link_music']['field'] = 'field_catalog_link_music'; + $handler->display->display_options['fields']['field_catalog_link_music']['label'] = ''; + $handler->display->display_options['fields']['field_catalog_link_music']['alter']['alter_text'] = TRUE; + $handler->display->display_options['fields']['field_catalog_link_music']['alter']['text'] = 'Catalog Link: [field_catalog_link_music]'; + $handler->display->display_options['fields']['field_catalog_link_music']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['field_catalog_link_music']['click_sort_column'] = 'url'; + $handler->display->display_options['fields']['field_catalog_link_music']['type'] = 'link_url'; + /* Field: Content: Please select one: */ + $handler->display->display_options['fields']['field_please_select_one_music']['id'] = 'field_please_select_one_music'; + $handler->display->display_options['fields']['field_please_select_one_music']['table'] = 'field_data_field_please_select_one_music'; + $handler->display->display_options['fields']['field_please_select_one_music']['field'] = 'field_please_select_one_music'; + $handler->display->display_options['fields']['field_please_select_one_music']['label'] = ''; + $handler->display->display_options['fields']['field_please_select_one_music']['exclude'] = TRUE; + $handler->display->display_options['fields']['field_please_select_one_music']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['field_please_select_one_music']['type'] = 'list_key'; + /* Field: Global: PHP */ + $handler->display->display_options['fields']['php_1']['id'] = 'php_1'; + $handler->display->display_options['fields']['php_1']['table'] = 'views'; + $handler->display->display_options['fields']['php_1']['field'] = 'php'; + $handler->display->display_options['fields']['php_1']['label'] = ''; + $handler->display->display_options['fields']['php_1']['exclude'] = TRUE; + $handler->display->display_options['fields']['php_1']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['php_1']['use_php_setup'] = 0; + $handler->display->display_options['fields']['php_1']['php_output'] = '_field_data[\'nid\'][\'entity\']; +$privacy_key = $privacy->field_please_select_one_music[LANGUAGE_NONE][0][\'value\']; +if($privacy_key == \'public\'){ +print \'Reviewed by \'; +} + +?>'; + $handler->display->display_options['fields']['php_1']['use_php_click_sortable'] = '0'; + $handler->display->display_options['fields']['php_1']['php_click_sortable'] = ''; + /* Field: Profile: Avatar image */ + $handler->display->display_options['fields']['field_user_avatar']['id'] = 'field_user_avatar'; + $handler->display->display_options['fields']['field_user_avatar']['table'] = 'field_data_field_user_avatar'; + $handler->display->display_options['fields']['field_user_avatar']['field'] = 'field_user_avatar'; + $handler->display->display_options['fields']['field_user_avatar']['relationship'] = 'profile'; + $handler->display->display_options['fields']['field_user_avatar']['label'] = ''; + $handler->display->display_options['fields']['field_user_avatar']['exclude'] = TRUE; + $handler->display->display_options['fields']['field_user_avatar']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['field_user_avatar']['type'] = 'entityreference_entity_view'; + $handler->display->display_options['fields']['field_user_avatar']['settings'] = array( + 'view_mode' => 'teaser', + 'links' => 1, + ); + /* Field: Global: PHP */ + $handler->display->display_options['fields']['php_2']['id'] = 'php_2'; + $handler->display->display_options['fields']['php_2']['table'] = 'views'; + $handler->display->display_options['fields']['php_2']['field'] = 'php'; + $handler->display->display_options['fields']['php_2']['label'] = ''; + $handler->display->display_options['fields']['php_2']['exclude'] = TRUE; + $handler->display->display_options['fields']['php_2']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['php_2']['use_php_setup'] = 0; + $handler->display->display_options['fields']['php_2']['php_output'] = 'field_user_avatar; + +$query = db_select(\'field_data_field_user_avatar\',\'avatar\') +->fields(\'avatar\',array(\'field_user_avatar_target_id\')) +->condition(\'entity_id\',$img_id) +->execute() +->fetchAssoc(); + +$image_id = $query[\'field_user_avatar_target_id\']; + +$query = db_select(\'field_data_field_avatar_image\', \'t\'); +$query->join(\'file_managed\', \'n\', \'n.fid = t.field_avatar_image_fid\'); +$result = $query + ->fields(\'n\', array(\'uri\')) + ->condition(\'t.entity_id\', $image_id) + ->execute(); + +$img_uri = $result->fetchObject(); +$img_uri = $img_uri->uri; +$style = \'avatar_style\'; +$img_path = image_style_url($style, $img_uri); + +$img = ""; + +$privacy = $data->_field_data[\'nid\'][\'entity\']; +$privacy_key = $privacy->field_please_select_one_music[LANGUAGE_NONE][0][\'value\']; + +if(isset($img_uri)){ + if($privacy_key == \'public\'){ + print $img; + } +} +?>'; + $handler->display->display_options['fields']['php_2']['use_php_click_sortable'] = '0'; + $handler->display->display_options['fields']['php_2']['php_click_sortable'] = ''; + /* Field: User: Uid */ + $handler->display->display_options['fields']['uid']['id'] = 'uid'; + $handler->display->display_options['fields']['uid']['table'] = 'users'; + $handler->display->display_options['fields']['uid']['field'] = 'uid'; + $handler->display->display_options['fields']['uid']['relationship'] = 'uid'; + $handler->display->display_options['fields']['uid']['exclude'] = TRUE; + /* Field: User: Name */ + $handler->display->display_options['fields']['name']['id'] = 'name'; + $handler->display->display_options['fields']['name']['table'] = 'users'; + $handler->display->display_options['fields']['name']['field'] = 'name'; + $handler->display->display_options['fields']['name']['relationship'] = 'uid'; + $handler->display->display_options['fields']['name']['label'] = ''; + $handler->display->display_options['fields']['name']['exclude'] = TRUE; + $handler->display->display_options['fields']['name']['element_label_colon'] = FALSE; + /* Field: Global: PHP */ + $handler->display->display_options['fields']['php_3']['id'] = 'php_3'; + $handler->display->display_options['fields']['php_3']['table'] = 'views'; + $handler->display->display_options['fields']['php_3']['field'] = 'php'; + $handler->display->display_options['fields']['php_3']['label'] = ''; + $handler->display->display_options['fields']['php_3']['exclude'] = TRUE; + $handler->display->display_options['fields']['php_3']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['php_3']['use_php_setup'] = 0; + $handler->display->display_options['fields']['php_3']['php_output'] = '_field_data[\'nid\'][\'entity\']; +$privacy_key = $privacy->field_please_select_one_music[LANGUAGE_NONE][0][\'value\']; +if($privacy_key == \'public\'){ +echo "uid>".$row->name.""; +} + +?>'; + $handler->display->display_options['fields']['php_3']['use_php_click_sortable'] = '0'; + $handler->display->display_options['fields']['php_3']['php_click_sortable'] = ''; + /* Field: Global: Custom text */ + $handler->display->display_options['fields']['nothing']['id'] = 'nothing'; + $handler->display->display_options['fields']['nothing']['table'] = 'views'; + $handler->display->display_options['fields']['nothing']['field'] = 'nothing'; + $handler->display->display_options['fields']['nothing']['label'] = ''; + $handler->display->display_options['fields']['nothing']['alter']['text'] = '
        [php_1]
        [php_2]
        [php_3]
        '; + $handler->display->display_options['fields']['nothing']['element_label_colon'] = FALSE; + /* Field: Content: Post date */ + $handler->display->display_options['fields']['created']['id'] = 'created'; + $handler->display->display_options['fields']['created']['table'] = 'node'; + $handler->display->display_options['fields']['created']['field'] = 'created'; + $handler->display->display_options['fields']['created']['label'] = ''; + $handler->display->display_options['fields']['created']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['created']['date_format'] = 'custom'; + $handler->display->display_options['fields']['created']['custom_date_format'] = 'M d, Y'; + $handler->display->display_options['fields']['created']['second_date_format'] = 'privatemsg_current_day'; + /* Field: Content: Body */ + $handler->display->display_options['fields']['body']['id'] = 'body'; + $handler->display->display_options['fields']['body']['table'] = 'field_data_body'; + $handler->display->display_options['fields']['body']['field'] = 'body'; + $handler->display->display_options['fields']['body']['label'] = ''; + $handler->display->display_options['fields']['body']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['body']['type'] = 'text_trimmed'; + $handler->display->display_options['fields']['body']['settings'] = array( + 'trim_length' => '200', + ); + /* Field: Content: Link */ + $handler->display->display_options['fields']['view_node']['id'] = 'view_node'; + $handler->display->display_options['fields']['view_node']['table'] = 'views_entity_node'; + $handler->display->display_options['fields']['view_node']['field'] = 'view_node'; + $handler->display->display_options['fields']['view_node']['label'] = ''; + $handler->display->display_options['fields']['view_node']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['view_node']['text'] = 'View full review'; + $handler->display->display_options['defaults']['sorts'] = FALSE; + /* Sort criterion: Content: Post date */ + $handler->display->display_options['sorts']['created']['id'] = 'created'; + $handler->display->display_options['sorts']['created']['table'] = 'node'; + $handler->display->display_options['sorts']['created']['field'] = 'created'; + $handler->display->display_options['sorts']['created']['order'] = 'DESC'; + /* Sort criterion: Content: Post date */ + $handler->display->display_options['sorts']['created_1']['id'] = 'created_1'; + $handler->display->display_options['sorts']['created_1']['table'] = 'node'; + $handler->display->display_options['sorts']['created_1']['field'] = 'created'; + $handler->display->display_options['sorts']['created_1']['exposed'] = TRUE; + $handler->display->display_options['sorts']['created_1']['expose']['label'] = 'Post date'; + $handler->display->display_options['sorts']['created_1']['granularity'] = 'day'; + $handler->display->display_options['defaults']['filter_groups'] = FALSE; + $handler->display->display_options['defaults']['filters'] = FALSE; + /* Filter criterion: Content: Published */ + $handler->display->display_options['filters']['status']['id'] = 'status'; + $handler->display->display_options['filters']['status']['table'] = 'node'; + $handler->display->display_options['filters']['status']['field'] = 'status'; + $handler->display->display_options['filters']['status']['value'] = 1; + $handler->display->display_options['filters']['status']['group'] = 1; + $handler->display->display_options['filters']['status']['expose']['operator'] = FALSE; + /* Filter criterion: Content: Type */ + $handler->display->display_options['filters']['type']['id'] = 'type'; + $handler->display->display_options['filters']['type']['table'] = 'node'; + $handler->display->display_options['filters']['type']['field'] = 'type'; + $handler->display->display_options['filters']['type']['value'] = array( + 'music_review' => 'music_review', + ); + /* Filter criterion: Search: Search Terms */ + $handler->display->display_options['filters']['keys']['id'] = 'keys'; + $handler->display->display_options['filters']['keys']['table'] = 'search_index'; + $handler->display->display_options['filters']['keys']['field'] = 'keys'; + $handler->display->display_options['filters']['keys']['exposed'] = TRUE; + $handler->display->display_options['filters']['keys']['expose']['operator_id'] = 'keys_op'; + $handler->display->display_options['filters']['keys']['expose']['label'] = 'Search'; + $handler->display->display_options['filters']['keys']['expose']['operator'] = 'keys_op'; + $handler->display->display_options['filters']['keys']['expose']['identifier'] = 'keys'; + $handler->display->display_options['filters']['keys']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + /* Filter criterion: User: Name (raw) */ + $handler->display->display_options['filters']['name']['id'] = 'name'; + $handler->display->display_options['filters']['name']['table'] = 'users'; + $handler->display->display_options['filters']['name']['field'] = 'name'; + $handler->display->display_options['filters']['name']['relationship'] = 'uid'; + $handler->display->display_options['filters']['name']['operator'] = 'contains'; + $handler->display->display_options['filters']['name']['exposed'] = TRUE; + $handler->display->display_options['filters']['name']['expose']['operator_id'] = 'name_op'; + $handler->display->display_options['filters']['name']['expose']['label'] = 'Reviewer'; + $handler->display->display_options['filters']['name']['expose']['operator'] = 'name_op'; + $handler->display->display_options['filters']['name']['expose']['identifier'] = 'name'; + $handler->display->display_options['filters']['name']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + /* Filter criterion: Content: Title */ + $handler->display->display_options['filters']['title']['id'] = 'title'; + $handler->display->display_options['filters']['title']['table'] = 'node'; + $handler->display->display_options['filters']['title']['field'] = 'title'; + $handler->display->display_options['filters']['title']['operator'] = 'contains'; + $handler->display->display_options['filters']['title']['exposed'] = TRUE; + $handler->display->display_options['filters']['title']['expose']['operator_id'] = 'title_op'; + $handler->display->display_options['filters']['title']['expose']['label'] = 'by Title'; + $handler->display->display_options['filters']['title']['expose']['operator'] = 'title_op'; + $handler->display->display_options['filters']['title']['expose']['identifier'] = 'title'; + $handler->display->display_options['filters']['title']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + /* Filter criterion: Content: Please select one: (field_please_select_one_music) */ + $handler->display->display_options['filters']['field_please_select_one_music_value']['id'] = 'field_please_select_one_music_value'; + $handler->display->display_options['filters']['field_please_select_one_music_value']['table'] = 'field_data_field_please_select_one_music'; + $handler->display->display_options['filters']['field_please_select_one_music_value']['field'] = 'field_please_select_one_music_value'; + $handler->display->display_options['filters']['field_please_select_one_music_value']['value'] = array( + 'public' => 'public', + 'publicnoname' => 'publicnoname', + ); + /* Filter criterion: User: Roles */ + $handler->display->display_options['filters']['rid']['id'] = 'rid'; + $handler->display->display_options['filters']['rid']['table'] = 'users_roles'; + $handler->display->display_options['filters']['rid']['field'] = 'rid'; + $handler->display->display_options['filters']['rid']['relationship'] = 'uid'; + $handler->display->display_options['filters']['rid']['value'] = array( + 6 => '6', + ); + /* Filter criterion: Content: Artist/Performer (field_artist_performer) */ + $handler->display->display_options['filters']['field_artist_performer_value']['id'] = 'field_artist_performer_value'; + $handler->display->display_options['filters']['field_artist_performer_value']['table'] = 'field_data_field_artist_performer'; + $handler->display->display_options['filters']['field_artist_performer_value']['field'] = 'field_artist_performer_value'; + $handler->display->display_options['filters']['field_artist_performer_value']['operator'] = 'contains'; + $handler->display->display_options['filters']['field_artist_performer_value']['exposed'] = TRUE; + $handler->display->display_options['filters']['field_artist_performer_value']['expose']['operator_id'] = 'field_artist_performer_value_op'; + $handler->display->display_options['filters']['field_artist_performer_value']['expose']['label'] = 'By Artist'; + $handler->display->display_options['filters']['field_artist_performer_value']['expose']['operator'] = 'field_artist_performer_value_op'; + $handler->display->display_options['filters']['field_artist_performer_value']['expose']['identifier'] = 'field_artist_performer_value'; + $handler->display->display_options['filters']['field_artist_performer_value']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + /* Filter criterion: Content: Genre (field_genre_music) */ + $handler->display->display_options['filters']['field_genre_music_value']['id'] = 'field_genre_music_value'; + $handler->display->display_options['filters']['field_genre_music_value']['table'] = 'field_data_field_genre_music'; + $handler->display->display_options['filters']['field_genre_music_value']['field'] = 'field_genre_music_value'; + $handler->display->display_options['filters']['field_genre_music_value']['exposed'] = TRUE; + $handler->display->display_options['filters']['field_genre_music_value']['expose']['operator_id'] = 'field_genre_music_value_op'; + $handler->display->display_options['filters']['field_genre_music_value']['expose']['label'] = 'By Genre'; + $handler->display->display_options['filters']['field_genre_music_value']['expose']['operator'] = 'field_genre_music_value_op'; + $handler->display->display_options['filters']['field_genre_music_value']['expose']['identifier'] = 'field_genre_music_value'; + $handler->display->display_options['filters']['field_genre_music_value']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + $handler->display->display_options['path'] = 'music-review-listing/players'; + $export['music_review_listing'] = $view; + + return $export; +} diff --git a/docroot/sites/all/modules/features/play_library_program_teen/play-library-program-activities-block.tpl.php b/docroot/sites/all/modules/features/play_library_program_teen/play-library-program-activities-block.tpl.php new file mode 100644 index 00000000..840e2f8d --- /dev/null +++ b/docroot/sites/all/modules/features/play_library_program_teen/play-library-program-activities-block.tpl.php @@ -0,0 +1,9 @@ +
          + +
        • + + + +
        • + +
        \ No newline at end of file diff --git a/docroot/sites/all/modules/features/play_library_program_teen/play_library_program_teen.ds.inc b/docroot/sites/all/modules/features/play_library_program_teen/play_library_program_teen.ds.inc new file mode 100644 index 00000000..b1f871c1 --- /dev/null +++ b/docroot/sites/all/modules/features/play_library_program_teen/play_library_program_teen.ds.inc @@ -0,0 +1,150 @@ +api_version = 1; + $ds_fieldsetting->id = 'raffle|raffle|default'; + $ds_fieldsetting->entity_type = 'raffle'; + $ds_fieldsetting->bundle = 'raffle'; + $ds_fieldsetting->view_mode = 'default'; + $ds_fieldsetting->settings = array( + 'raffle_entries' => array( + 'weight' => '3', + 'label' => 'hidden', + 'format' => 'default', + 'formatter_settings' => array( + 'show_title' => 1, + 'title_wrapper' => 'h3', + 'ctools' => 'a:3:{s:4:"conf";a:16:{s:23:"override_pager_settings";i:0;s:9:"use_pager";i:0;s:14:"nodes_per_page";s:1:"0";s:8:"pager_id";s:1:"0";s:6:"offset";s:1:"0";s:9:"more_link";i:0;s:10:"feed_icons";i:0;s:10:"panel_args";i:0;s:12:"link_to_view";i:0;s:4:"args";s:0:"";s:3:"url";s:0:"";s:7:"display";s:7:"default";s:7:"context";a:1:{i:0;s:30:"argument_entity_id:raffle_1.id";}s:14:"override_title";i:0;s:19:"override_title_text";s:0:"";s:22:"override_title_heading";s:2:"h2";}s:4:"type";s:5:"views";s:7:"subtype";s:15:"raffle_entrants";}', + 'load_terms' => 0, + ), + ), + 'raffle_winners' => array( + 'weight' => '2', + 'label' => 'hidden', + 'format' => 'default', + 'formatter_settings' => array( + 'show_title' => 1, + 'title_wrapper' => 'h3', + 'ctools' => 'a:3:{s:4:"conf";a:16:{s:23:"override_pager_settings";i:0;s:9:"use_pager";i:1;s:14:"nodes_per_page";s:2:"10";s:8:"pager_id";s:1:"0";s:6:"offset";s:1:"0";s:9:"more_link";i:0;s:10:"feed_icons";i:0;s:10:"panel_args";i:0;s:12:"link_to_view";i:0;s:4:"args";s:0:"";s:3:"url";s:0:"";s:7:"display";s:7:"default";s:7:"context";a:1:{i:0;s:30:"argument_entity_id:raffle_1.id";}s:14:"override_title";i:0;s:19:"override_title_text";s:0:"";s:22:"override_title_heading";s:2:"h2";}s:4:"type";s:5:"views";s:7:"subtype";s:13:"raffle_winner";}', + 'load_terms' => 0, + ), + ), + ); + $export['raffle|raffle|default'] = $ds_fieldsetting; + + return $export; +} + +/** + * Implements hook_ds_custom_fields_info(). + */ +function play_library_program_teen_ds_custom_fields_info() { + $export = array(); + + $ds_field = new stdClass(); + $ds_field->api_version = 1; + $ds_field->field = 'raffle_entries'; + $ds_field->label = 'Raffle Entries'; + $ds_field->field_type = 7; + $ds_field->entities = array( + 'raffle' => 'raffle', + ); + $ds_field->ui_limit = 'raffle|*'; + $ds_field->properties = array( + 'default' => array(), + 'settings' => array( + 'show_title' => array( + 'type' => 'checkbox', + ), + 'title_wrapper' => array( + 'type' => 'textfield', + 'description' => 'Eg: h1, h2, p', + ), + 'ctools' => array( + 'type' => 'ctools', + ), + ), + ); + $export['raffle_entries'] = $ds_field; + + $ds_field = new stdClass(); + $ds_field->api_version = 1; + $ds_field->field = 'raffle_winners'; + $ds_field->label = 'Raffle Winners'; + $ds_field->field_type = 7; + $ds_field->entities = array( + 'raffle' => 'raffle', + ); + $ds_field->ui_limit = 'raffle|*'; + $ds_field->properties = array( + 'default' => array(), + 'settings' => array( + 'show_title' => array( + 'type' => 'checkbox', + ), + 'title_wrapper' => array( + 'type' => 'textfield', + 'description' => 'Eg: h1, h2, p', + ), + 'ctools' => array( + 'type' => 'ctools', + ), + ), + ); + $export['raffle_winners'] = $ds_field; + + return $export; +} + +/** + * Implements hook_ds_layout_settings_info(). + */ +function play_library_program_teen_ds_layout_settings_info() { + $export = array(); + + $ds_layout = new stdClass(); + $ds_layout->api_version = 1; + $ds_layout->id = 'raffle|raffle|default'; + $ds_layout->entity_type = 'raffle'; + $ds_layout->bundle = 'raffle'; + $ds_layout->view_mode = 'default'; + $ds_layout->layout = 'ds_1col'; + $ds_layout->settings = array( + 'regions' => array( + 'ds_content' => array( + 0 => 'field_raffle_reward', + 1 => 'field_raffle_message', + 2 => 'raffle_winners', + 3 => 'raffle_entries', + ), + ), + 'fields' => array( + 'field_raffle_reward' => 'ds_content', + 'field_raffle_message' => 'ds_content', + 'raffle_winners' => 'ds_content', + 'raffle_entries' => 'ds_content', + ), + 'classes' => array(), + 'wrappers' => array( + 'ds_content' => 'div', + ), + 'layout_wrapper' => 'div', + 'layout_attributes' => '', + 'layout_attributes_merge' => 1, + 'layout_link_attribute' => '', + 'layout_link_custom' => '', + ); + $export['raffle|raffle|default'] = $ds_layout; + + return $export; +} diff --git a/docroot/sites/all/modules/features/play_library_program_teen/play_library_program_teen.features.field_base.inc b/docroot/sites/all/modules/features/play_library_program_teen/play_library_program_teen.features.field_base.inc new file mode 100644 index 00000000..953beb07 --- /dev/null +++ b/docroot/sites/all/modules/features/play_library_program_teen/play_library_program_teen.features.field_base.inc @@ -0,0 +1,750 @@ + 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_activity_entry_activity', + 'indexes' => array( + 'target_id' => array( + 0 => 'target_id', + ), + ), + 'locked' => 0, + 'module' => 'entityreference', + 'settings' => array( + 'handler' => 'base', + 'handler_settings' => array( + 'behaviors' => array( + 'views-select-list' => array( + 'status' => 0, + ), + ), + 'sort' => array( + 'type' => 'none', + ), + 'target_bundles' => array( + 'activity' => 'activity', + ), + ), + 'target_type' => 'activity', + ), + 'translatable' => 0, + 'type' => 'entityreference', + ); + + // Exported field_base: 'field_activity_fired_hook'. + $field_bases['field_activity_fired_hook'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_activity_fired_hook', + 'indexes' => array( + 'format' => array( + 0 => 'format', + ), + ), + 'locked' => 0, + 'module' => 'text', + 'settings' => array( + 'max_length' => 255, + ), + 'translatable' => 0, + 'type' => 'text', + ); + + // Exported field_base: 'field_activity_limit'. + $field_bases['field_activity_limit'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_activity_limit', + 'indexes' => array(), + 'locked' => 0, + 'module' => 'number', + 'settings' => array(), + 'translatable' => 0, + 'type' => 'number_integer', + ); + + // Exported field_base: 'field_activity_points'. + $field_bases['field_activity_points'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_activity_points', + 'indexes' => array(), + 'locked' => 0, + 'module' => 'number', + 'settings' => array(), + 'translatable' => 0, + 'type' => 'number_integer', + ); + + // Exported field_base: 'field_activity_time_limit'. + $field_bases['field_activity_time_limit'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_activity_time_limit', + 'indexes' => array( + 'value' => array( + 0 => 'value', + ), + ), + 'locked' => 0, + 'module' => 'list', + 'settings' => array( + 'allowed_values' => array( + 0 => 'Anytime', + 3600 => 'Once per hour', + 21600 => 'Once per 6 hours', + 43200 => 'Once per 12 hours', + 86400 => 'Once per day', + ), + 'allowed_values_function' => '', + ), + 'translatable' => 0, + 'type' => 'list_integer', + ); + + // Exported field_base: 'field_badge_image'. + $field_bases['field_badge_image'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_badge_image', + 'indexes' => array( + 'fid' => array( + 0 => 'fid', + ), + ), + 'locked' => 0, + 'module' => 'image', + 'settings' => array( + 'default_image' => 0, + 'uri_scheme' => 'public', + ), + 'translatable' => 0, + 'type' => 'image', + ); + + // Exported field_base: 'field_print_reward_file'. + $field_bases['field_print_reward_file'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_print_reward_file', + 'indexes' => array( + 'fid' => array( + 0 => 'fid', + ), + ), + 'locked' => 0, + 'module' => 'file', + 'settings' => array( + 'display_default' => 0, + 'display_field' => 1, + 'profile2_private' => FALSE, + 'uri_scheme' => 'public', + ), + 'translatable' => 0, + 'type' => 'file', + ); + + // Exported field_base: 'field_raffle_date'. + $field_bases['field_raffle_date'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_raffle_date', + 'indexes' => array(), + 'locked' => 0, + 'module' => 'date', + 'settings' => array( + 'cache_count' => 4, + 'cache_enabled' => 0, + 'granularity' => array( + 'day' => 'day', + 'hour' => 0, + 'minute' => 0, + 'month' => 'month', + 'second' => 0, + 'year' => 'year', + ), + 'profile2_private' => FALSE, + 'timezone_db' => '', + 'todate' => '', + 'tz_handling' => 'none', + ), + 'translatable' => 0, + 'type' => 'datetime', + ); + + // Exported field_base: 'field_raffle_entry_raffle'. + $field_bases['field_raffle_entry_raffle'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_raffle_entry_raffle', + 'indexes' => array( + 'target_id' => array( + 0 => 'target_id', + ), + ), + 'locked' => 0, + 'module' => 'entityreference', + 'settings' => array( + 'handler' => 'base', + 'handler_settings' => array( + 'behaviors' => array( + 'views-select-list' => array( + 'status' => 0, + ), + ), + 'sort' => array( + 'type' => 'none', + ), + 'target_bundles' => array( + 'raffle' => 'raffle', + ), + ), + 'target_type' => 'raffle', + ), + 'translatable' => 0, + 'type' => 'entityreference', + ); + + // Exported field_base: 'field_raffle_message'. + $field_bases['field_raffle_message'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_raffle_message', + 'indexes' => array( + 'format' => array( + 0 => 'format', + ), + ), + 'locked' => 0, + 'module' => 'text', + 'settings' => array( + 'profile2_private' => FALSE, + ), + 'translatable' => 0, + 'type' => 'text_long', + ); + + // Exported field_base: 'field_raffle_reward'. + $field_bases['field_raffle_reward'] = array( + 'active' => 1, + 'cardinality' => -1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_raffle_reward', + 'indexes' => array( + 'target_id' => array( + 0 => 'target_id', + ), + ), + 'locked' => 0, + 'module' => 'entityreference', + 'settings' => array( + 'handler' => 'base', + 'handler_settings' => array( + 'behaviors' => array( + 'views-select-list' => array( + 'status' => 0, + ), + ), + 'sort' => array( + 'type' => 'none', + ), + 'target_bundles' => array( + 'physical_reward' => 'physical_reward', + 'print_reward' => 'print_reward', + 'reward' => 'reward', + 'sticker' => 'sticker', + ), + ), + 'profile2_private' => FALSE, + 'target_type' => 'reward', + ), + 'translatable' => 0, + 'type' => 'entityreference', + ); + + // Exported field_base: 'field_raffle_winner'. + $field_bases['field_raffle_winner'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_raffle_winner', + 'indexes' => array( + 'target_id' => array( + 0 => 'target_id', + ), + ), + 'locked' => 0, + 'module' => 'entityreference', + 'settings' => array( + 'handler' => 'base', + 'handler_settings' => array( + 'behaviors' => array( + 'views-select-list' => array( + 'status' => 0, + ), + ), + 'sort' => array( + 'type' => 'none', + ), + 'target_bundles' => array(), + ), + 'target_type' => 'user', + ), + 'translatable' => 0, + 'type' => 'entityreference', + ); + + // Exported field_base: 'field_raffle_winner_raffle'. + $field_bases['field_raffle_winner_raffle'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_raffle_winner_raffle', + 'indexes' => array( + 'target_id' => array( + 0 => 'target_id', + ), + ), + 'locked' => 0, + 'module' => 'entityreference', + 'settings' => array( + 'handler' => 'base', + 'handler_settings' => array( + 'behaviors' => array( + 'views-select-list' => array( + 'status' => 0, + ), + ), + 'sort' => array( + 'type' => 'none', + ), + 'target_bundles' => array( + 'raffle' => 'raffle', + ), + ), + 'target_type' => 'raffle', + ), + 'translatable' => 0, + 'type' => 'entityreference', + ); + + // Exported field_base: 'field_reward_badge'. + $field_bases['field_reward_badge'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_reward_badge', + 'indexes' => array( + 'target_id' => array( + 0 => 'target_id', + ), + ), + 'locked' => 0, + 'module' => 'entityreference', + 'settings' => array( + 'handler' => 'base', + 'handler_settings' => array( + 'behaviors' => array( + 'views-select-list' => array( + 'status' => 0, + ), + ), + 'sort' => array( + 'type' => 'none', + ), + 'target_bundles' => array( + 'badge' => 'badge', + ), + ), + 'target_type' => 'badge', + ), + 'translatable' => 0, + 'type' => 'entityreference', + ); + + // Exported field_base: 'field_reward_claim_id'. + $field_bases['field_reward_claim_id'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_reward_claim_id', + 'indexes' => array( + 'target_id' => array( + 0 => 'target_id', + ), + ), + 'locked' => 0, + 'module' => 'entityreference', + 'settings' => array( + 'handler' => 'base', + 'handler_settings' => array( + 'behaviors' => array( + 'views-select-list' => array( + 'status' => 0, + ), + ), + 'sort' => array( + 'type' => 'none', + ), + 'target_bundles' => array( + 'physical_reward' => 'physical_reward', + 'print_reward' => 'print_reward', + 'reward' => 'reward', + 'sticker' => 'sticker', + ), + ), + 'profile2_private' => FALSE, + 'target_type' => 'reward', + ), + 'translatable' => 0, + 'type' => 'entityreference', + ); + + // Exported field_base: 'field_reward_criteria_activity'. + $field_bases['field_reward_criteria_activity'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_reward_criteria_activity', + 'indexes' => array( + 'target_id' => array( + 0 => 'target_id', + ), + ), + 'locked' => 0, + 'module' => 'entityreference', + 'settings' => array( + 'handler' => 'base', + 'handler_settings' => array( + 'behaviors' => array( + 'views-select-list' => array( + 'status' => 0, + ), + ), + 'sort' => array( + 'type' => 'none', + ), + 'target_bundles' => array( + 'activity' => 'activity', + ), + ), + 'target_type' => 'activity', + ), + 'translatable' => 0, + 'type' => 'entityreference', + ); + + // Exported field_base: 'field_reward_criteria_date_limit'. + $field_bases['field_reward_criteria_date_limit'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_reward_criteria_date_limit', + 'indexes' => array(), + 'locked' => 0, + 'module' => 'date', + 'settings' => array( + 'cache_count' => 4, + 'cache_enabled' => 0, + 'granularity' => array( + 'day' => 'day', + 'hour' => 0, + 'minute' => 0, + 'month' => 'month', + 'second' => 0, + 'year' => 'year', + ), + 'profile2_private' => FALSE, + 'timezone_db' => '', + 'todate' => 'required', + 'tz_handling' => 'none', + ), + 'translatable' => 0, + 'type' => 'datetime', + ); + + // Exported field_base: 'field_reward_criteria_point_mark'. + $field_bases['field_reward_criteria_point_mark'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_reward_criteria_point_mark', + 'indexes' => array(), + 'locked' => 0, + 'module' => 'number', + 'settings' => array(), + 'translatable' => 0, + 'type' => 'number_integer', + ); + + // Exported field_base: 'field_reward_criteria_repeatable'. + $field_bases['field_reward_criteria_repeatable'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_reward_criteria_repeatable', + 'indexes' => array( + 'value' => array( + 0 => 'value', + ), + ), + 'locked' => 0, + 'module' => 'list', + 'settings' => array( + 'allowed_values' => array( + 0 => 'No', + 1 => 'Yes', + ), + 'allowed_values_function' => '', + ), + 'translatable' => 0, + 'type' => 'list_boolean', + ); + + // Exported field_base: 'field_reward_criteria_reward'. + $field_bases['field_reward_criteria_reward'] = array( + 'active' => 1, + 'cardinality' => -1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_reward_criteria_reward', + 'indexes' => array( + 'target_id' => array( + 0 => 'target_id', + ), + ), + 'locked' => 0, + 'module' => 'entityreference', + 'settings' => array( + 'handler' => 'base', + 'handler_settings' => array( + 'behaviors' => array( + 'views-select-list' => array( + 'status' => 0, + ), + ), + 'sort' => array( + 'type' => 'none', + ), + 'target_bundles' => array( + 'physical_reward' => 'physical_reward', + 'print_reward' => 'print_reward', + 'reward' => 'reward', + 'sticker' => 'sticker', + ), + ), + 'profile2_private' => FALSE, + 'target_type' => 'reward', + ), + 'translatable' => 0, + 'type' => 'entityreference', + ); + + // Exported field_base: 'field_reward_message'. + $field_bases['field_reward_message'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_reward_message', + 'indexes' => array( + 'format' => array( + 0 => 'format', + ), + ), + 'locked' => 0, + 'module' => 'text', + 'settings' => array( + 'profile2_private' => FALSE, + ), + 'translatable' => 0, + 'type' => 'text_long', + ); + + // Exported field_base: 'field_reward_notification'. + $field_bases['field_reward_notification'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_reward_notification', + 'indexes' => array( + 'format' => array( + 0 => 'format', + ), + ), + 'locked' => 0, + 'module' => 'text', + 'settings' => array( + 'profile2_private' => FALSE, + ), + 'translatable' => 0, + 'type' => 'text_long', + ); + + // Exported field_base: 'field_reward_raffle'. + $field_bases['field_reward_raffle'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_reward_raffle', + 'indexes' => array( + 'target_id' => array( + 0 => 'target_id', + ), + ), + 'locked' => 0, + 'module' => 'entityreference', + 'settings' => array( + 'handler' => 'base', + 'handler_settings' => array( + 'behaviors' => array( + 'views-select-list' => array( + 'status' => 0, + ), + ), + 'sort' => array( + 'type' => 'none', + ), + 'target_bundles' => array( + 'raffle' => 'raffle', + ), + ), + 'target_type' => 'raffle', + ), + 'translatable' => 0, + 'type' => 'entityreference', + ); + + // Exported field_base: 'field_reward_role_limits'. + $field_bases['field_reward_role_limits'] = array( + 'active' => 1, + 'cardinality' => -1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_reward_role_limits', + 'indexes' => array(), + 'locked' => 0, + 'module' => 'role_field', + 'settings' => array( + 'exclusive' => 0, + 'profile2_private' => FALSE, + 'roles' => array( + 2 => 2, + 3 => 3, + 4 => 4, + 5 => 5, + 6 => 6, + 7 => 7, + 8 => 8, + 9 => 9, + 10 => 10, + 11 => 11, + ), + ), + 'translatable' => 0, + 'type' => 'role', + ); + + // Exported field_base: 'field_sticker_image'. + $field_bases['field_sticker_image'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_sticker_image', + 'indexes' => array( + 'fid' => array( + 0 => 'fid', + ), + ), + 'locked' => 0, + 'module' => 'image', + 'settings' => array( + 'default_image' => 0, + 'profile2_private' => FALSE, + 'uri_scheme' => 'public', + ), + 'translatable' => 0, + 'type' => 'image', + ); + + // Exported field_base: 'field_user_badge_id'. + $field_bases['field_user_badge_id'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_user_badge_id', + 'indexes' => array( + 'target_id' => array( + 0 => 'target_id', + ), + ), + 'locked' => 0, + 'module' => 'entityreference', + 'settings' => array( + 'handler' => 'base', + 'handler_settings' => array( + 'behaviors' => array( + 'views-select-list' => array( + 'status' => 0, + ), + ), + 'sort' => array( + 'type' => 'none', + ), + 'target_bundles' => array( + 'badge' => 'badge', + ), + ), + 'target_type' => 'badge', + ), + 'translatable' => 0, + 'type' => 'entityreference', + ); + + return $field_bases; +} diff --git a/docroot/sites/all/modules/features/play_library_program_teen/play_library_program_teen.features.field_instance.inc b/docroot/sites/all/modules/features/play_library_program_teen/play_library_program_teen.features.field_instance.inc new file mode 100644 index 00000000..841b3540 --- /dev/null +++ b/docroot/sites/all/modules/features/play_library_program_teen/play_library_program_teen.features.field_instance.inc @@ -0,0 +1,2016 @@ + 'activity', + 'default_value' => array( + 0 => array( + 'value' => 'via_block', + ), + ), + 'deleted' => 0, + 'description' => 'Select when the activity should be fired. Such as when a user signs up, when content is created/published, etc. If you do not select one, the option will show up in the activity menu for the user to select.', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'text', + 'settings' => array(), + 'type' => 'text_default', + 'weight' => 3, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'entity_type' => 'activity', + 'field_name' => 'field_activity_fired_hook', + 'label' => 'When the activity will trigger points', + 'required' => 0, + 'settings' => array( + 'better_formats' => array( + 'allowed_formats' => array( + 'filtered_html' => 'filtered_html', + 'filtered_html_with_embed' => 'filtered_html_with_embed', + 'filtered_html_with_tables' => 'filtered_html_with_tables', + 'full_html' => 'full_html', + 'php_code' => 'php_code', + 'plain_text' => 'plain_text', + 'simple_html' => 'simple_html', + ), + 'allowed_formats_toggle' => 0, + 'default_order_toggle' => 0, + 'default_order_wrapper' => array( + 'formats' => array( + 'filtered_html' => array( + 'weight' => -10, + ), + 'filtered_html_with_embed' => array( + 'weight' => -8, + ), + 'filtered_html_with_tables' => array( + 'weight' => -7, + ), + 'full_html' => array( + 'weight' => -6, + ), + 'php_code' => array( + 'weight' => 11, + ), + 'plain_text' => array( + 'weight' => -5, + ), + 'simple_html' => array( + 'weight' => -9, + ), + ), + ), + ), + 'linkit' => array( + 'enable' => 0, + 'insert_plugin' => '', + ), + 'text_processing' => 0, + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'text', + 'settings' => array( + 'size' => 60, + ), + 'type' => 'text_textfield', + 'weight' => 4, + ), + ); + + // Exported field_instance: 'activity-activity-field_activity_limit'. + $field_instances['activity-activity-field_activity_limit'] = array( + 'bundle' => 'activity', + 'default_value' => array( + 0 => array( + 'value' => 1, + ), + ), + 'deleted' => 0, + 'description' => 'Total limit on the number of times a user can perform activity in order to gain points. Minimum 1. To act as \'unlimited\', use a very high integer value (like 9999).', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'number', + 'settings' => array( + 'decimal_separator' => '.', + 'prefix_suffix' => TRUE, + 'scale' => 0, + 'thousand_separator' => ' ', + ), + 'type' => 'number_integer', + 'weight' => 1, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'entity_type' => 'activity', + 'field_name' => 'field_activity_limit', + 'label' => 'Number of times a user can perform an activity', + 'required' => 0, + 'settings' => array( + 'max' => '', + 'min' => 1, + 'prefix' => '', + 'suffix' => '', + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 0, + 'module' => 'number', + 'settings' => array(), + 'type' => 'number', + 'weight' => 5, + ), + ); + + // Exported field_instance: 'activity-activity-field_activity_points'. + $field_instances['activity-activity-field_activity_points'] = array( + 'bundle' => 'activity', + 'default_value' => array( + 0 => array( + 'value' => 0, + ), + ), + 'deleted' => 0, + 'description' => 'Default number of points user gets for doing activity each time.', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'number', + 'settings' => array( + 'decimal_separator' => '.', + 'prefix_suffix' => TRUE, + 'scale' => 0, + 'thousand_separator' => ' ', + ), + 'type' => 'number_integer', + 'weight' => 0, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'entity_type' => 'activity', + 'field_name' => 'field_activity_points', + 'label' => 'Activity Points', + 'required' => 0, + 'settings' => array( + 'max' => '', + 'min' => 0, + 'prefix' => '', + 'suffix' => '', + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 0, + 'module' => 'number', + 'settings' => array(), + 'type' => 'number', + 'weight' => 3, + ), + ); + + // Exported field_instance: 'activity-activity-field_activity_time_limit'. + $field_instances['activity-activity-field_activity_time_limit'] = array( + 'bundle' => 'activity', + 'default_value' => array( + 0 => array( + 'value' => 0, + ), + ), + 'deleted' => 0, + 'description' => 'The activity time limit ties to the activities the user can do as part of the \'what did you do today\' block. This does not apply to activities that are fired by other events.', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'list', + 'settings' => array(), + 'type' => 'list_default', + 'weight' => 4, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'entity_type' => 'activity', + 'field_name' => 'field_activity_time_limit', + 'label' => 'Activity Time Limit', + 'required' => 1, + 'settings' => array( + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'options', + 'settings' => array( + 'apply_chosen' => '', + ), + 'type' => 'options_select', + 'weight' => 6, + ), + ); + + // Exported field_instance: + // 'activity-activity_entry-field_activity_entry_activity'. + $field_instances['activity-activity_entry-field_activity_entry_activity'] = array( + 'bundle' => 'activity_entry', + 'default_value' => NULL, + 'default_value_function' => '', + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'entityreference', + 'settings' => array( + 'link' => FALSE, + ), + 'type' => 'entityreference_label', + 'weight' => 0, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'entity_type' => 'activity', + 'field_name' => 'field_activity_entry_activity', + 'label' => 'Activity', + 'required' => 1, + 'settings' => array( + 'behaviors' => array( + 'prepopulate' => array( + 'status' => 0, + ), + ), + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'entityreference', + 'settings' => array( + 'match_operator' => 'CONTAINS', + 'path' => '', + 'size' => 60, + ), + 'type' => 'entityreference_autocomplete', + 'weight' => 1, + ), + ); + + // Exported field_instance: 'badge-badge-field_badge_image'. + $field_instances['badge-badge-field_badge_image'] = array( + 'bundle' => 'badge', + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'image', + 'settings' => array( + 'image_link' => '', + 'image_style' => '', + ), + 'type' => 'image', + 'weight' => 0, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'entity_type' => 'badge', + 'field_name' => 'field_badge_image', + 'label' => 'Badge Image', + 'required' => 1, + 'settings' => array( + 'alt_field' => 0, + 'default_image' => 0, + 'file_directory' => 'badges', + 'file_extensions' => 'png gif jpg jpeg', + 'max_filesize' => '', + 'max_resolution' => '', + 'min_resolution' => '', + 'title_field' => 0, + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'image', + 'settings' => array( + 'filefield_sources' => array( + 'filefield_sources' => array( + 'attach' => 0, + 'clipboard' => 0, + 'imce' => 0, + 'reference' => 0, + 'remote' => 0, + 'upload' => 'upload', + ), + 'source_attach' => array( + 'absolute' => 0, + 'attach_mode' => 'move', + 'path' => 'file_attach', + ), + 'source_imce' => array( + 'imce_mode' => 0, + ), + 'source_reference' => array( + 'autocomplete' => 0, + ), + ), + 'preview_image_style' => 'thumbnail', + 'progress_indicator' => 'throbber', + ), + 'type' => 'image_image', + 'weight' => 1, + ), + ); + + // Exported field_instance: 'badge-user_badge-field_user_badge_id'. + $field_instances['badge-user_badge-field_user_badge_id'] = array( + 'bundle' => 'user_badge', + 'default_value' => NULL, + 'default_value_function' => '', + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'entityreference', + 'settings' => array( + 'link' => FALSE, + ), + 'type' => 'entityreference_label', + 'weight' => 0, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'entity_type' => 'badge', + 'field_name' => 'field_user_badge_id', + 'label' => 'User Badge ID', + 'required' => 1, + 'settings' => array( + 'behaviors' => array( + 'prepopulate' => array( + 'status' => 0, + ), + ), + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'entityreference', + 'settings' => array( + 'match_operator' => 'CONTAINS', + 'path' => '', + 'size' => 60, + ), + 'type' => 'entityreference_autocomplete', + 'weight' => 1, + ), + ); + + // Exported field_instance: 'raffle-raffle-field_raffle_date'. + $field_instances['raffle-raffle-field_raffle_date'] = array( + 'bundle' => 'raffle', + 'deleted' => 0, + 'description' => 'Date of Raffle', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 2, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'entity_type' => 'raffle', + 'field_name' => 'field_raffle_date', + 'label' => 'Raffle Date', + 'required' => 0, + 'settings' => array( + 'default_value' => 'now', + 'default_value2' => 'same', + 'default_value_code' => '', + 'default_value_code2' => '', + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'date', + 'settings' => array( + 'increment' => 15, + 'input_format' => 'M j Y - g:i:sa', + 'input_format_custom' => '', + 'label_position' => 'above', + 'no_fieldset' => 0, + 'text_parts' => array(), + 'year_range' => '-3:+3', + ), + 'type' => 'date_popup', + 'weight' => 0, + ), + ); + + // Exported field_instance: 'raffle-raffle-field_raffle_message'. + $field_instances['raffle-raffle-field_raffle_message'] = array( + 'bundle' => 'raffle', + 'default_value' => array( + 0 => array( + 'value' => '', + ), + ), + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'text', + 'settings' => array(), + 'type' => 'text_default', + 'weight' => 1, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'entity_type' => 'raffle', + 'field_name' => 'field_raffle_message', + 'label' => 'Raffle Message', + 'required' => 0, + 'settings' => array( + 'better_formats' => array( + 'allowed_formats' => array( + 'filtered_html' => 'filtered_html', + 'filtered_html_with_tables' => 'filtered_html_with_tables', + 'full_html' => 0, + 'php_code' => 0, + 'plain_text' => 'plain_text', + 'simple_html' => 'simple_html', + ), + 'allowed_formats_toggle' => 1, + 'default_order_toggle' => 0, + 'default_order_wrapper' => array( + 'formats' => array( + 'filtered_html' => array( + 'weight' => -9, + ), + 'filtered_html_with_tables' => array( + 'weight' => -7, + ), + 'full_html' => array( + 'weight' => -6, + ), + 'php_code' => array( + 'weight' => -4, + ), + 'plain_text' => array( + 'weight' => -5, + ), + 'simple_html' => array( + 'weight' => -10, + ), + ), + ), + ), + 'linkit' => array( + 'enable' => 0, + 'insert_plugin' => '', + ), + 'text_processing' => 1, + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'text', + 'settings' => array( + 'rows' => 5, + ), + 'type' => 'text_textarea', + 'weight' => 1, + ), + ); + + // Exported field_instance: 'raffle-raffle-field_raffle_reward'. + $field_instances['raffle-raffle-field_raffle_reward'] = array( + 'bundle' => 'raffle', + 'default_value_function' => '', + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'entityreference', + 'settings' => array( + 'link' => FALSE, + ), + 'type' => 'entityreference_label', + 'weight' => 0, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'entity_type' => 'raffle', + 'field_name' => 'field_raffle_reward', + 'label' => 'Raffle Reward', + 'required' => 0, + 'settings' => array( + 'behaviors' => array( + 'prepopulate' => array( + 'status' => 0, + ), + ), + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'inline_entity_form', + 'settings' => array( + 'fields' => array(), + 'type_settings' => array( + 'allow_existing' => 1, + 'allow_new' => 1, + 'delete_references' => 0, + 'label_plural' => 'entities', + 'label_singular' => 'entity', + 'match_operator' => 'CONTAINS', + 'override_labels' => 0, + ), + ), + 'type' => 'inline_entity_form', + 'weight' => 2, + ), + ); + + // Exported field_instance: 'raffle-raffle_entry-field_raffle_entry_raffle'. + $field_instances['raffle-raffle_entry-field_raffle_entry_raffle'] = array( + 'bundle' => 'raffle_entry', + 'default_value' => NULL, + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'entityreference', + 'settings' => array( + 'link' => FALSE, + ), + 'type' => 'entityreference_label', + 'weight' => 0, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'entity_type' => 'raffle', + 'field_name' => 'field_raffle_entry_raffle', + 'label' => 'Raffle Entry Raffle', + 'required' => FALSE, + 'settings' => array( + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'module' => 'options', + 'settings' => array( + 'apply_chosen' => '', + ), + 'type' => 'options_select', + 'weight' => 1, + ), + ); + + // Exported field_instance: 'raffle-raffle_winner-field_raffle_winner'. + $field_instances['raffle-raffle_winner-field_raffle_winner'] = array( + 'bundle' => 'raffle_winner', + 'default_value' => NULL, + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'entityreference', + 'settings' => array( + 'link' => FALSE, + ), + 'type' => 'entityreference_label', + 'weight' => 1, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'entity_type' => 'raffle', + 'field_name' => 'field_raffle_winner', + 'label' => 'Raffle Winner', + 'required' => 0, + 'settings' => array( + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'entityreference', + 'settings' => array( + 'match_operator' => 'CONTAINS', + 'path' => '', + 'size' => 60, + ), + 'type' => 'entityreference_autocomplete', + 'weight' => 2, + ), + ); + + // Exported field_instance: 'raffle-raffle_winner-field_raffle_winner_raffle'. + $field_instances['raffle-raffle_winner-field_raffle_winner_raffle'] = array( + 'bundle' => 'raffle_winner', + 'default_value' => NULL, + 'default_value_function' => 'entityreference_prepopulate_field_default_value', + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'entityreference', + 'settings' => array( + 'link' => FALSE, + ), + 'type' => 'entityreference_label', + 'weight' => 0, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'entity_type' => 'raffle', + 'field_name' => 'field_raffle_winner_raffle', + 'label' => 'Raffle Winner Raffle', + 'required' => 0, + 'settings' => array( + 'behaviors' => array( + 'prepopulate' => array( + 'action' => 'none', + 'action_on_edit' => 0, + 'fallback' => 'none', + 'providers' => array( + 'og_context' => FALSE, + 'url' => 1, + ), + 'skip_perm' => 0, + 'status' => 1, + ), + ), + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'options', + 'settings' => array( + 'apply_chosen' => '', + ), + 'type' => 'options_select', + 'weight' => 1, + ), + ); + + // Exported field_instance: 'reward-physical_reward-field_reward_message'. + $field_instances['reward-physical_reward-field_reward_message'] = array( + 'bundle' => 'physical_reward', + 'default_value' => NULL, + 'deleted' => 0, + 'description' => 'This is the message the user will see on the screen after winning a prize.', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'text', + 'settings' => array(), + 'type' => 'text_default', + 'weight' => 0, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'entity_type' => 'reward', + 'field_name' => 'field_reward_message', + 'label' => 'Reward Message', + 'required' => 0, + 'settings' => array( + 'better_formats' => array( + 'allowed_formats' => array( + 'filtered_html' => 'filtered_html', + 'filtered_html_with_tables' => 'filtered_html_with_tables', + 'full_html' => 'full_html', + 'php_code' => 'php_code', + 'plain_text' => 'plain_text', + 'simple_html' => 'simple_html', + ), + 'allowed_formats_toggle' => 0, + 'default_order_toggle' => 0, + 'default_order_wrapper' => array( + 'formats' => array( + 'filtered_html' => array( + 'weight' => -9, + ), + 'filtered_html_with_tables' => array( + 'weight' => -7, + ), + 'full_html' => array( + 'weight' => -6, + ), + 'php_code' => array( + 'weight' => -4, + ), + 'plain_text' => array( + 'weight' => -5, + ), + 'simple_html' => array( + 'weight' => -10, + ), + ), + ), + ), + 'linkit' => array( + 'enable' => 0, + 'insert_plugin' => '', + ), + 'text_processing' => 0, + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'text', + 'settings' => array( + 'rows' => 5, + ), + 'type' => 'text_textarea', + 'weight' => 0, + ), + ); + + // Exported field_instance: + // 'reward-physical_reward-field_reward_notification'. + $field_instances['reward-physical_reward-field_reward_notification'] = array( + 'bundle' => 'physical_reward', + 'default_value' => array( + 0 => array( + 'value' => '', + ), + ), + 'deleted' => 0, + 'description' => 'This is the message the user will receive via email / notification center.', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'text', + 'settings' => array(), + 'type' => 'text_default', + 'weight' => 1, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'entity_type' => 'reward', + 'field_name' => 'field_reward_notification', + 'label' => 'Reward Notification', + 'required' => 0, + 'settings' => array( + 'better_formats' => array( + 'allowed_formats' => array( + 'filtered_html' => 'filtered_html', + 'filtered_html_with_tables' => 'filtered_html_with_tables', + 'full_html' => 'full_html', + 'php_code' => 'php_code', + 'plain_text' => 'plain_text', + 'simple_html' => 'simple_html', + ), + 'allowed_formats_toggle' => 0, + 'default_order_toggle' => 0, + 'default_order_wrapper' => array( + 'formats' => array( + 'filtered_html' => array( + 'weight' => -9, + ), + 'filtered_html_with_tables' => array( + 'weight' => -7, + ), + 'full_html' => array( + 'weight' => -6, + ), + 'php_code' => array( + 'weight' => -4, + ), + 'plain_text' => array( + 'weight' => -5, + ), + 'simple_html' => array( + 'weight' => -10, + ), + ), + ), + ), + 'linkit' => array( + 'enable' => 0, + 'insert_plugin' => '', + ), + 'text_processing' => 1, + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'text', + 'settings' => array( + 'rows' => 5, + ), + 'type' => 'text_textarea', + 'weight' => 1, + ), + ); + + // Exported field_instance: 'reward-print_reward-field_print_reward_file'. + $field_instances['reward-print_reward-field_print_reward_file'] = array( + 'bundle' => 'print_reward', + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'file', + 'settings' => array(), + 'type' => 'file_default', + 'weight' => 0, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'entity_type' => 'reward', + 'field_name' => 'field_print_reward_file', + 'label' => 'Print Reward FIle', + 'required' => 0, + 'settings' => array( + 'description_field' => 0, + 'file_directory' => 'rewards/print', + 'file_extensions' => 'pdf jpg png', + 'max_filesize' => '', + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'file', + 'settings' => array( + 'filefield_sources' => array( + 'filefield_sources' => array( + 'attach' => 0, + 'clipboard' => 0, + 'imce' => 0, + 'reference' => 0, + 'remote' => 0, + 'upload' => 'upload', + ), + 'source_attach' => array( + 'absolute' => 0, + 'attach_mode' => 'move', + 'path' => 'file_attach', + ), + 'source_imce' => array( + 'imce_mode' => 0, + ), + 'source_reference' => array( + 'autocomplete' => 0, + ), + ), + 'progress_indicator' => 'throbber', + ), + 'type' => 'file_generic', + 'weight' => 1, + ), + ); + + // Exported field_instance: 'reward-print_reward-field_reward_message'. + $field_instances['reward-print_reward-field_reward_message'] = array( + 'bundle' => 'print_reward', + 'default_value' => NULL, + 'deleted' => 0, + 'description' => 'This the message the user will see on screen after winning the prize.', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'text', + 'settings' => array(), + 'type' => 'text_default', + 'weight' => 1, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'entity_type' => 'reward', + 'field_name' => 'field_reward_message', + 'label' => 'Reward Message', + 'required' => 0, + 'settings' => array( + 'better_formats' => array( + 'allowed_formats' => array( + 'filtered_html' => 'filtered_html', + 'filtered_html_with_tables' => 'filtered_html_with_tables', + 'full_html' => 'full_html', + 'php_code' => 'php_code', + 'plain_text' => 'plain_text', + 'simple_html' => 'simple_html', + ), + 'allowed_formats_toggle' => 0, + 'default_order_toggle' => 0, + 'default_order_wrapper' => array( + 'formats' => array( + 'filtered_html' => array( + 'weight' => -9, + ), + 'filtered_html_with_tables' => array( + 'weight' => -7, + ), + 'full_html' => array( + 'weight' => -6, + ), + 'php_code' => array( + 'weight' => -4, + ), + 'plain_text' => array( + 'weight' => -5, + ), + 'simple_html' => array( + 'weight' => -10, + ), + ), + ), + ), + 'linkit' => array( + 'enable' => 0, + 'insert_plugin' => '', + ), + 'text_processing' => 0, + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'text', + 'settings' => array( + 'rows' => 5, + ), + 'type' => 'text_textarea', + 'weight' => 3, + ), + ); + + // Exported field_instance: 'reward-print_reward-field_reward_notification'. + $field_instances['reward-print_reward-field_reward_notification'] = array( + 'bundle' => 'print_reward', + 'default_value' => array( + 0 => array( + 'value' => '', + ), + ), + 'deleted' => 0, + 'description' => 'This is the message the user will receive via email / notification center.', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'text', + 'settings' => array(), + 'type' => 'text_default', + 'weight' => 2, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'entity_type' => 'reward', + 'field_name' => 'field_reward_notification', + 'label' => 'Reward Notification', + 'required' => 0, + 'settings' => array( + 'better_formats' => array( + 'allowed_formats' => array( + 'filtered_html' => 'filtered_html', + 'filtered_html_with_tables' => 'filtered_html_with_tables', + 'full_html' => 'full_html', + 'php_code' => 'php_code', + 'plain_text' => 'plain_text', + 'simple_html' => 'simple_html', + ), + 'allowed_formats_toggle' => 0, + 'default_order_toggle' => 0, + 'default_order_wrapper' => array( + 'formats' => array( + 'filtered_html' => array( + 'weight' => -9, + ), + 'filtered_html_with_tables' => array( + 'weight' => -7, + ), + 'full_html' => array( + 'weight' => -6, + ), + 'php_code' => array( + 'weight' => -4, + ), + 'plain_text' => array( + 'weight' => -5, + ), + 'simple_html' => array( + 'weight' => -10, + ), + ), + ), + ), + 'linkit' => array( + 'enable' => 0, + 'insert_plugin' => '', + ), + 'text_processing' => 1, + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'text', + 'settings' => array( + 'rows' => 5, + ), + 'type' => 'text_textarea', + 'weight' => 5, + ), + ); + + // Exported field_instance: 'reward-reward-field_reward_badge'. + $field_instances['reward-reward-field_reward_badge'] = array( + 'bundle' => 'reward', + 'default_value_function' => '', + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'entityreference', + 'settings' => array( + 'link' => FALSE, + ), + 'type' => 'entityreference_label', + 'weight' => 1, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'entity_type' => 'reward', + 'field_name' => 'field_reward_badge', + 'label' => 'Reward Badge', + 'required' => 0, + 'settings' => array( + 'behaviors' => array( + 'prepopulate' => array( + 'status' => 0, + ), + ), + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'inline_entity_form', + 'settings' => array( + 'fields' => array(), + 'type_settings' => array( + 'allow_existing' => 0, + 'allow_new' => 1, + 'delete_references' => 0, + 'label_plural' => 'entities', + 'label_singular' => 'entity', + 'match_operator' => 'CONTAINS', + 'override_labels' => 0, + ), + ), + 'type' => 'inline_entity_form', + 'weight' => 2, + ), + ); + + // Exported field_instance: 'reward-reward-field_reward_message'. + $field_instances['reward-reward-field_reward_message'] = array( + 'bundle' => 'reward', + 'default_value' => array( + 0 => array( + 'value' => '', + 'format' => 'filtered_html', + ), + ), + 'deleted' => 0, + 'description' => 'This will be the message sent to the user for winning this. Please fill this out if they are winning a physical prize so they can try to redeem it.', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'text', + 'settings' => array(), + 'type' => 'text_default', + 'weight' => 2, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'entity_type' => 'reward', + 'field_name' => 'field_reward_message', + 'label' => 'Reward Message', + 'required' => 0, + 'settings' => array( + 'better_formats' => array( + 'allowed_formats' => array( + 'filtered_html' => 'filtered_html', + 'filtered_html_with_embed' => 0, + 'filtered_html_with_tables' => 0, + 'full_html' => 0, + 'php_code' => 0, + 'plain_text' => 0, + 'simple_html' => 'simple_html', + ), + 'allowed_formats_toggle' => 1, + 'default_order_toggle' => 0, + 'default_order_wrapper' => array( + 'formats' => array( + 'filtered_html' => array( + 'weight' => -10, + ), + 'filtered_html_with_embed' => array( + 'weight' => -8, + ), + 'filtered_html_with_tables' => array( + 'weight' => -7, + ), + 'full_html' => array( + 'weight' => -6, + ), + 'php_code' => array( + 'weight' => 11, + ), + 'plain_text' => array( + 'weight' => -5, + ), + 'simple_html' => array( + 'weight' => -9, + ), + ), + ), + ), + 'linkit' => array( + 'enable' => 0, + 'insert_plugin' => '', + ), + 'text_processing' => 1, + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'text', + 'settings' => array( + 'rows' => 5, + ), + 'type' => 'text_textarea', + 'weight' => 3, + ), + ); + + // Exported field_instance: 'reward-reward-field_reward_notification'. + $field_instances['reward-reward-field_reward_notification'] = array( + 'bundle' => 'reward', + 'default_value' => array( + 0 => array( + 'value' => '', + ), + ), + 'deleted' => 0, + 'description' => 'This the message notification sent out to the user, librarian for any physical rewards for the user.', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'text', + 'settings' => array(), + 'type' => 'text_default', + 'weight' => 3, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'entity_type' => 'reward', + 'field_name' => 'field_reward_notification', + 'label' => 'Reward Notification', + 'required' => 0, + 'settings' => array( + 'better_formats' => array( + 'allowed_formats' => array( + 'filtered_html' => 'filtered_html', + 'filtered_html_with_embed' => 0, + 'filtered_html_with_tables' => 0, + 'full_html' => 0, + 'php_code' => 0, + 'plain_text' => 0, + 'simple_html' => 'simple_html', + ), + 'allowed_formats_toggle' => 1, + 'default_order_toggle' => 0, + 'default_order_wrapper' => array( + 'formats' => array( + 'filtered_html' => array( + 'weight' => -10, + ), + 'filtered_html_with_embed' => array( + 'weight' => -8, + ), + 'filtered_html_with_tables' => array( + 'weight' => -7, + ), + 'full_html' => array( + 'weight' => -6, + ), + 'php_code' => array( + 'weight' => 11, + ), + 'plain_text' => array( + 'weight' => -5, + ), + 'simple_html' => array( + 'weight' => -9, + ), + ), + ), + ), + 'linkit' => array( + 'enable' => 0, + 'insert_plugin' => '', + ), + 'text_processing' => 1, + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'text', + 'settings' => array( + 'rows' => 5, + ), + 'type' => 'text_textarea', + 'weight' => 4, + ), + ); + + // Exported field_instance: 'reward-reward-field_reward_raffle'. + $field_instances['reward-reward-field_reward_raffle'] = array( + 'bundle' => 'reward', + 'default_value' => NULL, + 'default_value_function' => '', + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'entityreference', + 'settings' => array( + 'link' => FALSE, + ), + 'type' => 'entityreference_label', + 'weight' => 0, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'entity_type' => 'reward', + 'field_name' => 'field_reward_raffle', + 'label' => 'Reward Raffle', + 'required' => 0, + 'settings' => array( + 'behaviors' => array( + 'prepopulate' => array( + 'status' => 0, + ), + ), + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'options', + 'settings' => array( + 'apply_chosen' => '', + ), + 'type' => 'options_select', + 'weight' => 1, + ), + ); + + // Exported field_instance: 'reward-reward_claim-field_reward_claim_id'. + $field_instances['reward-reward_claim-field_reward_claim_id'] = array( + 'bundle' => 'reward_claim', + 'default_value' => NULL, + 'default_value_function' => '', + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'entityreference', + 'settings' => array( + 'link' => FALSE, + ), + 'type' => 'entityreference_label', + 'weight' => 0, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'entity_type' => 'reward', + 'field_name' => 'field_reward_claim_id', + 'label' => 'Reward Claim ID', + 'required' => 1, + 'settings' => array( + 'behaviors' => array( + 'prepopulate' => array( + 'status' => 0, + ), + ), + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'options', + 'settings' => array( + 'apply_chosen' => '', + ), + 'type' => 'options_select', + 'weight' => 1, + ), + ); + + // Exported field_instance: + // 'reward-reward_criteria-field_reward_criteria_activity'. + $field_instances['reward-reward_criteria-field_reward_criteria_activity'] = array( + 'bundle' => 'reward_criteria', + 'default_value_function' => '', + 'deleted' => 0, + 'description' => 'To tie the criteria with a specific activity, select or create a new activity. Note that the repeat criteria does *not* work with the specific activities.', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'entityreference', + 'settings' => array( + 'link' => FALSE, + ), + 'type' => 'entityreference_label', + 'weight' => 2, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'entity_type' => 'reward', + 'field_name' => 'field_reward_criteria_activity', + 'label' => 'Activity', + 'required' => 0, + 'settings' => array( + 'behaviors' => array( + 'prepopulate' => array( + 'status' => 0, + ), + ), + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'inline_entity_form', + 'settings' => array( + 'fields' => array(), + 'type_settings' => array( + 'allow_existing' => 1, + 'allow_new' => 1, + 'delete_references' => 0, + 'label_plural' => 'entities', + 'label_singular' => 'entity', + 'match_operator' => 'CONTAINS', + 'override_labels' => 0, + ), + ), + 'type' => 'inline_entity_form', + 'weight' => 4, + ), + ); + + // Exported field_instance: + // 'reward-reward_criteria-field_reward_criteria_date_limit'. + $field_instances['reward-reward_criteria-field_reward_criteria_date_limit'] = array( + 'bundle' => 'reward_criteria', + 'deleted' => 0, + 'description' => 'Date Limit range when the reward criteria is valid.', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'date', + 'settings' => array( + 'format_type' => 'long', + 'fromto' => 'both', + 'multiple_from' => '', + 'multiple_number' => '', + 'multiple_to' => '', + 'show_remaining_days' => FALSE, + ), + 'type' => 'date_default', + 'weight' => 4, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'entity_type' => 'reward', + 'field_name' => 'field_reward_criteria_date_limit', + 'label' => 'Date Limit Range', + 'required' => 1, + 'settings' => array( + 'default_value' => 'now', + 'default_value2' => 'strtotime', + 'default_value_code' => '', + 'default_value_code2' => 'now +3 years', + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'date', + 'settings' => array( + 'increment' => 15, + 'input_format' => 'M j Y - g:i:sa', + 'input_format_custom' => '', + 'label_position' => 'above', + 'no_fieldset' => 0, + 'text_parts' => array(), + 'year_range' => '-3:+3', + ), + 'type' => 'date_popup', + 'weight' => 1, + ), + ); + + // Exported field_instance: + // 'reward-reward_criteria-field_reward_criteria_point_mark'. + $field_instances['reward-reward_criteria-field_reward_criteria_point_mark'] = array( + 'bundle' => 'reward_criteria', + 'default_value' => array( + 0 => array( + 'value' => 1, + ), + ), + 'deleted' => 0, + 'description' => 'These are the number of *overall* points required to satisfy the requirements for a reward. These points can be earned through any activity. If you wish to track criteria by a specific activity, enter a large value (like 9999)', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'number', + 'settings' => array( + 'decimal_separator' => '.', + 'prefix_suffix' => TRUE, + 'scale' => 0, + 'thousand_separator' => ' ', + ), + 'type' => 'number_integer', + 'weight' => 0, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'entity_type' => 'reward', + 'field_name' => 'field_reward_criteria_point_mark', + 'label' => 'Points', + 'required' => 1, + 'settings' => array( + 'max' => '', + 'min' => 1, + 'prefix' => '', + 'suffix' => '', + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 0, + 'module' => 'number', + 'settings' => array(), + 'type' => 'number', + 'weight' => 0, + ), + ); + + // Exported field_instance: + // 'reward-reward_criteria-field_reward_criteria_repeatable'. + $field_instances['reward-reward_criteria-field_reward_criteria_repeatable'] = array( + 'bundle' => 'reward_criteria', + 'default_value' => array( + 0 => array( + 'value' => 0, + ), + ), + 'deleted' => 0, + 'description' => 'Is this criteria repeatable? Note that this setting is not compatible with an activity.', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'list', + 'settings' => array(), + 'type' => 'list_default', + 'weight' => 1, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'entity_type' => 'reward', + 'field_name' => 'field_reward_criteria_repeatable', + 'label' => 'Repeatable', + 'required' => 1, + 'settings' => array( + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'options', + 'settings' => array(), + 'type' => 'options_buttons', + 'weight' => 2, + ), + ); + + // Exported field_instance: + // 'reward-reward_criteria-field_reward_criteria_reward'. + $field_instances['reward-reward_criteria-field_reward_criteria_reward'] = array( + 'bundle' => 'reward_criteria', + 'default_value_function' => '', + 'deleted' => 0, + 'description' => 'The reward (or achievement) the user is going to receive. Rewards consist of badges, raffle entries, and anything else.', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'entityreference', + 'settings' => array( + 'link' => FALSE, + ), + 'type' => 'entityreference_label', + 'weight' => 3, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'entity_type' => 'reward', + 'field_name' => 'field_reward_criteria_reward', + 'label' => 'Reward', + 'required' => 0, + 'settings' => array( + 'behaviors' => array( + 'prepopulate' => array( + 'status' => 0, + ), + ), + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'inline_entity_form', + 'settings' => array( + 'fields' => array(), + 'type_settings' => array( + 'allow_existing' => 1, + 'allow_new' => 1, + 'delete_references' => 0, + 'label_plural' => 'entities', + 'label_singular' => 'entity', + 'match_operator' => 'CONTAINS', + 'override_labels' => 0, + ), + ), + 'type' => 'inline_entity_form', + 'weight' => 5, + ), + ); + + // Exported field_instance: 'reward-reward_criteria-field_reward_role_limits'. + $field_instances['reward-reward_criteria-field_reward_role_limits'] = array( + 'bundle' => 'reward_criteria', + 'default_value' => NULL, + 'deleted' => 0, + 'description' => 'Select roles to which reward is limited. Select none to make it available for all roles.', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'role_field', + 'settings' => array(), + 'type' => 'role_field_formatter', + 'weight' => 5, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'entity_type' => 'reward', + 'field_name' => 'field_reward_role_limits', + 'instance_cardinality' => 0, + 'label' => 'Reward Role Limits', + 'required' => 0, + 'settings' => array( + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'options', + 'settings' => array(), + 'type' => 'options_buttons', + 'weight' => 3, + ), + ); + + // Exported field_instance: 'reward-sticker-field_reward_message'. + $field_instances['reward-sticker-field_reward_message'] = array( + 'bundle' => 'sticker', + 'default_value' => NULL, + 'deleted' => 0, + 'description' => 'This the message user will see on screen after winning prize.', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'text', + 'settings' => array(), + 'type' => 'text_default', + 'weight' => 1, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'entity_type' => 'reward', + 'field_name' => 'field_reward_message', + 'label' => 'Reward Message', + 'required' => 0, + 'settings' => array( + 'better_formats' => array( + 'allowed_formats' => array( + 'filtered_html' => 'filtered_html', + 'filtered_html_with_tables' => 'filtered_html_with_tables', + 'full_html' => 'full_html', + 'php_code' => 'php_code', + 'plain_text' => 'plain_text', + 'simple_html' => 'simple_html', + ), + 'allowed_formats_toggle' => 0, + 'default_order_toggle' => 0, + 'default_order_wrapper' => array( + 'formats' => array( + 'filtered_html' => array( + 'weight' => -9, + ), + 'filtered_html_with_tables' => array( + 'weight' => -7, + ), + 'full_html' => array( + 'weight' => -6, + ), + 'php_code' => array( + 'weight' => -4, + ), + 'plain_text' => array( + 'weight' => -5, + ), + 'simple_html' => array( + 'weight' => -10, + ), + ), + ), + ), + 'linkit' => array( + 'enable' => 0, + 'insert_plugin' => '', + ), + 'text_processing' => 0, + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'text', + 'settings' => array( + 'rows' => 5, + ), + 'type' => 'text_textarea', + 'weight' => 3, + ), + ); + + // Exported field_instance: 'reward-sticker-field_reward_notification'. + $field_instances['reward-sticker-field_reward_notification'] = array( + 'bundle' => 'sticker', + 'default_value' => array( + 0 => array( + 'value' => '', + ), + ), + 'deleted' => 0, + 'description' => 'This is the message the user will receive via email / notification center.', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'text', + 'settings' => array(), + 'type' => 'text_default', + 'weight' => 2, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'entity_type' => 'reward', + 'field_name' => 'field_reward_notification', + 'label' => 'Reward Notification', + 'required' => 0, + 'settings' => array( + 'better_formats' => array( + 'allowed_formats' => array( + 'filtered_html' => 'filtered_html', + 'filtered_html_with_tables' => 'filtered_html_with_tables', + 'full_html' => 'full_html', + 'php_code' => 'php_code', + 'plain_text' => 'plain_text', + 'simple_html' => 'simple_html', + ), + 'allowed_formats_toggle' => 0, + 'default_order_toggle' => 0, + 'default_order_wrapper' => array( + 'formats' => array( + 'filtered_html' => array( + 'weight' => -9, + ), + 'filtered_html_with_tables' => array( + 'weight' => -7, + ), + 'full_html' => array( + 'weight' => -6, + ), + 'php_code' => array( + 'weight' => -4, + ), + 'plain_text' => array( + 'weight' => -5, + ), + 'simple_html' => array( + 'weight' => -10, + ), + ), + ), + ), + 'linkit' => array( + 'enable' => 0, + 'insert_plugin' => '', + ), + 'text_processing' => 1, + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'text', + 'settings' => array( + 'rows' => 5, + ), + 'type' => 'text_textarea', + 'weight' => 5, + ), + ); + + // Exported field_instance: 'reward-sticker-field_sticker_image'. + $field_instances['reward-sticker-field_sticker_image'] = array( + 'bundle' => 'sticker', + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'image', + 'settings' => array( + 'image_link' => '', + 'image_style' => '', + ), + 'type' => 'image', + 'weight' => 0, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'entity_type' => 'reward', + 'field_name' => 'field_sticker_image', + 'label' => 'Sticker Image', + 'required' => 0, + 'settings' => array( + 'alt_field' => 1, + 'default_image' => 0, + 'file_directory' => '', + 'file_extensions' => 'png gif jpg jpeg', + 'max_filesize' => '', + 'max_resolution' => '', + 'min_resolution' => '', + 'title_field' => 1, + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'image', + 'settings' => array( + 'filefield_sources' => array( + 'filefield_sources' => array( + 'attach' => 0, + 'clipboard' => 0, + 'imce' => 0, + 'reference' => 0, + 'remote' => 0, + 'upload' => 'upload', + ), + 'source_attach' => array( + 'absolute' => 0, + 'attach_mode' => 'move', + 'path' => 'file_attach', + ), + 'source_imce' => array( + 'imce_mode' => 0, + ), + 'source_reference' => array( + 'autocomplete' => 0, + ), + ), + 'preview_image_style' => 'thumbnail', + 'progress_indicator' => 'throbber', + ), + 'type' => 'image_image', + 'weight' => 1, + ), + ); + + // Translatables + // Included for use with string extractors like potx. + t('Activity'); + t('Activity Points'); + t('Activity Time Limit'); + t('Badge Image'); + t('Date Limit Range'); + t('Date Limit range when the reward criteria is valid.'); + t('Date of Raffle'); + t('Default number of points user gets for doing activity each time.'); + t('Is this criteria repeatable? Note that this setting is not compatible with an activity.'); + t('Number of times a user can perform an activity'); + t('Points'); + t('Print Reward FIle'); + t('Raffle Date'); + t('Raffle Entry Raffle'); + t('Raffle Message'); + t('Raffle Reward'); + t('Raffle Winner'); + t('Raffle Winner Raffle'); + t('Repeatable'); + t('Reward'); + t('Reward Badge'); + t('Reward Claim ID'); + t('Reward Message'); + t('Reward Notification'); + t('Reward Raffle'); + t('Reward Role Limits'); + t('Select roles to which reward is limited. Select none to make it available for all roles.'); + t('Select when the activity should be fired. Such as when a user signs up, when content is created/published, etc. If you do not select one, the option will show up in the activity menu for the user to select.'); + t('Sticker Image'); + t('The activity time limit ties to the activities the user can do as part of the \'what did you do today\' block. This does not apply to activities that are fired by other events.'); + t('The reward (or achievement) the user is going to receive. Rewards consist of badges, raffle entries, and anything else.'); + t('These are the number of *overall* points required to satisfy the requirements for a reward. These points can be earned through any activity. If you wish to track criteria by a specific activity, enter a large value (like 9999)'); + t('This is the message the user will receive via email / notification center.'); + t('This is the message the user will see on the screen after winning a prize.'); + t('This the message notification sent out to the user, librarian for any physical rewards for the user.'); + t('This the message the user will see on screen after winning the prize.'); + t('This the message user will see on screen after winning prize.'); + t('This will be the message sent to the user for winning this. Please fill this out if they are winning a physical prize so they can try to redeem it.'); + t('To tie the criteria with a specific activity, select or create a new activity. Note that the repeat criteria does *not* work with the specific activities.'); + t('Total limit on the number of times a user can perform activity in order to gain points. Minimum 1. To act as \'unlimited\', use a very high integer value (like 9999).'); + t('User Badge ID'); + t('When the activity will trigger points'); + + return $field_instances; +} diff --git a/docroot/sites/all/modules/features/play_library_program_teen/play_library_program_teen.features.inc b/docroot/sites/all/modules/features/play_library_program_teen/play_library_program_teen.features.inc new file mode 100644 index 00000000..84d07775 --- /dev/null +++ b/docroot/sites/all/modules/features/play_library_program_teen/play_library_program_teen.features.inc @@ -0,0 +1,228 @@ + "1"); + } + if ($module == "page_manager" && $api == "pages_default") { + return array("version" => "1"); + } +} + +/** + * Implements hook_views_api(). + */ +function play_library_program_teen_views_api($module = NULL, $api = NULL) { + return array("api" => "3.0"); +} + +/** + * Implements hook_eck_bundle_info(). + */ +function play_library_program_teen_eck_bundle_info() { + $items = array( + 'activity_activity' => array( + 'machine_name' => 'activity_activity', + 'entity_type' => 'activity', + 'name' => 'activity', + 'label' => 'Activity', + ), + 'activity_activity_entry' => array( + 'machine_name' => 'activity_activity_entry', + 'entity_type' => 'activity', + 'name' => 'activity_entry', + 'label' => 'Activity Entry', + ), + 'badge_badge' => array( + 'machine_name' => 'badge_badge', + 'entity_type' => 'badge', + 'name' => 'badge', + 'label' => 'Badge', + ), + 'badge_user_badge' => array( + 'machine_name' => 'badge_user_badge', + 'entity_type' => 'badge', + 'name' => 'user_badge', + 'label' => 'User Badge', + ), + 'raffle_raffle' => array( + 'machine_name' => 'raffle_raffle', + 'entity_type' => 'raffle', + 'name' => 'raffle', + 'label' => 'Raffle', + ), + 'raffle_raffle_entry' => array( + 'machine_name' => 'raffle_raffle_entry', + 'entity_type' => 'raffle', + 'name' => 'raffle_entry', + 'label' => 'Raffle Entry', + ), + 'raffle_raffle_winner' => array( + 'machine_name' => 'raffle_raffle_winner', + 'entity_type' => 'raffle', + 'name' => 'raffle_winner', + 'label' => 'Raffle Winner', + ), + 'reward_reward' => array( + 'machine_name' => 'reward_reward', + 'entity_type' => 'reward', + 'name' => 'reward', + 'label' => 'Reward', + ), + 'reward_reward_claim' => array( + 'machine_name' => 'reward_reward_claim', + 'entity_type' => 'reward', + 'name' => 'reward_claim', + 'label' => 'Reward Claim', + ), + 'reward_reward_criteria' => array( + 'machine_name' => 'reward_reward_criteria', + 'entity_type' => 'reward', + 'name' => 'reward_criteria', + 'label' => 'Reward Criteria', + ), + ); + return $items; +} + +/** + * Implements hook_eck_entity_type_info(). + */ +function play_library_program_teen_eck_entity_type_info() { + $items = array( + 'activity' => array( + 'name' => 'activity', + 'label' => 'Activity', + 'properties' => array( + 'title' => array( + 'label' => 'Title', + 'type' => 'text', + 'behavior' => 'title', + ), + 'uid' => array( + 'label' => 'Author', + 'type' => 'integer', + 'behavior' => 'author', + ), + 'created' => array( + 'label' => 'Created', + 'type' => 'integer', + 'behavior' => 'created', + ), + ), + ), + 'badge' => array( + 'name' => 'badge', + 'label' => 'Badge', + 'properties' => array( + 'title' => array( + 'label' => 'Title', + 'type' => 'text', + 'behavior' => 'title', + ), + 'uid' => array( + 'label' => 'Author', + 'type' => 'integer', + 'behavior' => 'author', + ), + 'created' => array( + 'label' => 'Created', + 'type' => 'integer', + 'behavior' => 'created', + ), + ), + ), + 'raffle' => array( + 'name' => 'raffle', + 'label' => 'Raffle', + 'properties' => array( + 'title' => array( + 'label' => 'Title', + 'type' => 'text', + 'behavior' => 'title', + ), + 'uid' => array( + 'label' => 'Author', + 'type' => 'integer', + 'behavior' => 'author', + ), + 'created' => array( + 'label' => 'Created', + 'type' => 'integer', + 'behavior' => 'created', + ), + ), + ), + 'reward' => array( + 'name' => 'reward', + 'label' => 'Reward', + 'properties' => array( + 'title' => array( + 'label' => 'Title', + 'type' => 'text', + 'behavior' => 'title', + ), + 'uid' => array( + 'label' => 'Author', + 'type' => 'integer', + 'behavior' => 'author', + ), + 'created' => array( + 'label' => 'Created', + 'type' => 'integer', + 'behavior' => 'created', + ), + ), + ), + ); + return $items; +} + +/** + * Implements hook_flag_default_flags(). + */ +function play_library_program_teen_flag_default_flags() { + $flags = array(); + // Exported flag: "Reward Claimed". + $flags['reward_claimed'] = array( + 'entity_type' => 'reward', + 'title' => 'Reward Claimed', + 'global' => 1, + 'types' => array( + 0 => 'reward_claim', + ), + 'flag_short' => 'Reward not yet claimed', + 'flag_long' => 'Click to claim reward', + 'flag_message' => 'Reward has been claimed by user', + 'unflag_short' => 'Reward Claimed', + 'unflag_long' => 'Click to unclaim reward', + 'unflag_message' => 'Reward not claimed by user', + 'unflag_denied_text' => '', + 'link_type' => 'toggle', + 'weight' => 0, + 'show_in_links' => array( + 'full' => 0, + 'teaser' => 0, + 'diff_standard' => 0, + 'token' => 0, + ), + 'show_as_field' => 1, + 'show_on_form' => 0, + 'access_author' => '', + 'show_contextual_link' => 0, + 'module' => 'play_library_program_teen', + 'locked' => array( + 0 => 'name', + ), + 'api_version' => 3, + ); + return $flags; + +} diff --git a/docroot/sites/all/modules/features/play_library_program_teen/play_library_program_teen.features.menu_custom.inc b/docroot/sites/all/modules/features/play_library_program_teen/play_library_program_teen.features.menu_custom.inc new file mode 100644 index 00000000..08bcdbb3 --- /dev/null +++ b/docroot/sites/all/modules/features/play_library_program_teen/play_library_program_teen.features.menu_custom.inc @@ -0,0 +1,25 @@ + 'navigation', + 'title' => 'Navigation', + 'description' => 'The Navigation menu contains links intended for site visitors. Links are added to the Navigation menu automatically by some modules.', + ); + // Translatables + // Included for use with string extractors like potx. + t('Navigation'); + t('The Navigation menu contains links intended for site visitors. Links are added to the Navigation menu automatically by some modules.'); + + return $menus; +} diff --git a/docroot/sites/all/modules/features/play_library_program_teen/play_library_program_teen.info b/docroot/sites/all/modules/features/play_library_program_teen/play_library_program_teen.info new file mode 100644 index 00000000..7f9bca67 --- /dev/null +++ b/docroot/sites/all/modules/features/play_library_program_teen/play_library_program_teen.info @@ -0,0 +1,121 @@ +name = PLAY Library Program +core = 7.x +package = PAYL +version = 7.x-1.1 +project = play_library_program +dependencies[] = ctools +dependencies[] = date +dependencies[] = ds +dependencies[] = eck +dependencies[] = eck +dependencies[] = entity +dependencies[] = entityreference +dependencies[] = features +dependencies[] = file +dependencies[] = flag +dependencies[] = image +dependencies[] = inline_entity_form +dependencies[] = list +dependencies[] = menu +dependencies[] = number +dependencies[] = options +dependencies[] = page_manager +dependencies[] = panels +dependencies[] = role_field +dependencies[] = rules +dependencies[] = text +dependencies[] = views +dependencies[] = views_content +features[ctools][] = ds:ds:1 +features[ctools][] = page_manager:pages_default:1 +features[ctools][] = views:views_default:3.0 +features[ds_field_settings][] = raffle|raffle|default +features[ds_fields][] = raffle_entries +features[ds_fields][] = raffle_winners +features[ds_layout_settings][] = raffle|raffle|default +features[eck_bundle][] = activity_activity +features[eck_bundle][] = activity_activity_entry +features[eck_bundle][] = badge_badge +features[eck_bundle][] = badge_user_badge +features[eck_bundle][] = raffle_raffle +features[eck_bundle][] = raffle_raffle_entry +features[eck_bundle][] = raffle_raffle_winner +features[eck_bundle][] = reward_reward +features[eck_bundle][] = reward_reward_claim +features[eck_bundle][] = reward_reward_criteria +features[eck_entity_type][] = activity +features[eck_entity_type][] = badge +features[eck_entity_type][] = raffle +features[eck_entity_type][] = reward +features[features_api][] = api:2 +features[field_base][] = field_activity_entry_activity +features[field_base][] = field_activity_fired_hook +features[field_base][] = field_activity_limit +features[field_base][] = field_activity_points +features[field_base][] = field_activity_time_limit +features[field_base][] = field_badge_image +features[field_base][] = field_print_reward_file +features[field_base][] = field_raffle_date +features[field_base][] = field_raffle_entry_raffle +features[field_base][] = field_raffle_message +features[field_base][] = field_raffle_reward +features[field_base][] = field_raffle_winner +features[field_base][] = field_raffle_winner_raffle +features[field_base][] = field_reward_badge +features[field_base][] = field_reward_claim_id +features[field_base][] = field_reward_criteria_activity +features[field_base][] = field_reward_criteria_date_limit +features[field_base][] = field_reward_criteria_point_mark +features[field_base][] = field_reward_criteria_repeatable +features[field_base][] = field_reward_criteria_reward +features[field_base][] = field_reward_message +features[field_base][] = field_reward_notification +features[field_base][] = field_reward_raffle +features[field_base][] = field_reward_role_limits +features[field_base][] = field_sticker_image +features[field_base][] = field_user_badge_id +features[field_instance][] = activity-activity-field_activity_fired_hook +features[field_instance][] = activity-activity-field_activity_limit +features[field_instance][] = activity-activity-field_activity_points +features[field_instance][] = activity-activity-field_activity_time_limit +features[field_instance][] = activity-activity_entry-field_activity_entry_activity +features[field_instance][] = badge-badge-field_badge_image +features[field_instance][] = badge-user_badge-field_user_badge_id +features[field_instance][] = raffle-raffle-field_raffle_date +features[field_instance][] = raffle-raffle-field_raffle_message +features[field_instance][] = raffle-raffle-field_raffle_reward +features[field_instance][] = raffle-raffle_entry-field_raffle_entry_raffle +features[field_instance][] = raffle-raffle_winner-field_raffle_winner +features[field_instance][] = raffle-raffle_winner-field_raffle_winner_raffle +features[field_instance][] = reward-physical_reward-field_reward_message +features[field_instance][] = reward-physical_reward-field_reward_notification +features[field_instance][] = reward-print_reward-field_print_reward_file +features[field_instance][] = reward-print_reward-field_reward_message +features[field_instance][] = reward-print_reward-field_reward_notification +features[field_instance][] = reward-reward-field_reward_badge +features[field_instance][] = reward-reward-field_reward_message +features[field_instance][] = reward-reward-field_reward_notification +features[field_instance][] = reward-reward-field_reward_raffle +features[field_instance][] = reward-reward_claim-field_reward_claim_id +features[field_instance][] = reward-reward_criteria-field_reward_criteria_activity +features[field_instance][] = reward-reward_criteria-field_reward_criteria_date_limit +features[field_instance][] = reward-reward_criteria-field_reward_criteria_point_mark +features[field_instance][] = reward-reward_criteria-field_reward_criteria_repeatable +features[field_instance][] = reward-reward_criteria-field_reward_criteria_reward +features[field_instance][] = reward-reward_criteria-field_reward_role_limits +features[field_instance][] = reward-sticker-field_reward_message +features[field_instance][] = reward-sticker-field_reward_notification +features[field_instance][] = reward-sticker-field_sticker_image +features[flag][] = reward_claimed +features[menu_custom][] = navigation +features[page_manager_pages][] = admin_dashboard +features[rules_config][] = rules_reward_physical_won +features[views_view][] = activity_dashboard +features[views_view][] = badges_dashboard +features[views_view][] = global_reward_dashboard +features[views_view][] = raffle_dashboard +features[views_view][] = raffle_entrants +features[views_view][] = raffle_winner +features[views_view][] = reward_dashboard +features[views_view][] = rewards_user +project path = sites/all/modules/features diff --git a/docroot/sites/all/modules/features/play_library_program_teen/play_library_program_teen.module b/docroot/sites/all/modules/features/play_library_program_teen/play_library_program_teen.module new file mode 100755 index 00000000..852c6bfe --- /dev/null +++ b/docroot/sites/all/modules/features/play_library_program_teen/play_library_program_teen.module @@ -0,0 +1,1180 @@ + 'Complete Activity', + 'page callback' => 'play_library_program_complete_activity', + 'page arguments' => array(3, 4), + 'access callback' => 'play_library_program_access_activity_entry', + 'access arguments' => array(3), + 'type' => MENU_CALLBACK, + ); + + $items['play-library-program/add/raffle_winner/%/%'] = array( + 'title' => 'Complete Activity', + 'page callback' => 'play_library_program_create_raffle_winner', + 'page arguments' => array(3, 4), + 'access callback' => 'user_access', + 'access arguments' => array('eck add raffle raffle_winner entities'), + 'type' => MENU_CALLBACK, + ); + + return $items; +} + +/** + * Access control to access activity entry creation. + */ +function play_library_program_access_activity_entry($activity_id) { + + global $user; + $activities = entity_load('activity', array($activity_id)); + $activity = reset($activities); + $points = intval($activity->field_activity_points[LANGUAGE_NONE][0]['value']); + $daily_limit = FALSE; + $current_participation_count = play_library_program_retrieve_activity_participation($activity_id, $user->uid); + if ($current_participation_count > 0) { + $last_entry = db_query("SELECT created FROM {eck_activity} WHERE uid = :uid ORDER BY created DESC LIMIT 1", array(':uid' => $user->uid))->fetchField(); + if ((time() - $activity->field_activity_time_limit[LANGUAGE_NONE][0]['value']) < $last_entry) { + return FALSE; + } + } + if ($points > 0 && $current_participation_count <= $activity->field_activity_limit[LANGUAGE_NONE][0]['value']) { + return user_access('eck add activity activity_entry entities') || user_access('eck add activity entities') || user_access('eck add entities'); + } + return FALSE; +} + +/** + * Implements hook_block_info(). + */ +function play_library_program_teen_block_info() { + $blocks = array(); + + $blocks['activities'] = array( + 'info' => t('PLAY Program activities'), + 'cache' => DRUPAL_NO_CACHE + ); + + return $blocks; +} + +/** + * Implements hook_block_view(). + */ +function play_library_program_teen_block_view($delta = '') { + $block = array(); + + if ($delta == 'activities') { + $pending_activities = array(); + $completed_activities = array(); + $query = new EntityFieldQuery(); + $query->entityCondition('entity_type', 'activity'); + $query->entityCondition('bundle', 'activity'); + $query->fieldCondition('field_activity_fired_hook', 'value', 'via_block'); + $result = $query->execute(); + foreach ($result as $entity_key => $entity_values) { + if ($entity_key == 'activity') { + foreach ($entity_values as $entity) { + $activities = entity_load('activity', array($entity->id)); + $activity = reset($activities); + if (play_library_program_access_activity_entry($entity->id)) { + $pending_activities[] = l($activity->title, "play-library-program/add/activity/{$activity->id}/nojs"); + } + else { + $completed_activities[] = check_plain($activity->title); + } + } + } + } + $block['subject'] = t('What did you do today?'); + $block['content'] = theme('play_library_program_teen_activities_block', array('pending' => $pending_activities, 'completed' => $completed_activities)); + } + + return $block; +} + +/** + * Implements hook_field_widget_form_alter(). + */ +function play_library_program_teen_field_widget_form_alter(&$element, &$form_state, $context) { + if (isset($element['value']['#field_name']) && $element['value']['#field_name'] == 'field_activity_fired_hook') { + $options = array( + 'via_block' => t('- Select Firing Hook -'), + 'user_insert' => t('User just registered'), + ); + // For now, only deal with nodes and other ECK content models. + $entities = entity_get_info(); + foreach($entities as $entity_key => $entity) { + if ($entity_key == 'node') { + $entity['module'] = 'node'; + } + if (isset($entity['module']) && ($entity['module'] == 'eck' || $entity['module'] == 'node')) { + + foreach ($entity['bundles'] as $bundle_key => $bundle_options) { + //echo "
        ";
        +					//print_r($bundle_options['label']);
        +					 
        +				 if($entity_key == 'node' && $bundle_options['label'] == 'sticker') {
        +					 //$options["entity_insert|{$entity_key}|{$bundle_key}"] = t("Place @bundle on progress report", array('@bundle' => $bundle_options['label']));
        +					$options["node_update|node|{$bundle_key}|updated"] = t("Record through progress report", array('@bundle' => $bundle_options['label']));
        +				 }
        +				 // if($bundle_options['label'] == 'Raffle Winner') {
        +				 // $options["entity_insert|{$entity_key}|{$bundle_key}"] = t("Insert new @bundle", array('@bundle' => $bundle_options['label']));
        +
        +				 // }
        +
        +					if ($entity_key == 'node' && ($bundle_options['label'] == 'Booklist' || $bundle_options['label'] == 'Book Review' || $bundle_options['label'] == 'Movie Review' || $bundle_options['label'] == 'Video Game Review' || $bundle_options['label'] == 'Music Review' || $bundle_options['label'] == 'Activity Review')) {
        +						$options["node_update|node|{$bundle_key}|published"] = t("@bundle is set to published", array('@bundle' => $bundle_options['label']));
        +					}
        +				}
        +			}
        +		}
        +    if (module_exists('poll')) {
        +			
        +			
        +				$options["Poll answer submitted"] = t('Poll vote submitted');
        +		
        +		}
        +
        +		if (module_exists('webform')) {
        +			$webforms = _play_library_program_get_webforms();
        +			foreach ($webforms as $webform) {
        +				$options["webform_submit|{$webform->nid}"] = t('@webform Survey participation', array('@webform' => $webform->title));
        +			}
        +		}
        +		$element['value']['#type'] = 'select';
        +		$element['value']['#options'] = $options;
        +		$element['value']['#size'] = 0;
        +	}
        +}
        +
        +/**
        + * Implements hook_user_insert(). change
        + */
        +function play_library_program_teen_user_insert(&$edit, $account, $category) {
        +	$query = new EntityFieldQuery();
        +	$query->entityCondition('entity_type', 'activity');
        +	$query->entityCondition('bundle', 'activity');
        +	$query->fieldCondition('field_activity_fired_hook', 'value', 'user_insert');
        +	$result = $query->execute();
        +  
        +  // set user age in session to use in reward validation
        +  $_SESSION['user_birth_dt'] = strtotime($edit['profile_main']['field_user_birthday'][LANGUAGE_NONE][0]['value']);
        +	foreach ($result as $entity_key => $entity_values) {
        +		if ($entity_key == 'activity') {
        +			foreach ($entity_values as $entity) {
        +				play_library_program_create_activity_entry($entity->id, $account->uid);
        +			}
        +		}
        +	}
        +}
        +
        +function play_library_program_teen_node_presave($node) {
        +  
        +    if(!is_program_active_teen()) {
        +	  drupal_goto('home');
        +      return FALSE;
        +    }
        +}
        +
        +function play_library_program_teen_webform_submission_presave($node, &$submission) {
        +  if(!is_program_active_teen()) {
        +	drupal_goto('home');
        +    return FALSE;
        +  }
        +}
        +
        +
        +/**
        + * Implements hook_entity_insert().
        + */
        +function play_library_program_teen_entity_insert($entity, $type) {
        +
        +	if(!is_program_active_teen()) {		
        +	
        +      return FALSE;
        +    }    
        +
        +	// Could be node, could be eck, could be something else, but easy to check.
        +	if (!isset($entity->type)) {
        +		return;
        +	}
        +	// Also hardcoding that we do not create *new* activity entries for an
        +	// activity entry.
        +	if ($entity->type !== 'activity_entry') {
        +		_play_library_program_invoke_activity_entry_hooks($entity, $type);
        +	}
        +
        +	if ($entity->type == 'activity_entry') {
        +		_play_library_program_process_activity_entry($entity, $type);
        +	}
        +
        +	if ($entity->type == 'reward_claim') {
        +		_play_library_program_process_user_reward_claim($entity, $type);
        +	}
        +}
        +
        +/**
        + * Implements hook_node_update().
        + */
        +function play_library_program_teen_node_update($node) {
        +	if ($node->status == NODE_PUBLISHED) {
        +		$current_node = node_load($node->nid);
        +		if ($current_node->status !== $node->status) {
        +			if($node->type == 'review_book' || $node->type == 'review_activity' || $node->type == 'movie_review' || $node->type == 'music_review' || $node->type == 'video_game_review') {
        +              $hook = "node_update|node|{$node->type}|published";
        +			  _play_library_program_invoke_activity_entry_hooks($node, 'node', $hook);
        +			  $node->workbench_moderation['updating_live_revision'] = 1;
        +            }
        +			else {
        +		      $hook = "node_update|node|{$node->type}|published";
        +			  _play_library_program_invoke_activity_entry_hooks($node, 'node', $hook);
        +			}
        +			
        +			
        +		}
        +	}
        +}
        +
        +/**
        + * Implements hook_webform_submission_insert().
        + */
        +function play_library_program_teen_webform_submission_insert($webform, $submission) {
        +	$hook = "webform_submit|{$webform->nid}";
        +	_play_library_program_invoke_activity_entry_hooks($submission, 'webform', $hook);
        +}
        +
        +/**
        + * Implements hook_theme().
        + */
        +function play_library_program_teen_theme($existing, $type, $theme, $path) {
        +	return array(
        +		'play_library_program_activities_block' => array(
        +			'variables' => array('pending' => NULL, 'completed' => NULL),
        +			'template' => 'play-library-program-activities-block',
        +		),
        +	);
        +}
        +
        +/**
        + * Implements hook_userpoints().
        + */
        +function play_library_program_teen_userpoints($op, &$params = array()) {
        +	if ($op == 'points after') {
        +		$user_points = userpoints_get_current_points($params['uid']);
        +		$user_pre_points = $user_points - $params['points'];
        +		$tier_rewards = _play_library_program_get_global_reward_ids($user_pre_points, $user_points, $params['uid']);
        +		foreach ($tier_rewards as $rid) {
        +			play_library_program_create_reward_claim($rid, $params['uid']);
        +		}
        +	}
        +}
        +
        +/**
        + * Implements hook_action_info().
        + */
        +function play_library_program_teen_action_info() {
        +	return array(
        +		'play_library_program_assign_reward_action' => array(
        +			'label' => t('Assign reward to each user'),
        +			'type' => 'user',
        +			'configurable' => TRUE,
        +			'vbo_configurable' => TRUE,
        +			'triggers' => array('any'),
        +		),
        +		'play_library_program_assign_userpoints_action' => array(
        +			'label' => t('Assign userpoints to each user'),
        +			'type' => 'user',
        +			'configurable' => TRUE,
        +			'vbo_configurable' => TRUE,
        +			'triggers' => array('any'),
        +		),
        +	);
        +}
        +
        +function play_library_program_assign_reward_action_form($context, $form_state) {
        +	$query = new EntityFieldQuery();
        +	$query->entityCondition('entity_type', 'reward');
        +	$query->entityCondition('bundle', array('physical_reward', 'print_reward', 'reward', 'sticker'));
        +	$results = $query->execute();
        +	$rewards = entity_load('reward', array_keys($results['reward']));
        +	$rewards_options = array();
        +	foreach ($rewards as $reward) {
        +		$rewards_options[$reward->id] = t('@reward_title (@reward_type)', array('@reward_title' => $reward->title, '@reward_type' => $reward->type));
        +	}
        +
        +	$form['reward'] = array(
        +		'#title' => t('Reward'),
        +		'#type' => 'select',
        +		'#options' => $rewards_options,
        +		'#description' => t('Which reward are we going to assign to users?'),
        +		'#default_value' => isset($context['author']) ? $context['author'] : '',
        +		'#required' => TRUE,
        +	);
        +	return $form;
        +}
        +
        +function play_library_program_assign_reward_action_submit($form, $form_state) {
        +	return array('reward' => $form_state['values']['reward']);
        +}
        +
        +/**
        + * Assign reward action via bulk operation.
        + */
        +function play_library_program_assign_reward_action($account, $context) {
        +	$reward_id = $context['reward'];
        +	$account_uid = $account->uid;
        +	play_library_program_create_reward_claim($reward_id, $account);
        +}
        +
        +function play_library_program_assign_userpoints_action_form($context, $form_state) {
        +	$points = array();
        +	for ($i = 1; $i <= 10; $i++) {
        +		$points[$i] = $i;
        +	}
        +	$form['points'] = array(
        +		'#title' => t('Points'),
        +		'#type' => 'select',
        +		'#options' => $points,
        +		'#description' => t('How many points should the user receive?'),
        +		'#default_value' => isset($context['points']) ? $context['points'] : 1,
        +		'#required' => TRUE,
        +	);
        +	return $form;
        +}
        +
        +function play_library_program_assign_userpoints_action_submit($form, $form_state) {
        +	return array('points' => $form_state['values']['points']);
        +}
        +
        +/**
        + * Assign reward action via bulk operation.
        + */
        +function play_library_program_assign_userpoints_action($account, $context) {
        +	$userpoints_txn = array(
        +		'uid' => $account->uid,
        +		'points' => $context['points'],
        +	);
        +	userpoints_userpointsapi($userpoints_txn);
        +}
        +
        +/**
        + * Creates an activity entry for non-actioned items.
        + */
        +function play_library_program_complete_activity($activity_id, $type = 'nojs') {
        +	global $user;
        +	$activity_entry = play_library_program_create_activity_entry($activity_id, $user->uid);
        +	if ($type == 'nojs') {
        +		drupal_goto('');
        +	}
        +}
        +
        +/**
        + * Creates a new raffle winner.
        + */
        +function play_library_program_create_raffle_winner($raffle_id, $uid) {
        +	global $user;
        +	$raffles = entity_load('raffle', array($raffle_id));
        +	$raffle = reset($raffles);
        +	$title = t("@raffle winner on @time", array('@raffle' => $raffle->title, '@time' => date('Y-m-d H:i')));
        +	$raffle_winner = entity_create('raffle', array('type' => 'raffle_winner', 'title' => $title, 'uid' => $uid));
        +	$raffle_winner->field_raffle_winner_raffle[LANGUAGE_NONE][0]['target_id'] = $raffle->id;
        +	$raffle_winner->field_raffle_winner[LANGUAGE_NONE][0]['target_id'] = $uid;
        +	entity_save('raffle', $raffle_winner);
        +	//drupal_goto('raffle/raffle/' . $raffle_id);
        +}
        +
        +/**
        + * Retrieves how many times an activity has been performed.
        + */
        +function play_library_program_retrieve_activity_participation($activity_id, $account_id) {
        +	$query = new EntityFieldQuery();
        +	$query->entityCondition('entity_type', 'activity');
        +	$query->entityCondition('bundle', 'activity_entry');
        +	$query->propertyCondition('uid', $account_id);
        +	$query->fieldCondition('field_activity_entry_activity', 'target_id', $activity_id);
        +	return $query->count()->execute();
        +}
        +
        +/**
        + * Creates a new activity entry
        + */
        +function play_library_program_create_activity_entry($activity_id, $account_id) {
        +	$activities = entity_load('activity', array($activity_id));
        +	$activity = reset($activities);
        +	
        +	$activity_point = $activity->field_activity_points[LANGUAGE_NONE][0]['value']; 
        +	$title = t("@activity on @time", array('@activity' => $activity->title, '@time' => date('Y-m-d H:i')));
        +	$activity_entry = entity_create('activity', array('type' => 'activity_entry', 'title' => $title, 'uid' => $account_id));
        +
        +	$activity_entry->field_activity_entry_activity[LANGUAGE_NONE][0]['target_id'] = $activity->id;
        +	$activity_entry->field_activity_point[LANGUAGE_NONE][0]['value'] = $activity_point;
        +
        +	entity_save('activity', $activity_entry);
        +}
        +
        +/**
        + * Creates a new reward claim
        + */
        +function play_library_program_create_reward_claim($reward_id, $account_id, $raffle_reward_claim = 0) {
        +	global $user;
        +	$uid = $user->uid;
        +
        +  // query to check if reward is associates with raffle
        +  $que = db_select('eck_reward', 'eck_r');
        +  $que->join('field_data_field_reward_raffle', 're_ra', 'eck_r.id = re_ra.entity_id');
        +  $que->join('eck_raffle', 'eck_rf', 'eck_rf.id = re_ra.field_reward_raffle_target_id');
        +  $que->condition('eck_r.id', $reward_id);
        +  $que->condition('eck_rf.type', 'raffle');
        +  $que->fields('eck_rf', array('type'));
        +  $res = $que->execute();
        +  $is_raffle_reward = $res->rowCount();
        +  
        +  // raffle entry will only happen if the current reward_id is linked to a raffle and 
        +  // we are not claimimg raffle reward 
        +  if($is_raffle_reward && !$raffle_reward_claim) {
        +	  $que = db_select('eck_reward', 'eck_r');
        +	  $que->join('field_data_field_reward_raffle', 're_ra', 'eck_r.id = re_ra.entity_id');
        +	  $que->join('eck_raffle', 'eck_rf', 'eck_rf.id = re_ra.field_reward_raffle_target_id');
        +	  $que->condition('eck_r.id', $reward_id, '=');
        +	  $que->fields('eck_rf', array('id'));
        +	  $re = $que->execute()->fetchField();
        + 
        +	  play_library_program_create_raffle_entry($re, $account_id);
        +	} else {
        +    	$rewards = entity_load('reward', array($reward_id));
        +	    $reward = reset($rewards);
        +	    $title = t("@reward on @time", array('@reward' => $reward->title, '@time' => date('Y-m-d H:i')));
        +    	$reward_claim = entity_create('reward', array('type' => 'reward_claim', 'title' => $title, 'uid' => $account_id));
        +	    $reward_claim->field_reward_claim_id[LANGUAGE_NONE][0]['target_id'] = $reward->id;
        +		  entity_save('reward', $reward_claim);
        +	}
        +
        +	$rew_id = $reward_claim->id;
        +
        +	$query = db_select('eck_reward','rew');
        +	$query->join('field_data_field_reward_claim_id','claim_id','claim_id.entity_id = rew.id');
        +	$query->fields('rew',array('title','id','uid','type'));
        +	$query->fields('claim_id',array('field_reward_claim_id_target_id'));
        +	$query->condition('type','reward_claim');
        +	$query->condition('uid',$account_id,'=');
        +	$query->condition('id',$rew_id,'=');
        +	$result = $query->execute()
        +	->fetchAll();
        +
        +	foreach($result as $reward_msg){
        +	  $res_title = $reward_msg->title;
        +	  $res_id = $reward_msg->id;
        +	  $res_uid = $reward_msg->uid;
        +	  $res_type = $reward_msg->type;
        +	  $res_entity_id = $reward_msg->field_reward_claim_id_target_id;
        +
        +	  $sub_query_msg = db_select('field_data_field_reward_message','msg');
        +	  $sub_query_msg->join('field_data_field_reward_notification','noti','noti.entity_id = msg.entity_id');
        +	  $sub_query_msg->fields('msg',array('field_reward_message_value'));
        +	  $sub_query_msg->fields('noti',array('field_reward_notification_value'));
        +	  $sub_query_msg->condition('msg.entity_id',$res_entity_id);
        +	  $sub_query = $sub_query_msg->execute()->fetchAll();
        +
        +	  foreach($sub_query as $onscreen_msg){
        +	    $msg_notifications = $onscreen_msg->field_reward_message_value;
        +	    $mail_notifications = $onscreen_msg->field_reward_notification_value;
        +	  }
        +
        +	  db_insert('reward_notification_patron_teen')
        +	   ->fields(array(
        +	    'reward_name' => $res_title,
        +	    'reward_id' => $res_id,
        +	    'uid' => $res_uid,
        +	    'type' => $res_type,
        +	    'reward_notifications' => $msg_notifications,
        +	    'reward_mail_notifications' => $mail_notifications,
        +	    ))
        +	   ->execute();
        +	}
        +}
        +
        +/**
        + * Creates a new raffle entry
        + */
        +function play_library_program_create_raffle_entry($raffle_id, $account_id) {
        +
        +  $user_uid = variable_get('follow_author');
        +  $author_name = user_load_by_name($user_uid);
        +  $author_uid = $author_name->uid;
        +
        +  $raffles = entity_load('raffle', array($raffle_id));
        +  $raffle = reset($raffles);
        +
        +  $title = t("@raffle on @time", array('@raffle' => $raffle->title, '@time' => date('Y-m-d H:i')));
        +  $raffle_entry = entity_create('raffle', array('type' => 'raffle_entry', 'title' => $title, 'uid' => $account_id));
        +  $raffle_entry->field_raffle_entry_raffle[LANGUAGE_NONE][0]['target_id'] = $raffle->id;
        +  entity_save('raffle', $raffle_entry);
        +
        +  $query = db_select('field_data_field_reward_message', 'fdfrm');
        +  $query->join('field_data_field_reward_raffle', 'fdfrf', 'fdfrf.entity_id = fdfrm.entity_id');
        +  $query->join('field_data_field_reward_notification', 'fdfrn', 'fdfrn.entity_id = fdfrf.entity_id');
        +  $query->condition('field_reward_raffle_target_id', $raffle_id);
        +  $query->fields('fdfrm', array('field_reward_message_value'));
        +  $query->fields('fdfrn', array('field_reward_notification_value'));
        +  $res = $query->execute()->fetchAll();
        +  $message = $res[0]->field_reward_message_value;
        +  $notification = $res[0]->field_reward_notification_value;
        +  $notification_subject = "Congratulations! You've earned a raffle ticket.";
        +
        +  privatemsg_new_thread(array(user_load($account_id)), $notification_subject, $notification,array('author'=>user_load($author_uid)));
        +  drupal_set_message($message);
        +}
        +
        +/**
        + * Creates a new badge entry.
        + */
        +function play_library_program_add_user_badge($badge_id, $account_id) {
        +	$query = new EntityFieldQuery();
        +	$query->entityCondition('entity_type', 'badge');
        +	$query->entityCondition('bundle', 'user_badge');
        +	$query->propertyCondition('uid', $account_id);
        +	$query->fieldCondition('field_user_badge_id', 'target_id', $badge_id);
        +	$count = $query->count()->execute();
        +	if (!empty($count)) {
        +		return;
        +	}
        +
        +	$badges = entity_load('badge', array($badge_id));
        +	$badge = reset($badges);
        +	$title = t("@badge on @time", array('@badge' => $badge->title, '@time' => date('Y-m-d H:i')));
        +	$user_badge = entity_create('badge', array('type' => 'user_badge', 'title' => $title, 'uid' => $account_id));
        +	$user_badge->field_user_badge_id[LANGUAGE_NONE][0]['target_id'] = $badge->id;
        +	entity_save('raffle', $user_badge);
        +}
        +
        +function _play_library_program_get_webforms() {
        +	$query = db_select('webform', 'w');
        +	$query->join('node', 'n', 'w.nid = n.nid');
        +	$query->fields('n');
        +	return $query->execute()->fetchAllAssoc('nid');
        +}
        +
        +/**
        + * Performs general firing hook check to create new activity entries
        + */
        +function _play_library_program_invoke_activity_entry_hooks($entity, $type, $invoked_hook = '', $update_points = 0) {
        +
        +  $entity_nid = $entity->nid;
        +
        +  $query = db_select('node_revision','nr')
        +  ->fields('nr',array('vid'))
        +  ->condition('nid',$entity_nid)
        +  ->execute();
        +
        +  $num_of_nodes = $query->rowCount();
        +
        +	$hook = $invoked_hook;
        +	if (empty($hook)) {
        +		$hook = "entity_insert|{$type}|{$entity->type}";
        +	}
        +
        +  if($num_of_nodes <= 2){
        +
        +  	$query = new EntityFieldQuery();
        +  	$query->entityCondition('entity_type', 'activity');
        +  	$query->entityCondition('bundle', 'activity');
        +  	$query->fieldCondition('field_activity_fired_hook', 'value', $hook);
        +  	$result = $query->execute();
        +
        +  	foreach ($result as $entity_key => $entity_values) {
        +  		if ($entity_key == 'activity') {
        +
        +  			foreach ($entity_values as $activity_entity) { //echo $i++;
        +  				$account = user_load($entity->uid);
        +  				if(!$update_points) {
        +  					play_library_program_create_activity_entry($activity_entity->id, $account->uid);
        +  				}
        +  				else {
        +  					global $user;
        +  					play_library_program_create_activity_entry($activity_entity->id, $user->uid);
        +  				}
        +  			}
        +  		}
        +  	}
        +  }
        +}
        +
        +/**
        + * Function to return activity frequency
        + */
        +function _get_activity_frequency($aid) {
        +  $query = db_select('field_data_field_activity_limit', 'fal');
        +  $query->fields('fal', array('field_activity_limit_value'));
        +  $query->condition('entity_id', $aid);
        +  $results = $query->execute();
        +  foreach ($results as $result) {
        +    return $result->field_activity_limit_value;
        +  }
        +}
        +
        +/**
        + * Processes a reward claim.
        + */
        +function _play_library_program_process_activity_entry($entity, $type) {
        +	// get the activity id and other details form $entity (activity entry).
        +	$activity_id = $entity->field_activity_entry_activity[LANGUAGE_NONE][0]['target_id'];
        +	$points_from_activity = $entity->field_activity_point[LANGUAGE_NONE][0]['value'];
        +	$activity_frequency = _get_activity_frequency($activity_id);
        +	
        +	// get the number of times user has performed the current activity
        +	$current_participation_count = play_library_program_retrieve_activity_participation($activity_id, $entity->uid);
        +	
        +	// call userpoint API to update user points
        +	if ($points_from_activity > 0 && $current_participation_count <= $activity_frequency) {
        +		$userpoints_txn = array(
        +			'uid' => $entity->uid,
        +			'points' => $points_from_activity,
        +		);
        +		userpoints_userpointsapi($userpoints_txn);
        +	}
        +
        +	// get all the rewards associated with the activity
        +	$activity_rewards = _play_library_program_get_activity_reward_ids($activity_id, $current_participation_count, $entity->uid);
        +
        +	$rewards_user_can_claim = check_rewards_user_can_claim($entity->uid, $activity_rewards, $activity_id);
        +	
        +	$entity_info = entity_load('activity', array($activity_id));
        +	$firing_hook_type = $entity_info[$activity_id]->field_activity_fired_hook[LANGUAGE_NONE][0]['value'];
        +		if($firing_hook_type != 'node_update|node|sticker|updated'){
        +		  $current_date = date("Y-m-d");
        +		  activity_report_node_create($activity_id, $current_date, 0, 1, $entity->uid);
        +	  }
        +
        +    // if user won reward, update the progress report node to indicate 'reward won'
        +    // statu on the progress grid
        +    if(count($rewards_user_can_claim)) {
        +
        +      if(isset($_SESSION['teen_progress_report_nid'])) {
        +        $progress_report_nid = $_SESSION['teen_progress_report_nid'];
        +        unset($_SESSION['teen_progress_report_nid']);
        +
        +        db_update('field_data_field_won_reward')
        +        ->fields(array('field_won_reward_value' => 1))
        +        ->condition ('entity_id', $progress_report_nid)
        +        ->execute();
        +      }
        +
        +    } else {
        +      if(isset($_SESSION['teen_progress_report_nid'])) {
        +        unset($_SESSION['teen_progress_report_nid']);
        +      }
        +    }
        +    
        +	foreach ($rewards_user_can_claim as $rid) {
        +	  //play_library_program_update_user_calendar_state($rid);
        +      play_library_program_create_reward_claim($rid, $entity->uid);
        +	}
        +}
        +
        +
        +/**
        +*  Check all the condition for reward claim
        +*/
        +function check_rewards_user_can_claim($account_id, $reward_ids, $activity_id) {
        +
        +  // array to hold all rid's user can claim
        +  $rewards_user_can_claim = array();
        +
        +  if(count($reward_ids)) {
        +
        +    $uid = $account_id;
        +    $user = user_load($uid);
        +
        +    if(array_key_exists(12, $user->roles)) {
        +      $profile_name = 'group_lead';
        +    }
        +    else {
        +      $profile_name = 'main';
        +    }
        +
        +    $user_profile = profile2_load_by_user($account_id, $profile_name);
        +
        +    if(is_object($user_profile)) {
        +    $dob = $user_profile->field_user_birthday[LANGUAGE_NONE][0]['value'];
        +    $time_stamp_dob = strtotime($dob);
        +    } else {
        +      $time_stamp_dob = $_SESSION['user_birth_dt'];
        +      unset($_SESSION['user_birth_dt']);
        +    }
        +
        +    $current_time = time();
        +    $user_age = floor(($current_time - $time_stamp_dob) / (60*60*24*365));
        +
        +
        +    foreach ($reward_ids as $criteria_id => $rewards_id_ary) {
        +      // get list of activities that are eligible for reward claim
        +      $eligible_activities = get_eligible_activities($rewards_id_ary);
        +
        +      // exit current iteration if no activity found to work on.
        +      if(!count($eligible_activities)) {
        +        continue;
        +      }
        +
        +      // get all activity entries for given set of eligible activities
        +      $activity_entries_rs = get_activity_entries_for_eligible_activities($account_id, $eligible_activities);
        +      $activity_entry_count = $activity_entries_rs->rowCount();
        +
        +      // variable to hold the points user can claim
        +      $total_user_points_for_claim = 0;
        +    
        +      if($activity_entry_count) {
        +        $user_activity_entries = array();
        +        while ($obj = $activity_entries_rs->fetchObject()) {
        +          $claimed_points = $obj->field_claimed_point_value;
        +          $activity_points = $obj->field_activity_point_value;
        +          $user_activity_entries[$obj->entity_id] = array(
        +            'claimed_points' => $claimed_points,
        +            'acivity_points' => $activity_points,
        +          );
        +          $total_user_points_for_claim += ($activity_points - $claimed_points);
        +        }
        +      }
        +
        +      // fetch all reward criterias
        +      $reward_criteria_load = entity_load('reward', array($criteria_id));
        +      $reward_criteria_entity = reset($reward_criteria_load);
        +      //Check repetable or not
        +      $reward_criteria_repetable = $reward_criteria_entity->field_reward_criteria_repeatable[LANGUAGE_NONE][0]['value'];
        +      $reward_criteria_limit = $reward_criteria_entity->field_max_points[LANGUAGE_NONE][0]['value'];
        +      // points required to claim reward
        +      $reward_criteri_point = $reward_criteria_entity->field_reward_criteria_point_mark[LANGUAGE_NONE][0]['value'];
        +        
        +      // check if user has enough points to claim reward from current reward criteria
        +      //If the reward criteria is not repeatable
        +      if($reward_criteria_repetable == 0 ) {
        +        if($total_user_points_for_claim / $reward_criteri_point == 1 && $total_user_points_for_claim % $reward_criteri_point == 0 ) {
        +          $reward_criteria_start_date = $reward_criteria_entity->field_reward_criteria_date_limit[LANGUAGE_NONE][0]['value'];
        +          $reward_criteria_end_date = $reward_criteria_entity->field_reward_criteria_date_limit[LANGUAGE_NONE][0]['value2'];
        +          $reward_criteria_start_age = $reward_criteria_entity->field_start_age[LANGUAGE_NONE][0]['value'];
        +          $reward_criteria_end_age = $reward_criteria_entity->field_end_age[LANGUAGE_NONE][0]['value'];
        +          // validate reward for expiry and age limit
        +          $reward_expired = chk_reward_expiry($reward_criteria_start_date, $reward_criteria_end_date);
        +
        +          if($reward_expired) {
        +            continue;
        +          } else {
        +            $user_age_valid = chk_user_age_for_reward($user_age, $reward_criteria_start_age, $reward_criteria_end_age);
        +            if(!$user_age_valid) {
        +              continue;
        +            }
        +          }
        +
        +          // if all conditions meet, give all reward's to user
        +          foreach($rewards_id_ary as $reward_id) {
        +            $rewards_user_can_claim[] = $reward_id;
        +          }
        +        }
        +      }
        +       //If reward criteria is repetable
        +      else {
        +        if(isset($reward_criteria_limit)){
        +          // check claim points is less than reward limit points
        +          if($total_user_points_for_claim <= $reward_criteria_limit){
        +            if($total_user_points_for_claim / $reward_criteri_point >= 1 && $total_user_points_for_claim % $reward_criteri_point == 0 ) {
        +              $reward_criteria_start_date = $reward_criteria_entity->field_reward_criteria_date_limit[LANGUAGE_NONE][0]['value'];
        +              $reward_criteria_end_date = $reward_criteria_entity->field_reward_criteria_date_limit[LANGUAGE_NONE][0]['value2'];
        +              $reward_criteria_start_age = $reward_criteria_entity->field_start_age[LANGUAGE_NONE][0]['value'];
        +              $reward_criteria_end_age = $reward_criteria_entity->field_end_age[LANGUAGE_NONE][0]['value'];
        +              // validate reward for expiry and age limit
        +              $reward_expired = chk_reward_expiry($reward_criteria_start_date, $reward_criteria_end_date);
        +
        +              if($reward_expired) {
        +                continue;
        +              } else {
        +                $user_age_valid = chk_user_age_for_reward($user_age, $reward_criteria_start_age, $reward_criteria_end_age);
        +                if(!$user_age_valid) {
        +                  continue;
        +                }
        +              }
        +
        +              // if all conditions meet, give all reward's to user
        +              foreach($rewards_id_ary as $reward_id) {
        +                $rewards_user_can_claim[] = $reward_id;
        +              }
        +            }
        +          }         
        +        }else{
        +          if($total_user_points_for_claim / $reward_criteri_point >= 1 && $total_user_points_for_claim % $reward_criteri_point == 0 ) {
        +            $reward_criteria_start_date = $reward_criteria_entity->field_reward_criteria_date_limit[LANGUAGE_NONE][0]['value'];
        +            $reward_criteria_end_date = $reward_criteria_entity->field_reward_criteria_date_limit[LANGUAGE_NONE][0]['value2'];
        +            $reward_criteria_start_age = $reward_criteria_entity->field_start_age[LANGUAGE_NONE][0]['value'];
        +            $reward_criteria_end_age = $reward_criteria_entity->field_end_age[LANGUAGE_NONE][0]['value'];
        +            // validate reward for expiry and age limit
        +            $reward_expired = chk_reward_expiry($reward_criteria_start_date, $reward_criteria_end_date);
        +
        +            if($reward_expired) {
        +              continue;
        +            } else {
        +              $user_age_valid = chk_user_age_for_reward($user_age, $reward_criteria_start_age, $reward_criteria_end_age);
        +              if(!$user_age_valid) {
        +                continue;
        +              }
        +            }
        +
        +            // if all conditions meet, give all reward's to user
        +            foreach($rewards_id_ary as $reward_id) {
        +              $rewards_user_can_claim[] = $reward_id;
        +            }
        +          }
        +        }
        +      }
        +    }
        +  }
        +  return $rewards_user_can_claim;
        +}
        +
        +/**
        + * Function to update activity entry claimed points.
        + *
        + * @param
        + *   $entity_id Number ID of the row to update
        + *   $claimed_points Number New claimed points
        + */
        +function update_activity_entry_claimed_points($entity_id, $claimed_points) {
        +  db_update('field_data_field_claimed_point')
        +  ->fields(array('field_claimed_point_value' => $claimed_points))
        +  ->condition ('entity_id', $entity_id)
        +  ->execute();
        +}
        +
        +/**
        + * Function to return all activities to associated to given rewards.
        + *
        + * @param Array $rewards_id_ary
        + *   array of reward ID's
        + *
        + * @return Array $activities
        + *  array of activity ID's linked with given rewards
        + */
        +function get_eligible_activities($rewards_id_ary) {
        +  $activities = array();
        +  if(count($rewards_id_ary)) {
        +    $query = db_select('field_data_field_reward_criteria_activity', 'frca');
        +    $query->join('field_data_field_reward_criteria_reward', 'frcr', 'frca.entity_id = frcr.entity_id');
        +    $query->condition('frcr.field_reward_criteria_reward_target_id', $rewards_id_ary, 'IN');
        +    $query->fields('frca', array('field_reward_criteria_activity_target_id'));
        +    $result = $query->execute()->fetchAll();
        +    foreach ($result as $value) {
        +      $activities[] = $value->field_reward_criteria_activity_target_id;
        +    }
        +  }
        +  return $activities;
        +}
        +
        +/**
        + * Function to return activity entries for given set of activities
        + *
        + * @param Number $account_id
        + *   user ID whose activity entries to be returned
        + *
        + * @param Array $eligible_activities
        + *   array of activities for which activity entry is to be selected
        + *
        + * @return mysql resultset $res
        + *   query resultset
        + */
        +function get_activity_entries_for_eligible_activities($account_id, $eligible_activities) {
        +  // Query to fetch all activity entries related to set of activities that are
        +  // linked to the reward user can earn, based on current activity
        +  $que = db_select('eck_activity', 'eck_a');
        +  $que->join('field_data_field_activity_entry_activity', 'fdfae', 'fdfae.entity_id = eck_a.id');
        +  $que->join('field_data_field_claimed_point', 'fdcp', 'fdcp.entity_id = eck_a.id');
        +  $que->join('field_data_field_activity_point', 'fdfap', 'fdfap.entity_id = eck_a.id');
        +  $que->condition('eck_a.uid', $account_id);
        +  $que->condition('fdfae.field_activity_entry_activity_target_id', $eligible_activities, 'IN');
        +  $que->condition('fdcp.field_claimed_point_value', 'fdfap.field_activity_point_value', '<=');
        +  $que->fields('fdcp', array('field_claimed_point_value'));
        +  $que->fields('fdfap', array('field_activity_point_value'));
        +  $que->fields('fdfae', array('entity_id'));
        +  $res = $que->execute();
        +  return $res;
        +}
        +
        +
        +
        +function chk_reward_expiry($criteria_start_date, $criteria_end_date) {
        +	$current_date = time();
        +	$start_date = strtotime($criteria_start_date);
        +	$end_date = strtotime($criteria_end_date);  
        +	if($current_date >= $start_date && $current_date <= $end_date) {
        +      return FALSE;
        +	} else {
        +	  return TRUE;
        +	}
        +}
        +
        +function chk_user_age_for_reward($user_age, $start_age, $end_age) {
        +  if($user_age >= $start_age && $user_age <= $end_age) {
        +    return TRUE;
        +  } else {
        +  	return FALSE;
        +  }
        +}
        +
        +/**play_library_program_create_reward_claim
        + * Function to add reward claimed by user after an activity for calendar state
        + */
        +function play_library_program_update_user_calendar_state($rid) {
        +	$cal_id = $_SESSION['usr_calendar_id'];
        +	unset($_SESSION['usr_calendar_id']);
        +	db_update('calendar')
        +		->fields(array('reward_id' => $rid))
        +		->condition ('id', $cal_id)
        +		->execute();
        +}
        +
        +/**
        + * Processes a reward claim.
        + */
        +function _play_library_program_process_user_reward_claim($entity, $type) {
        +	$account_uid = $entity->uid;
        +	if (is_object($account_uid)) {
        +		$account_uid = $account_uid->uid;
        +	}
        +	$rewards = entity_load('reward', array($entity->field_reward_claim_id[LANGUAGE_NONE][0]['target_id']));
        +	$reward = reset($rewards);
        +	// if (!empty($reward->field_reward_raffle)) {
        +	//  	play_library_program_create_raffle_entry($reward->field_reward_raffle[LANGUAGE_NONE][0]['target_id'], $account_uid);
        +	// }
        +	if (!empty($reward->field_reward_badge)) {
        +		play_library_program_add_user_badge($reward->field_reward_badge[LANGUAGE_NONE][0]['target_id'], $account_uid);
        +	}
        +	_play_library_program_set_message($reward, $account_uid);
        +}
        +
        +/**
        + * Retrieves satisfied reward criteria based on global points.
        + */
        +function _play_library_program_get_global_reward_ids($user_pre_points, $user_points, $account_uid) {
        +	global $user;
        +	if (empty($account_uid)) {
        +		$account = $user;
        +	}
        +	else {
        +		$account = user_load($account_uid);
        +	}
        +
        +	// Create exclusion list of rewards which are tied to activities.
        +	$exclude_ids = array(-1);
        +	$date = "" . date('Y-m-d') . " 00:00:00";
        +	$query = db_select('field_data_field_reward_criteria_activity', 'fdfrca');
        +	$query->fields('fdfrca', array('entity_id'));
        +	$results = $query->execute();
        +	foreach ($results as $result) {
        +		$exclude_ids[] = $result->entity_id;
        +	}
        +
        +	$rids = array();
        +	// Get the non-repeated rewards first.
        +	$query = new EntityFieldQuery();
        +	$query->entityCondition('entity_type', 'reward');
        +	$query->entityCondition('bundle', 'reward_criteria');
        +	$query->propertyCondition('id', $exclude_ids, 'NOT IN');
        +	$query->fieldCondition('field_reward_criteria_point_mark', 'value', $user_pre_points, '>');
        +	$query->fieldCondition('field_reward_criteria_point_mark', 'value', $user_points, '<=');
        +	$query->fieldCondition('field_reward_criteria_date_limit', 'value', $date, '<=');
        +	$query->fieldCondition('field_reward_criteria_date_limit', 'value2', $date, '>=');
        +	$query->fieldCondition('field_reward_criteria_repeatable', 'value', 0);
        +	$query->addTag('debug');
        +	$results = $query->execute();
        +	
        +	if (!empty($results['reward'])) {
        +		foreach($results['reward'] as $reward) {
        +			$reward_entities = entity_load('reward', array($reward->id));
        +			$reward_entity = reset($reward_entities);
        +			if (_play_library_program_reward_criteria_fulfilled($reward_entity, $account)) {
        +				foreach ($reward_entity->field_reward_criteria_reward[LANGUAGE_NONE] as $reward) {
        +					$rids[] = $reward['target_id'];
        +				}
        +			}
        +		}
        +	}
        +
        +	// Process the repeated ones next.
        +	$query = new EntityFieldQuery();
        +	$query->entityCondition('entity_type', 'reward');
        +	$query->entityCondition('bundle', 'reward_criteria');
        +	$query->propertyCondition('id', $exclude_ids, 'NOT IN');
        +	$query->fieldCondition('field_reward_criteria_date_limit', 'value', $date, '<=');
        +	$query->fieldCondition('field_reward_criteria_date_limit', 'value2', $date, '>=');
        +	$query->fieldCondition('field_reward_criteria_repeatable', 'value', 1);
        +	$results = $query->execute();
        +	if (!empty($results['reward'])) {
        +		foreach($results['reward'] as $reward) {
        +			$reward_entities = entity_load('reward', array($reward->id));
        +			$reward_entity = reset($reward_entities);
        +			$modulus = $reward_entity->field_reward_criteria_point_mark[LANGUAGE_NONE][0]['value'];
        +			for ($i = $user_points; $i > $user_pre_points; $i--) {
        +				if ($i % $modulus == 0) {
        +					if (_play_library_program_reward_criteria_fulfilled($reward_entity, $account)) {
        +						foreach ($reward_entity->field_reward_criteria_reward[LANGUAGE_NONE] as $reward) {
        +							$rids[] = $reward['target_id'];
        +						}
        +					}
        +				}
        +			}
        +		}
        +	}
        +
        +	return array_unique($rids);
        +}
        +
        +/**
        + * Function to return all rewards that are linked to an activity.
        + */
        +function _play_library_program_get_activity_reward_ids($activity_id, $user_activity_completed, $account_uid = NULL) {
        +	global $user;
        +	if (empty($account_uid)) {
        +		$account = $user;
        +	}
        +	else {
        +		$account = user_load($account_uid);
        +	}
        +
        +	$date = "" . date('Y-m-d') . " 00:00:00";
        +	$rids = array();
        +	// Get the non-repeated rewards first.
        +	$query = new EntityFieldQuery();
        +	$query->entityCondition('entity_type', 'reward');
        +	$query->entityCondition('bundle', 'reward_criteria');
        +	$query->fieldCondition('field_reward_criteria_activity ', 'target_id', $activity_id);
        +	//$query->fieldCondition('field_reward_criteria_point_mark', 'value', $user_activity_completed);
        +	$query->fieldCondition('field_reward_criteria_date_limit', 'value', $date, '<=');
        +	$query->fieldCondition('field_reward_criteria_date_limit', 'value2', $date, '>=');
        +	$query->fieldCondition('field_reward_criteria_repeatable', 'value', 0);
        +	$results = $query->execute();
        +	
        +	if (!empty($results['reward'])) {
        +		$rid = array();
        +		foreach($results['reward'] as $reward) {
        +			$reward_criteria_id = $reward->id;
        +			$reward_entities = entity_load('reward', array($reward_criteria_id));
        +			$reward_entity = reset($reward_entities);
        +			// check if the user (role) performing activity can receive the reward
        +			if (_play_library_program_reward_criteria_fulfilled($reward_entity, $account)) {
        +				foreach ($reward_entity->field_reward_criteria_reward[LANGUAGE_NONE] as $reward) {
        +					// add the reward id into the arary of rewards that can be claimed.
        +					$rid[] = $reward['target_id'];
        +				}
        +			}
        +			$rids[$reward_criteria_id] = array_unique($rid);
        +			$rid = array();
        +		}
        +	}
        +
        +	// Process the repeated ones next.
        +	$query = new EntityFieldQuery();
        +	$query->entityCondition('entity_type', 'reward');
        +	$query->entityCondition('bundle', 'reward_criteria');
        +	$query->fieldCondition('field_reward_criteria_activity ', 'target_id', $activity_id);
        +	$query->fieldCondition('field_reward_criteria_date_limit', 'value', $date, '<=');
        +	$query->fieldCondition('field_reward_criteria_date_limit', 'value2', $date, '>=');
        +	$query->fieldCondition('field_reward_criteria_repeatable', 'value', 1);
        +	$results = $query->execute();
        +
        +	if (!empty($results['reward'])) {
        +		$rid = array();
        +		foreach($results['reward'] as $reward) {
        +			$reward_criteria_id = $reward->id;
        +			$reward_entities = entity_load('reward', array($reward_criteria_id));
        +			$reward_entity = reset($reward_entities);
        +			// check if the user (role) performing activity can receive the reward
        +			if (_play_library_program_reward_criteria_fulfilled($reward_entity, $account)) {
        +			  foreach ($reward_entity->field_reward_criteria_reward[LANGUAGE_NONE] as $reward) {
        +			    // add the reward id into the arary of rewards that can be claimed.
        +			    $rid[] = $reward['target_id'];
        +			  }
        +			}
        +			
        +			if(array_key_exists($reward_criteria_id, $rids)) {
        +              $existing_rids = $rids[$reward_criteria_id];
        +              $rid = array_unique($rid);
        +              $merged_ary = array_merge($existing_rids, $rid);
        +              $rids[$reward_criteria_id] = $merged_ary;
        +		    } else {
        +		      $rids[$reward_criteria_id] = array_unique($rid);
        +	        }
        +	        $rid = array();
        +		}
        +	}
        +	return $rids;
        +}
        +/**
        + * Creates a new message.
        + */
        +function _play_library_program_set_message($reward, $account_uid) {
        +	/*
        +	// Only use this if we opt to switch back to using the MNC module. Would require debugging and further development.
        +	$notification_message = FALSE;
        +	if ($reward->type == 'physical_reward') {
        +		$notification_message = 'Congratulations, you just won a reward: ' . $reward->title;
        +	}
        +	if (!empty($notification_message)) {
        +		$message = message_create('user_notification_reward', array('uid' => $account_uid));
        +
        +		$wrapper = entity_metadata_wrapper('message', $message);
        +		$wrapper->field_notification_message->set(array('value' => $notification_message, 'format' => filter_default_format()));
        +		$wrapper->save();
        +	}
        +
        +	$options['mnc_recipients'] = array(
        +		array(
        +			'user' => user_load(1),
        +		),
        +		array(
        +			'user' => $account_uid,
        +		),
        +	);
        +
        +	message_notify_send_message($message, $options, 'mnc_email');
        +	*/
        +
        +	// Send a privatemsg
        +	if (!module_exists('privatemsg')) {
        +		return;
        +	}
        +	if (!empty($reward->field_reward_notification)) {
        +		$options = array(
        +			'author' => user_load(1),
        +		);
        +		$recipient = user_load($account_uid);
        +		$subject = t('[OPL] Congratulations, you just won a prize!');
        +		$body = $reward->field_reward_notification[LANGUAGE_NONE][0]['value'];
        +		$result = privatemsg_new_thread(array($recipient), $subject, $body, $options);
        +	}
        +}
        +
        +function _play_library_program_reward_criteria_fulfilled($reward_entity, $account) {
        +	$account_roles = array_keys($account->roles);
        +	$allowed = TRUE;
        +
        +	if (count($reward_entity->field_reward_role_limits)) {
        +		foreach ($reward_entity->field_reward_role_limits[LANGUAGE_NONE] as $role) {
        +			if (in_array($role['value'], $account_roles)) {
        +				return $allowed = TRUE;
        +			} else {
        +				$allowed = FALSE;
        +			}
        +		}
        +	}
        +    
        +	return $allowed;
        +}
        diff --git a/docroot/sites/all/modules/features/play_library_program_teen/play_library_program_teen.pages_default.inc b/docroot/sites/all/modules/features/play_library_program_teen/play_library_program_teen.pages_default.inc
        new file mode 100644
        index 00000000..6c103184
        --- /dev/null
        +++ b/docroot/sites/all/modules/features/play_library_program_teen/play_library_program_teen.pages_default.inc
        @@ -0,0 +1,217 @@
        +disabled = FALSE; /* Edit this to true to make a default page disabled initially */
        +  $page->api_version = 1;
        +  $page->name = 'admin_dashboard';
        +  $page->task = 'page';
        +  $page->admin_title = 'Admin Dashboard';
        +  $page->admin_description = '';
        +  $page->path = 'admin/content/dashboard';
        +  $page->access = array(
        +    'plugins' => array(
        +      0 => array(
        +        'name' => 'perm',
        +        'settings' => array(
        +          'perm' => 'administer nodes',
        +        ),
        +        'context' => 'logged-in-user',
        +        'not' => FALSE,
        +      ),
        +    ),
        +    'logic' => 'and',
        +  );
        +  $page->menu = array(
        +    'type' => 'tab',
        +    'title' => 'Program Dashboard',
        +    'name' => 'navigation',
        +    'weight' => '0',
        +    'parent' => array(
        +      'type' => 'none',
        +      'title' => '',
        +      'name' => 'navigation',
        +      'weight' => '0',
        +    ),
        +  );
        +  $page->arguments = array();
        +  $page->conf = array(
        +    'admin_paths' => FALSE,
        +  );
        +  $page->default_handlers = array();
        +  $handler = new stdClass();
        +  $handler->disabled = FALSE; /* Edit this to true to make a default handler disabled initially */
        +  $handler->api_version = 1;
        +  $handler->name = 'page_admin_dashboard__panel';
        +  $handler->task = 'page';
        +  $handler->subtask = 'admin_dashboard';
        +  $handler->handler = 'panel_context';
        +  $handler->weight = 0;
        +  $handler->conf = array(
        +    'title' => 'Panel',
        +    'no_blocks' => 0,
        +    'pipeline' => 'standard',
        +    'body_classes_to_remove' => '',
        +    'body_classes_to_add' => '',
        +    'css_id' => '',
        +    'css' => '',
        +    'contexts' => array(),
        +    'relationships' => array(),
        +    'name' => 'panel',
        +  );
        +  $display = new panels_display();
        +  $display->layout = 'twocol_bricks';
        +  $display->layout_settings = array();
        +  $display->panel_settings = array(
        +    'style_settings' => array(
        +      'default' => NULL,
        +      'top' => NULL,
        +      'left_above' => NULL,
        +      'right_above' => NULL,
        +      'middle' => NULL,
        +      'left_below' => NULL,
        +      'right_below' => NULL,
        +      'bottom' => NULL,
        +    ),
        +  );
        +  $display->cache = array();
        +  $display->title = '';
        +  $display->uuid = 'f8f9231d-9298-4100-99fa-c14c7d434a6a';
        +  $display->content = array();
        +  $display->panels = array();
        +    $pane = new stdClass();
        +    $pane->pid = 'new-a3e2754c-f682-4f1c-8bb2-be883bc45cb1';
        +    $pane->panel = 'left_above';
        +    $pane->type = 'views_panes';
        +    $pane->subtype = 'activity_dashboard-panel_pane_1';
        +    $pane->shown = TRUE;
        +    $pane->access = array();
        +    $pane->configuration = array();
        +    $pane->cache = array();
        +    $pane->style = array(
        +      'settings' => NULL,
        +    );
        +    $pane->css = array();
        +    $pane->extras = array();
        +    $pane->position = 0;
        +    $pane->locks = array();
        +    $pane->uuid = 'a3e2754c-f682-4f1c-8bb2-be883bc45cb1';
        +    $display->content['new-a3e2754c-f682-4f1c-8bb2-be883bc45cb1'] = $pane;
        +    $display->panels['left_above'][0] = 'new-a3e2754c-f682-4f1c-8bb2-be883bc45cb1';
        +    $pane = new stdClass();
        +    $pane->pid = 'new-4fc5fd1d-35a8-4922-a872-66120a15b7b9';
        +    $pane->panel = 'left_above';
        +    $pane->type = 'views_panes';
        +    $pane->subtype = 'global_reward_dashboard-panel_pane_1';
        +    $pane->shown = TRUE;
        +    $pane->access = array();
        +    $pane->configuration = array();
        +    $pane->cache = array();
        +    $pane->style = array(
        +      'settings' => NULL,
        +    );
        +    $pane->css = array();
        +    $pane->extras = array();
        +    $pane->position = 1;
        +    $pane->locks = array();
        +    $pane->uuid = '4fc5fd1d-35a8-4922-a872-66120a15b7b9';
        +    $display->content['new-4fc5fd1d-35a8-4922-a872-66120a15b7b9'] = $pane;
        +    $display->panels['left_above'][1] = 'new-4fc5fd1d-35a8-4922-a872-66120a15b7b9';
        +    $pane = new stdClass();
        +    $pane->pid = 'new-2140e4ba-1829-4482-81b6-347f38cb0eb2';
        +    $pane->panel = 'left_above';
        +    $pane->type = 'views_panes';
        +    $pane->subtype = 'reward_dashboard-panel_pane_1';
        +    $pane->shown = TRUE;
        +    $pane->access = array();
        +    $pane->configuration = array();
        +    $pane->cache = array();
        +    $pane->style = array(
        +      'settings' => NULL,
        +    );
        +    $pane->css = array();
        +    $pane->extras = array();
        +    $pane->position = 2;
        +    $pane->locks = array();
        +    $pane->uuid = '2140e4ba-1829-4482-81b6-347f38cb0eb2';
        +    $display->content['new-2140e4ba-1829-4482-81b6-347f38cb0eb2'] = $pane;
        +    $display->panels['left_above'][2] = 'new-2140e4ba-1829-4482-81b6-347f38cb0eb2';
        +    $pane = new stdClass();
        +    $pane->pid = 'new-6a7a85a9-be5a-4f6c-9c7b-cb709dfb268b';
        +    $pane->panel = 'right_above';
        +    $pane->type = 'views_panes';
        +    $pane->subtype = 'raffle_dashboard-panel_pane_1';
        +    $pane->shown = TRUE;
        +    $pane->access = array();
        +    $pane->configuration = array();
        +    $pane->cache = array();
        +    $pane->style = array(
        +      'settings' => NULL,
        +    );
        +    $pane->css = array();
        +    $pane->extras = array();
        +    $pane->position = 0;
        +    $pane->locks = array();
        +    $pane->uuid = '6a7a85a9-be5a-4f6c-9c7b-cb709dfb268b';
        +    $display->content['new-6a7a85a9-be5a-4f6c-9c7b-cb709dfb268b'] = $pane;
        +    $display->panels['right_above'][0] = 'new-6a7a85a9-be5a-4f6c-9c7b-cb709dfb268b';
        +    $pane = new stdClass();
        +    $pane->pid = 'new-e68fbb1c-4a00-481d-84a3-9313fa21b9c1';
        +    $pane->panel = 'right_above';
        +    $pane->type = 'views_panes';
        +    $pane->subtype = 'badges_dashboard-panel_pane_1';
        +    $pane->shown = TRUE;
        +    $pane->access = array();
        +    $pane->configuration = array();
        +    $pane->cache = array();
        +    $pane->style = array(
        +      'settings' => NULL,
        +    );
        +    $pane->css = array();
        +    $pane->extras = array();
        +    $pane->position = 1;
        +    $pane->locks = array();
        +    $pane->uuid = 'e68fbb1c-4a00-481d-84a3-9313fa21b9c1';
        +    $display->content['new-e68fbb1c-4a00-481d-84a3-9313fa21b9c1'] = $pane;
        +    $display->panels['right_above'][1] = 'new-e68fbb1c-4a00-481d-84a3-9313fa21b9c1';
        +    $pane = new stdClass();
        +    $pane->pid = 'new-7e5f67e9-70fe-4ff0-9cab-51a7b7a4cfa7';
        +    $pane->panel = 'top';
        +    $pane->type = 'block';
        +    $pane->subtype = 'system-navigation';
        +    $pane->shown = TRUE;
        +    $pane->access = array(
        +      'plugins' => array(),
        +    );
        +    $pane->configuration = array(
        +      'override_title' => 0,
        +      'override_title_text' => '',
        +      'override_title_heading' => 'h2',
        +    );
        +    $pane->cache = array();
        +    $pane->style = array(
        +      'settings' => NULL,
        +    );
        +    $pane->css = array();
        +    $pane->extras = array();
        +    $pane->position = 0;
        +    $pane->locks = array();
        +    $pane->uuid = '7e5f67e9-70fe-4ff0-9cab-51a7b7a4cfa7';
        +    $display->content['new-7e5f67e9-70fe-4ff0-9cab-51a7b7a4cfa7'] = $pane;
        +    $display->panels['top'][0] = 'new-7e5f67e9-70fe-4ff0-9cab-51a7b7a4cfa7';
        +  $display->hide_title = PANELS_TITLE_FIXED;
        +  $display->title_pane = 'new-7e5f67e9-70fe-4ff0-9cab-51a7b7a4cfa7';
        +  $handler->conf['display'] = $display;
        +  $page->default_handlers[$handler->name] = $handler;
        +  $pages['admin_dashboard'] = $page;
        +
        +  return $pages;
        +
        +}
        diff --git a/docroot/sites/all/modules/features/play_library_program_teen/play_library_program_teen.rules_defaults.inc b/docroot/sites/all/modules/features/play_library_program_teen/play_library_program_teen.rules_defaults.inc
        new file mode 100644
        index 00000000..01fdba59
        --- /dev/null
        +++ b/docroot/sites/all/modules/features/play_library_program_teen/play_library_program_teen.rules_defaults.inc
        @@ -0,0 +1,39 @@
        +name = 'activity_dashboard';
        +  $view->description = '';
        +  $view->tag = 'default';
        +  $view->base_table = 'eck_activity';
        +  $view->human_name = 'Activity Dashboard';
        +  $view->core = 7;
        +  $view->api_version = '3.0';
        +  $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
        +
        +  /* Display: Master */
        +  $handler = $view->new_display('default', 'Master', 'default');
        +  $handler->display->display_options['title'] = 'Activities';
        +  $handler->display->display_options['use_ajax'] = TRUE;
        +  $handler->display->display_options['use_more_always'] = FALSE;
        +  $handler->display->display_options['access']['type'] = 'none';
        +  $handler->display->display_options['cache']['type'] = 'none';
        +  $handler->display->display_options['query']['type'] = 'views_query';
        +  $handler->display->display_options['exposed_form']['type'] = 'basic';
        +  $handler->display->display_options['pager']['type'] = 'full';
        +  $handler->display->display_options['pager']['options']['items_per_page'] = '10';
        +  $handler->display->display_options['pager']['options']['offset'] = '0';
        +  $handler->display->display_options['pager']['options']['id'] = '0';
        +  $handler->display->display_options['pager']['options']['quantity'] = '9';
        +  $handler->display->display_options['style_plugin'] = 'table';
        +  /* No results behavior: Global: Text area */
        +  $handler->display->display_options['empty']['area']['id'] = 'area';
        +  $handler->display->display_options['empty']['area']['table'] = 'views';
        +  $handler->display->display_options['empty']['area']['field'] = 'area';
        +  $handler->display->display_options['empty']['area']['empty'] = TRUE;
        +  $handler->display->display_options['empty']['area']['content'] = 'Activities have not yet been created.';
        +  $handler->display->display_options['empty']['area']['format'] = 'filtered_html';
        +  /* Field: Activity: Id */
        +  $handler->display->display_options['fields']['id']['id'] = 'id';
        +  $handler->display->display_options['fields']['id']['table'] = 'eck_activity';
        +  $handler->display->display_options['fields']['id']['field'] = 'id';
        +  /* Field: Activity: Title */
        +  $handler->display->display_options['fields']['title']['id'] = 'title';
        +  $handler->display->display_options['fields']['title']['table'] = 'eck_activity';
        +  $handler->display->display_options['fields']['title']['field'] = 'title';
        +  /* Field: Activity: Activity Points */
        +  $handler->display->display_options['fields']['field_activity_points']['id'] = 'field_activity_points';
        +  $handler->display->display_options['fields']['field_activity_points']['table'] = 'field_data_field_activity_points';
        +  $handler->display->display_options['fields']['field_activity_points']['field'] = 'field_activity_points';
        +  $handler->display->display_options['fields']['field_activity_points']['settings'] = array(
        +    'thousand_separator' => ' ',
        +    'prefix_suffix' => 1,
        +  );
        +  /* Field: Activity: When the activity will trigger points */
        +  $handler->display->display_options['fields']['field_activity_fired_hook']['id'] = 'field_activity_fired_hook';
        +  $handler->display->display_options['fields']['field_activity_fired_hook']['table'] = 'field_data_field_activity_fired_hook';
        +  $handler->display->display_options['fields']['field_activity_fired_hook']['field'] = 'field_activity_fired_hook';
        +  $handler->display->display_options['fields']['field_activity_fired_hook']['label'] = 'Trigger';
        +  /* Field: Activity: Link */
        +  $handler->display->display_options['fields']['view_link']['id'] = 'view_link';
        +  $handler->display->display_options['fields']['view_link']['table'] = 'eck_activity';
        +  $handler->display->display_options['fields']['view_link']['field'] = 'view_link';
        +  $handler->display->display_options['fields']['view_link']['label'] = 'View';
        +  /* Field: Activity: Edit link */
        +  $handler->display->display_options['fields']['edit_link']['id'] = 'edit_link';
        +  $handler->display->display_options['fields']['edit_link']['table'] = 'eck_activity';
        +  $handler->display->display_options['fields']['edit_link']['field'] = 'edit_link';
        +  $handler->display->display_options['fields']['edit_link']['label'] = 'Edit';
        +  /* Field: Activity: Delete link */
        +  $handler->display->display_options['fields']['delete_link']['id'] = 'delete_link';
        +  $handler->display->display_options['fields']['delete_link']['table'] = 'eck_activity';
        +  $handler->display->display_options['fields']['delete_link']['field'] = 'delete_link';
        +  $handler->display->display_options['fields']['delete_link']['label'] = 'Delete';
        +  /* Filter criterion: Activity: activity type */
        +  $handler->display->display_options['filters']['type']['id'] = 'type';
        +  $handler->display->display_options['filters']['type']['table'] = 'eck_activity';
        +  $handler->display->display_options['filters']['type']['field'] = 'type';
        +  $handler->display->display_options['filters']['type']['value'] = array(
        +    'activity' => 'activity',
        +  );
        +
        +  /* Display: Content pane */
        +  $handler = $view->new_display('panel_pane', 'Content pane', 'panel_pane_1');
        +  $export['activity_dashboard'] = $view;
        +
        +  $view = new view();
        +  $view->name = 'badges_dashboard';
        +  $view->description = '';
        +  $view->tag = 'default';
        +  $view->base_table = 'eck_badge';
        +  $view->human_name = 'Badges Dashboard';
        +  $view->core = 7;
        +  $view->api_version = '3.0';
        +  $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
        +
        +  /* Display: Master */
        +  $handler = $view->new_display('default', 'Master', 'default');
        +  $handler->display->display_options['title'] = 'Badges';
        +  $handler->display->display_options['use_ajax'] = TRUE;
        +  $handler->display->display_options['use_more_always'] = FALSE;
        +  $handler->display->display_options['access']['type'] = 'none';
        +  $handler->display->display_options['cache']['type'] = 'none';
        +  $handler->display->display_options['query']['type'] = 'views_query';
        +  $handler->display->display_options['exposed_form']['type'] = 'basic';
        +  $handler->display->display_options['pager']['type'] = 'full';
        +  $handler->display->display_options['style_plugin'] = 'table';
        +  $handler->display->display_options['style_options']['columns'] = array(
        +    'id' => 'id',
        +    'delete_link' => 'delete_link',
        +    'edit_link' => 'edit_link',
        +    'view_link' => 'view_link',
        +    'title' => 'title',
        +  );
        +  $handler->display->display_options['style_options']['default'] = '-1';
        +  $handler->display->display_options['style_options']['info'] = array(
        +    'id' => array(
        +      'sortable' => 0,
        +      'default_sort_order' => 'asc',
        +      'align' => '',
        +      'separator' => '',
        +      'empty_column' => 0,
        +    ),
        +    'delete_link' => array(
        +      'align' => '',
        +      'separator' => '',
        +      'empty_column' => 0,
        +    ),
        +    'edit_link' => array(
        +      'align' => '',
        +      'separator' => '',
        +      'empty_column' => 0,
        +    ),
        +    'view_link' => array(
        +      'align' => '',
        +      'separator' => '',
        +      'empty_column' => 0,
        +    ),
        +    'title' => array(
        +      'sortable' => 0,
        +      'default_sort_order' => 'asc',
        +      'align' => '',
        +      'separator' => '',
        +      'empty_column' => 0,
        +    ),
        +  );
        +  /* No results behavior: Global: Text area */
        +  $handler->display->display_options['empty']['area']['id'] = 'area';
        +  $handler->display->display_options['empty']['area']['table'] = 'views';
        +  $handler->display->display_options['empty']['area']['field'] = 'area';
        +  $handler->display->display_options['empty']['area']['empty'] = TRUE;
        +  $handler->display->display_options['empty']['area']['content'] = 'No badges have been created.';
        +  $handler->display->display_options['empty']['area']['format'] = 'filtered_html';
        +  /* Field: Badge: Id */
        +  $handler->display->display_options['fields']['id']['id'] = 'id';
        +  $handler->display->display_options['fields']['id']['table'] = 'eck_badge';
        +  $handler->display->display_options['fields']['id']['field'] = 'id';
        +  /* Field: Badge: Delete link */
        +  $handler->display->display_options['fields']['delete_link']['id'] = 'delete_link';
        +  $handler->display->display_options['fields']['delete_link']['table'] = 'eck_badge';
        +  $handler->display->display_options['fields']['delete_link']['field'] = 'delete_link';
        +  $handler->display->display_options['fields']['delete_link']['label'] = 'Delete';
        +  /* Field: Badge: Edit link */
        +  $handler->display->display_options['fields']['edit_link']['id'] = 'edit_link';
        +  $handler->display->display_options['fields']['edit_link']['table'] = 'eck_badge';
        +  $handler->display->display_options['fields']['edit_link']['field'] = 'edit_link';
        +  $handler->display->display_options['fields']['edit_link']['label'] = 'Edit';
        +  /* Field: Badge: Link */
        +  $handler->display->display_options['fields']['view_link']['id'] = 'view_link';
        +  $handler->display->display_options['fields']['view_link']['table'] = 'eck_badge';
        +  $handler->display->display_options['fields']['view_link']['field'] = 'view_link';
        +  $handler->display->display_options['fields']['view_link']['label'] = 'View';
        +  /* Field: Badge: Title */
        +  $handler->display->display_options['fields']['title']['id'] = 'title';
        +  $handler->display->display_options['fields']['title']['table'] = 'eck_badge';
        +  $handler->display->display_options['fields']['title']['field'] = 'title';
        +  /* Filter criterion: Badge: badge type */
        +  $handler->display->display_options['filters']['type']['id'] = 'type';
        +  $handler->display->display_options['filters']['type']['table'] = 'eck_badge';
        +  $handler->display->display_options['filters']['type']['field'] = 'type';
        +  $handler->display->display_options['filters']['type']['value'] = array(
        +    'badge' => 'badge',
        +  );
        +
        +  /* Display: Content pane */
        +  $handler = $view->new_display('panel_pane', 'Content pane', 'panel_pane_1');
        +  $export['badges_dashboard'] = $view;
        +
        +  $view = new view();
        +  $view->name = 'global_reward_dashboard';
        +  $view->description = '';
        +  $view->tag = 'default';
        +  $view->base_table = 'eck_reward';
        +  $view->human_name = 'Reward Criteria Dashboard';
        +  $view->core = 7;
        +  $view->api_version = '3.0';
        +  $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
        +
        +  /* Display: Master */
        +  $handler = $view->new_display('default', 'Master', 'default');
        +  $handler->display->display_options['title'] = 'Reward Criteria';
        +  $handler->display->display_options['use_ajax'] = TRUE;
        +  $handler->display->display_options['use_more_always'] = FALSE;
        +  $handler->display->display_options['access']['type'] = 'none';
        +  $handler->display->display_options['cache']['type'] = 'none';
        +  $handler->display->display_options['query']['type'] = 'views_query';
        +  $handler->display->display_options['exposed_form']['type'] = 'basic';
        +  $handler->display->display_options['pager']['type'] = 'full';
        +  $handler->display->display_options['pager']['options']['items_per_page'] = '100';
        +  $handler->display->display_options['pager']['options']['offset'] = '0';
        +  $handler->display->display_options['pager']['options']['id'] = '0';
        +  $handler->display->display_options['pager']['options']['quantity'] = '9';
        +  $handler->display->display_options['style_plugin'] = 'table';
        +  $handler->display->display_options['style_options']['columns'] = array(
        +    'id' => 'id',
        +    'delete_link' => 'delete_link',
        +    'edit_link' => 'edit_link',
        +    'view_link' => 'view_link',
        +    'title' => 'title',
        +  );
        +  $handler->display->display_options['style_options']['default'] = '-1';
        +  $handler->display->display_options['style_options']['info'] = array(
        +    'id' => array(
        +      'sortable' => 0,
        +      'default_sort_order' => 'asc',
        +      'align' => '',
        +      'separator' => '',
        +      'empty_column' => 0,
        +    ),
        +    'delete_link' => array(
        +      'align' => '',
        +      'separator' => '',
        +      'empty_column' => 0,
        +    ),
        +    'edit_link' => array(
        +      'align' => '',
        +      'separator' => '',
        +      'empty_column' => 0,
        +    ),
        +    'view_link' => array(
        +      'align' => '',
        +      'separator' => '',
        +      'empty_column' => 0,
        +    ),
        +    'title' => array(
        +      'sortable' => 0,
        +      'default_sort_order' => 'asc',
        +      'align' => '',
        +      'separator' => '',
        +      'empty_column' => 0,
        +    ),
        +  );
        +  /* No results behavior: Global: Text area */
        +  $handler->display->display_options['empty']['area']['id'] = 'area';
        +  $handler->display->display_options['empty']['area']['table'] = 'views';
        +  $handler->display->display_options['empty']['area']['field'] = 'area';
        +  $handler->display->display_options['empty']['area']['empty'] = TRUE;
        +  $handler->display->display_options['empty']['area']['content'] = 'No reward criteria have been created. Please consider creating one.';
        +  $handler->display->display_options['empty']['area']['format'] = 'filtered_html';
        +  /* Field: Reward: Id */
        +  $handler->display->display_options['fields']['id']['id'] = 'id';
        +  $handler->display->display_options['fields']['id']['table'] = 'eck_reward';
        +  $handler->display->display_options['fields']['id']['field'] = 'id';
        +  /* Field: Reward: Title */
        +  $handler->display->display_options['fields']['title']['id'] = 'title';
        +  $handler->display->display_options['fields']['title']['table'] = 'eck_reward';
        +  $handler->display->display_options['fields']['title']['field'] = 'title';
        +  /* Field: Reward: Points */
        +  $handler->display->display_options['fields']['field_reward_criteria_point_mark']['id'] = 'field_reward_criteria_point_mark';
        +  $handler->display->display_options['fields']['field_reward_criteria_point_mark']['table'] = 'field_data_field_reward_criteria_point_mark';
        +  $handler->display->display_options['fields']['field_reward_criteria_point_mark']['field'] = 'field_reward_criteria_point_mark';
        +  $handler->display->display_options['fields']['field_reward_criteria_point_mark']['label'] = 'Point Criteria';
        +  $handler->display->display_options['fields']['field_reward_criteria_point_mark']['settings'] = array(
        +    'thousand_separator' => ' ',
        +    'prefix_suffix' => 1,
        +  );
        +  /* Field: Reward: Repeatable */
        +  $handler->display->display_options['fields']['field_reward_criteria_repeatable']['id'] = 'field_reward_criteria_repeatable';
        +  $handler->display->display_options['fields']['field_reward_criteria_repeatable']['table'] = 'field_data_field_reward_criteria_repeatable';
        +  $handler->display->display_options['fields']['field_reward_criteria_repeatable']['field'] = 'field_reward_criteria_repeatable';
        +  /* Field: Reward: Activity */
        +  $handler->display->display_options['fields']['field_reward_criteria_activity']['id'] = 'field_reward_criteria_activity';
        +  $handler->display->display_options['fields']['field_reward_criteria_activity']['table'] = 'field_data_field_reward_criteria_activity';
        +  $handler->display->display_options['fields']['field_reward_criteria_activity']['field'] = 'field_reward_criteria_activity';
        +  $handler->display->display_options['fields']['field_reward_criteria_activity']['settings'] = array(
        +    'link' => 0,
        +  );
        +  /* Field: Reward: Link */
        +  $handler->display->display_options['fields']['view_link']['id'] = 'view_link';
        +  $handler->display->display_options['fields']['view_link']['table'] = 'eck_reward';
        +  $handler->display->display_options['fields']['view_link']['field'] = 'view_link';
        +  $handler->display->display_options['fields']['view_link']['label'] = 'View';
        +  /* Field: Reward: Reward */
        +  $handler->display->display_options['fields']['field_reward_criteria_reward']['id'] = 'field_reward_criteria_reward';
        +  $handler->display->display_options['fields']['field_reward_criteria_reward']['table'] = 'field_data_field_reward_criteria_reward';
        +  $handler->display->display_options['fields']['field_reward_criteria_reward']['field'] = 'field_reward_criteria_reward';
        +  $handler->display->display_options['fields']['field_reward_criteria_reward']['settings'] = array(
        +    'link' => 0,
        +  );
        +  $handler->display->display_options['fields']['field_reward_criteria_reward']['delta_offset'] = '0';
        +  /* Field: Reward: Edit link */
        +  $handler->display->display_options['fields']['edit_link']['id'] = 'edit_link';
        +  $handler->display->display_options['fields']['edit_link']['table'] = 'eck_reward';
        +  $handler->display->display_options['fields']['edit_link']['field'] = 'edit_link';
        +  $handler->display->display_options['fields']['edit_link']['label'] = 'Edit';
        +  /* Field: Reward: Delete link */
        +  $handler->display->display_options['fields']['delete_link']['id'] = 'delete_link';
        +  $handler->display->display_options['fields']['delete_link']['table'] = 'eck_reward';
        +  $handler->display->display_options['fields']['delete_link']['field'] = 'delete_link';
        +  $handler->display->display_options['fields']['delete_link']['label'] = 'Delete';
        +  /* Filter criterion: Reward: reward type */
        +  $handler->display->display_options['filters']['type']['id'] = 'type';
        +  $handler->display->display_options['filters']['type']['table'] = 'eck_reward';
        +  $handler->display->display_options['filters']['type']['field'] = 'type';
        +  $handler->display->display_options['filters']['type']['value'] = array(
        +    'reward_criteria' => 'reward_criteria',
        +  );
        +
        +  /* Display: Content pane */
        +  $handler = $view->new_display('panel_pane', 'Content pane', 'panel_pane_1');
        +  $export['global_reward_dashboard'] = $view;
        +
        +  $view = new view();
        +  $view->name = 'raffle_dashboard';
        +  $view->description = '';
        +  $view->tag = 'default';
        +  $view->base_table = 'eck_raffle';
        +  $view->human_name = 'Raffle Dashboard';
        +  $view->core = 7;
        +  $view->api_version = '3.0';
        +  $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
        +
        +  /* Display: Master */
        +  $handler = $view->new_display('default', 'Master', 'default');
        +  $handler->display->display_options['title'] = 'Raffles';
        +  $handler->display->display_options['use_ajax'] = TRUE;
        +  $handler->display->display_options['use_more_always'] = FALSE;
        +  $handler->display->display_options['access']['type'] = 'none';
        +  $handler->display->display_options['cache']['type'] = 'none';
        +  $handler->display->display_options['query']['type'] = 'views_query';
        +  $handler->display->display_options['exposed_form']['type'] = 'basic';
        +  $handler->display->display_options['pager']['type'] = 'full';
        +  $handler->display->display_options['pager']['options']['items_per_page'] = '10';
        +  $handler->display->display_options['pager']['options']['offset'] = '0';
        +  $handler->display->display_options['pager']['options']['id'] = '0';
        +  $handler->display->display_options['pager']['options']['quantity'] = '9';
        +  $handler->display->display_options['style_plugin'] = 'table';
        +  $handler->display->display_options['style_options']['columns'] = array(
        +    'id' => 'id',
        +    'title' => 'title',
        +    'view_link' => 'view_link',
        +    'edit_link' => 'edit_link',
        +    'delete_link' => 'delete_link',
        +  );
        +  $handler->display->display_options['style_options']['default'] = '-1';
        +  $handler->display->display_options['style_options']['info'] = array(
        +    'id' => array(
        +      'sortable' => 0,
        +      'default_sort_order' => 'asc',
        +      'align' => '',
        +      'separator' => '',
        +      'empty_column' => 0,
        +    ),
        +    'title' => array(
        +      'sortable' => 0,
        +      'default_sort_order' => 'asc',
        +      'align' => '',
        +      'separator' => '',
        +      'empty_column' => 0,
        +    ),
        +    'view_link' => array(
        +      'align' => '',
        +      'separator' => '',
        +      'empty_column' => 0,
        +    ),
        +    'edit_link' => array(
        +      'align' => '',
        +      'separator' => '',
        +      'empty_column' => 0,
        +    ),
        +    'delete_link' => array(
        +      'align' => '',
        +      'separator' => '',
        +      'empty_column' => 0,
        +    ),
        +  );
        +  /* No results behavior: Global: Text area */
        +  $handler->display->display_options['empty']['area']['id'] = 'area';
        +  $handler->display->display_options['empty']['area']['table'] = 'views';
        +  $handler->display->display_options['empty']['area']['field'] = 'area';
        +  $handler->display->display_options['empty']['area']['empty'] = TRUE;
        +  $handler->display->display_options['empty']['area']['content'] = 'Raffle has not yet been created. Please consider creating one.';
        +  $handler->display->display_options['empty']['area']['format'] = 'filtered_html';
        +  /* Field: Raffle: Id */
        +  $handler->display->display_options['fields']['id']['id'] = 'id';
        +  $handler->display->display_options['fields']['id']['table'] = 'eck_raffle';
        +  $handler->display->display_options['fields']['id']['field'] = 'id';
        +  /* Field: Raffle: Title */
        +  $handler->display->display_options['fields']['title']['id'] = 'title';
        +  $handler->display->display_options['fields']['title']['table'] = 'eck_raffle';
        +  $handler->display->display_options['fields']['title']['field'] = 'title';
        +  /* Field: Raffle: Link */
        +  $handler->display->display_options['fields']['view_link']['id'] = 'view_link';
        +  $handler->display->display_options['fields']['view_link']['table'] = 'eck_raffle';
        +  $handler->display->display_options['fields']['view_link']['field'] = 'view_link';
        +  $handler->display->display_options['fields']['view_link']['label'] = 'View';
        +  /* Field: Raffle: Edit link */
        +  $handler->display->display_options['fields']['edit_link']['id'] = 'edit_link';
        +  $handler->display->display_options['fields']['edit_link']['table'] = 'eck_raffle';
        +  $handler->display->display_options['fields']['edit_link']['field'] = 'edit_link';
        +  $handler->display->display_options['fields']['edit_link']['label'] = 'Edit';
        +  /* Field: Raffle: Delete link */
        +  $handler->display->display_options['fields']['delete_link']['id'] = 'delete_link';
        +  $handler->display->display_options['fields']['delete_link']['table'] = 'eck_raffle';
        +  $handler->display->display_options['fields']['delete_link']['field'] = 'delete_link';
        +  $handler->display->display_options['fields']['delete_link']['label'] = 'Delete';
        +  /* Filter criterion: Raffle: raffle type */
        +  $handler->display->display_options['filters']['type']['id'] = 'type';
        +  $handler->display->display_options['filters']['type']['table'] = 'eck_raffle';
        +  $handler->display->display_options['filters']['type']['field'] = 'type';
        +  $handler->display->display_options['filters']['type']['value'] = array(
        +    'raffle' => 'raffle',
        +  );
        +
        +  /* Display: Content pane */
        +  $handler = $view->new_display('panel_pane', 'Content pane', 'panel_pane_1');
        +  $export['raffle_dashboard'] = $view;
        +
        +  $view = new view();
        +  $view->name = 'raffle_entrants';
        +  $view->description = '';
        +  $view->tag = 'default';
        +  $view->base_table = 'eck_raffle';
        +  $view->human_name = 'Raffle Entrants';
        +  $view->core = 7;
        +  $view->api_version = '3.0';
        +  $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
        +
        +  /* Display: Master */
        +  $handler = $view->new_display('default', 'Master', 'default');
        +  $handler->display->display_options['title'] = 'Entries';
        +  $handler->display->display_options['use_more_always'] = FALSE;
        +  $handler->display->display_options['access']['type'] = 'none';
        +  $handler->display->display_options['cache']['type'] = 'none';
        +  $handler->display->display_options['query']['type'] = 'views_query';
        +  $handler->display->display_options['exposed_form']['type'] = 'basic';
        +  $handler->display->display_options['pager']['type'] = 'none';
        +  $handler->display->display_options['pager']['options']['offset'] = '0';
        +  $handler->display->display_options['style_plugin'] = 'table';
        +  $handler->display->display_options['style_options']['columns'] = array(
        +    'id' => 'id',
        +    'uid' => 'uid',
        +  );
        +  $handler->display->display_options['style_options']['default'] = '-1';
        +  $handler->display->display_options['style_options']['info'] = array(
        +    'id' => array(
        +      'sortable' => 0,
        +      'default_sort_order' => 'asc',
        +      'align' => '',
        +      'separator' => '',
        +      'empty_column' => 0,
        +    ),
        +    'uid' => array(
        +      'sortable' => 0,
        +      'default_sort_order' => 'asc',
        +      'align' => '',
        +      'separator' => '',
        +      'empty_column' => 0,
        +    ),
        +  );
        +  /* No results behavior: Global: Text area */
        +  $handler->display->display_options['empty']['area']['id'] = 'area';
        +  $handler->display->display_options['empty']['area']['table'] = 'views';
        +  $handler->display->display_options['empty']['area']['field'] = 'area';
        +  $handler->display->display_options['empty']['area']['empty'] = TRUE;
        +  $handler->display->display_options['empty']['area']['content'] = 'There are currently no entries for this raffle';
        +  $handler->display->display_options['empty']['area']['format'] = 'simple_html';
        +  /* Relationship: Entity Reference: Referenced Entity */
        +  $handler->display->display_options['relationships']['field_raffle_entry_raffle_target_id']['id'] = 'field_raffle_entry_raffle_target_id';
        +  $handler->display->display_options['relationships']['field_raffle_entry_raffle_target_id']['table'] = 'field_data_field_raffle_entry_raffle';
        +  $handler->display->display_options['relationships']['field_raffle_entry_raffle_target_id']['field'] = 'field_raffle_entry_raffle_target_id';
        +  $handler->display->display_options['relationships']['field_raffle_entry_raffle_target_id']['label'] = 'Raffle';
        +  /* Relationship: Raffle: Author */
        +  $handler->display->display_options['relationships']['uid']['id'] = 'uid';
        +  $handler->display->display_options['relationships']['uid']['table'] = 'eck_raffle';
        +  $handler->display->display_options['relationships']['uid']['field'] = 'uid';
        +  /* Field: Raffle: Id */
        +  $handler->display->display_options['fields']['id']['id'] = 'id';
        +  $handler->display->display_options['fields']['id']['table'] = 'eck_raffle';
        +  $handler->display->display_options['fields']['id']['field'] = 'id';
        +  $handler->display->display_options['fields']['id']['label'] = 'Entry Id';
        +  /* Field: Raffle ID */
        +  $handler->display->display_options['fields']['id_1']['id'] = 'id_1';
        +  $handler->display->display_options['fields']['id_1']['table'] = 'eck_raffle';
        +  $handler->display->display_options['fields']['id_1']['field'] = 'id';
        +  $handler->display->display_options['fields']['id_1']['relationship'] = 'field_raffle_entry_raffle_target_id';
        +  $handler->display->display_options['fields']['id_1']['ui_name'] = 'Raffle ID';
        +  $handler->display->display_options['fields']['id_1']['label'] = '';
        +  $handler->display->display_options['fields']['id_1']['exclude'] = TRUE;
        +  $handler->display->display_options['fields']['id_1']['element_label_colon'] = FALSE;
        +  $handler->display->display_options['fields']['id_1']['separator'] = '';
        +  /* Field: User: Uid */
        +  $handler->display->display_options['fields']['uid']['id'] = 'uid';
        +  $handler->display->display_options['fields']['uid']['table'] = 'users';
        +  $handler->display->display_options['fields']['uid']['field'] = 'uid';
        +  $handler->display->display_options['fields']['uid']['relationship'] = 'uid';
        +  $handler->display->display_options['fields']['uid']['label'] = '';
        +  $handler->display->display_options['fields']['uid']['exclude'] = TRUE;
        +  $handler->display->display_options['fields']['uid']['element_label_colon'] = FALSE;
        +  $handler->display->display_options['fields']['uid']['link_to_user'] = FALSE;
        +  /* Field: User: Name */
        +  $handler->display->display_options['fields']['name']['id'] = 'name';
        +  $handler->display->display_options['fields']['name']['table'] = 'users';
        +  $handler->display->display_options['fields']['name']['field'] = 'name';
        +  $handler->display->display_options['fields']['name']['relationship'] = 'uid';
        +  /* Field: Global: Custom text */
        +  $handler->display->display_options['fields']['nothing']['id'] = 'nothing';
        +  $handler->display->display_options['fields']['nothing']['table'] = 'views';
        +  $handler->display->display_options['fields']['nothing']['field'] = 'nothing';
        +  $handler->display->display_options['fields']['nothing']['label'] = 'Operations';
        +  $handler->display->display_options['fields']['nothing']['alter']['text'] = 'Mark as raffle winner';
        +  $handler->display->display_options['fields']['nothing']['alter']['make_link'] = TRUE;
        +  $handler->display->display_options['fields']['nothing']['alter']['path'] = 'play-library-program/add/raffle_winner/[id_1]/[uid]';
        +  /* Sort criterion: Global: Random */
        +  $handler->display->display_options['sorts']['random']['id'] = 'random';
        +  $handler->display->display_options['sorts']['random']['table'] = 'views';
        +  $handler->display->display_options['sorts']['random']['field'] = 'random';
        +  /* Contextual filter: Raffle: Id */
        +  $handler->display->display_options['arguments']['id']['id'] = 'id';
        +  $handler->display->display_options['arguments']['id']['table'] = 'eck_raffle';
        +  $handler->display->display_options['arguments']['id']['field'] = 'id';
        +  $handler->display->display_options['arguments']['id']['relationship'] = 'field_raffle_entry_raffle_target_id';
        +  $handler->display->display_options['arguments']['id']['default_action'] = 'default';
        +  $handler->display->display_options['arguments']['id']['default_argument_type'] = 'node';
        +  $handler->display->display_options['arguments']['id']['summary']['number_of_records'] = '0';
        +  $handler->display->display_options['arguments']['id']['summary']['format'] = 'default_summary';
        +  $handler->display->display_options['arguments']['id']['summary_options']['items_per_page'] = '25';
        +  /* Filter criterion: Raffle: raffle type */
        +  $handler->display->display_options['filters']['type']['id'] = 'type';
        +  $handler->display->display_options['filters']['type']['table'] = 'eck_raffle';
        +  $handler->display->display_options['filters']['type']['field'] = 'type';
        +  $handler->display->display_options['filters']['type']['value'] = array(
        +    'raffle_entry' => 'raffle_entry',
        +  );
        +  $export['raffle_entrants'] = $view;
        +
        +  $view = new view();
        +  $view->name = 'raffle_winner';
        +  $view->description = '';
        +  $view->tag = 'default';
        +  $view->base_table = 'eck_raffle';
        +  $view->human_name = 'Raffle Winner';
        +  $view->core = 7;
        +  $view->api_version = '3.0';
        +  $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
        +
        +  /* Display: Master */
        +  $handler = $view->new_display('default', 'Master', 'default');
        +  $handler->display->display_options['title'] = 'Raffle Winner';
        +  $handler->display->display_options['use_more_always'] = FALSE;
        +  $handler->display->display_options['access']['type'] = 'none';
        +  $handler->display->display_options['cache']['type'] = 'none';
        +  $handler->display->display_options['query']['type'] = 'views_query';
        +  $handler->display->display_options['exposed_form']['type'] = 'basic';
        +  $handler->display->display_options['pager']['type'] = 'full';
        +  $handler->display->display_options['pager']['options']['items_per_page'] = '10';
        +  $handler->display->display_options['style_plugin'] = 'table';
        +  $handler->display->display_options['style_options']['columns'] = array(
        +    'id' => 'id',
        +    'name' => 'name',
        +  );
        +  $handler->display->display_options['style_options']['default'] = '-1';
        +  $handler->display->display_options['style_options']['info'] = array(
        +    'id' => array(
        +      'sortable' => 0,
        +      'default_sort_order' => 'asc',
        +      'align' => '',
        +      'separator' => '',
        +      'empty_column' => 0,
        +    ),
        +    'name' => array(
        +      'sortable' => 0,
        +      'default_sort_order' => 'asc',
        +      'align' => '',
        +      'separator' => '',
        +      'empty_column' => 0,
        +    ),
        +  );
        +  /* No results behavior: Global: Text area */
        +  $handler->display->display_options['empty']['area']['id'] = 'area';
        +  $handler->display->display_options['empty']['area']['table'] = 'views';
        +  $handler->display->display_options['empty']['area']['field'] = 'area';
        +  $handler->display->display_options['empty']['area']['empty'] = TRUE;
        +  $handler->display->display_options['empty']['area']['content'] = 'Winners have not yet been selected for this raffle';
        +  $handler->display->display_options['empty']['area']['format'] = 'simple_html';
        +  /* Relationship: Entity Reference: Referenced Entity */
        +  $handler->display->display_options['relationships']['field_raffle_winner_raffle_target_id']['id'] = 'field_raffle_winner_raffle_target_id';
        +  $handler->display->display_options['relationships']['field_raffle_winner_raffle_target_id']['table'] = 'field_data_field_raffle_winner_raffle';
        +  $handler->display->display_options['relationships']['field_raffle_winner_raffle_target_id']['field'] = 'field_raffle_winner_raffle_target_id';
        +  $handler->display->display_options['relationships']['field_raffle_winner_raffle_target_id']['label'] = 'Raffle';
        +  /* Relationship: Entity Reference: Referenced Entity */
        +  $handler->display->display_options['relationships']['field_raffle_winner_target_id']['id'] = 'field_raffle_winner_target_id';
        +  $handler->display->display_options['relationships']['field_raffle_winner_target_id']['table'] = 'field_data_field_raffle_winner';
        +  $handler->display->display_options['relationships']['field_raffle_winner_target_id']['field'] = 'field_raffle_winner_target_id';
        +  $handler->display->display_options['relationships']['field_raffle_winner_target_id']['label'] = 'Winner';
        +  /* Field: User: Name */
        +  $handler->display->display_options['fields']['name']['id'] = 'name';
        +  $handler->display->display_options['fields']['name']['table'] = 'users';
        +  $handler->display->display_options['fields']['name']['field'] = 'name';
        +  $handler->display->display_options['fields']['name']['relationship'] = 'field_raffle_winner_target_id';
        +  /* Contextual filter: Raffle: Raffle Winner Raffle (field_raffle_winner_raffle) */
        +  $handler->display->display_options['arguments']['field_raffle_winner_raffle_target_id']['id'] = 'field_raffle_winner_raffle_target_id';
        +  $handler->display->display_options['arguments']['field_raffle_winner_raffle_target_id']['table'] = 'field_data_field_raffle_winner_raffle';
        +  $handler->display->display_options['arguments']['field_raffle_winner_raffle_target_id']['field'] = 'field_raffle_winner_raffle_target_id';
        +  $handler->display->display_options['arguments']['field_raffle_winner_raffle_target_id']['default_argument_type'] = 'node';
        +  $handler->display->display_options['arguments']['field_raffle_winner_raffle_target_id']['summary']['number_of_records'] = '0';
        +  $handler->display->display_options['arguments']['field_raffle_winner_raffle_target_id']['summary']['format'] = 'default_summary';
        +  $handler->display->display_options['arguments']['field_raffle_winner_raffle_target_id']['summary_options']['items_per_page'] = '25';
        +  /* Filter criterion: Raffle: raffle type */
        +  $handler->display->display_options['filters']['type']['id'] = 'type';
        +  $handler->display->display_options['filters']['type']['table'] = 'eck_raffle';
        +  $handler->display->display_options['filters']['type']['field'] = 'type';
        +  $handler->display->display_options['filters']['type']['value'] = array(
        +    'raffle_winner' => 'raffle_winner',
        +  );
        +  $export['raffle_winner'] = $view;
        +
        +  $view = new view();
        +  $view->name = 'reward_dashboard';
        +  $view->description = '';
        +  $view->tag = 'default';
        +  $view->base_table = 'eck_reward';
        +  $view->human_name = 'Reward Dashboard';
        +  $view->core = 7;
        +  $view->api_version = '3.0';
        +  $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
        +
        +  /* Display: Master */
        +  $handler = $view->new_display('default', 'Master', 'default');
        +  $handler->display->display_options['title'] = 'Rewards';
        +  $handler->display->display_options['use_ajax'] = TRUE;
        +  $handler->display->display_options['use_more_always'] = FALSE;
        +  $handler->display->display_options['access']['type'] = 'none';
        +  $handler->display->display_options['cache']['type'] = 'none';
        +  $handler->display->display_options['query']['type'] = 'views_query';
        +  $handler->display->display_options['exposed_form']['type'] = 'basic';
        +  $handler->display->display_options['pager']['type'] = 'full';
        +  $handler->display->display_options['style_plugin'] = 'table';
        +  $handler->display->display_options['style_options']['columns'] = array(
        +    'id' => 'id',
        +    'title' => 'title',
        +    'view_link' => 'view_link',
        +    'edit_link' => 'edit_link',
        +    'delete_link' => 'delete_link',
        +  );
        +  $handler->display->display_options['style_options']['default'] = '-1';
        +  $handler->display->display_options['style_options']['info'] = array(
        +    'id' => array(
        +      'sortable' => 0,
        +      'default_sort_order' => 'asc',
        +      'align' => '',
        +      'separator' => '',
        +      'empty_column' => 0,
        +    ),
        +    'title' => array(
        +      'sortable' => 0,
        +      'default_sort_order' => 'asc',
        +      'align' => '',
        +      'separator' => '',
        +      'empty_column' => 0,
        +    ),
        +    'view_link' => array(
        +      'align' => '',
        +      'separator' => '',
        +      'empty_column' => 0,
        +    ),
        +    'edit_link' => array(
        +      'align' => '',
        +      'separator' => '',
        +      'empty_column' => 0,
        +    ),
        +    'delete_link' => array(
        +      'align' => '',
        +      'separator' => '',
        +      'empty_column' => 0,
        +    ),
        +  );
        +  /* No results behavior: Global: Text area */
        +  $handler->display->display_options['empty']['area']['id'] = 'area';
        +  $handler->display->display_options['empty']['area']['table'] = 'views';
        +  $handler->display->display_options['empty']['area']['field'] = 'area';
        +  $handler->display->display_options['empty']['area']['empty'] = TRUE;
        +  $handler->display->display_options['empty']['area']['content'] = 'No rewards have been created';
        +  $handler->display->display_options['empty']['area']['format'] = 'filtered_html';
        +  /* Field: Reward: Id */
        +  $handler->display->display_options['fields']['id']['id'] = 'id';
        +  $handler->display->display_options['fields']['id']['table'] = 'eck_reward';
        +  $handler->display->display_options['fields']['id']['field'] = 'id';
        +  /* Field: Reward: Title */
        +  $handler->display->display_options['fields']['title']['id'] = 'title';
        +  $handler->display->display_options['fields']['title']['table'] = 'eck_reward';
        +  $handler->display->display_options['fields']['title']['field'] = 'title';
        +  /* Field: Reward: Reward Raffle */
        +  $handler->display->display_options['fields']['field_reward_raffle']['id'] = 'field_reward_raffle';
        +  $handler->display->display_options['fields']['field_reward_raffle']['table'] = 'field_data_field_reward_raffle';
        +  $handler->display->display_options['fields']['field_reward_raffle']['field'] = 'field_reward_raffle';
        +  $handler->display->display_options['fields']['field_reward_raffle']['label'] = 'Raffle';
        +  $handler->display->display_options['fields']['field_reward_raffle']['empty'] = 'N/A';
        +  $handler->display->display_options['fields']['field_reward_raffle']['settings'] = array(
        +    'link' => 0,
        +  );
        +  /* Field: Reward: Reward Badge */
        +  $handler->display->display_options['fields']['field_reward_badge']['id'] = 'field_reward_badge';
        +  $handler->display->display_options['fields']['field_reward_badge']['table'] = 'field_data_field_reward_badge';
        +  $handler->display->display_options['fields']['field_reward_badge']['field'] = 'field_reward_badge';
        +  $handler->display->display_options['fields']['field_reward_badge']['label'] = 'Badge';
        +  $handler->display->display_options['fields']['field_reward_badge']['empty'] = 'N/A';
        +  $handler->display->display_options['fields']['field_reward_badge']['settings'] = array(
        +    'link' => 0,
        +  );
        +  /* Field: Reward: Link */
        +  $handler->display->display_options['fields']['view_link']['id'] = 'view_link';
        +  $handler->display->display_options['fields']['view_link']['table'] = 'eck_reward';
        +  $handler->display->display_options['fields']['view_link']['field'] = 'view_link';
        +  $handler->display->display_options['fields']['view_link']['label'] = 'View';
        +  /* Field: Reward: Edit link */
        +  $handler->display->display_options['fields']['edit_link']['id'] = 'edit_link';
        +  $handler->display->display_options['fields']['edit_link']['table'] = 'eck_reward';
        +  $handler->display->display_options['fields']['edit_link']['field'] = 'edit_link';
        +  $handler->display->display_options['fields']['edit_link']['label'] = 'Edit';
        +  /* Field: Reward: Delete link */
        +  $handler->display->display_options['fields']['delete_link']['id'] = 'delete_link';
        +  $handler->display->display_options['fields']['delete_link']['table'] = 'eck_reward';
        +  $handler->display->display_options['fields']['delete_link']['field'] = 'delete_link';
        +  $handler->display->display_options['fields']['delete_link']['label'] = 'Delete';
        +  /* Field: Reward: reward type */
        +  $handler->display->display_options['fields']['type']['id'] = 'type';
        +  $handler->display->display_options['fields']['type']['table'] = 'eck_reward';
        +  $handler->display->display_options['fields']['type']['field'] = 'type';
        +  $handler->display->display_options['fields']['type']['label'] = 'Reward Type';
        +  /* Filter criterion: Reward: reward type */
        +  $handler->display->display_options['filters']['type']['id'] = 'type';
        +  $handler->display->display_options['filters']['type']['table'] = 'eck_reward';
        +  $handler->display->display_options['filters']['type']['field'] = 'type';
        +  $handler->display->display_options['filters']['type']['value'] = array(
        +    'reward' => 'reward',
        +    'physical_reward' => 'physical_reward',
        +    'sticker' => 'sticker',
        +    'print_reward' => 'print_reward',
        +  );
        +
        +  /* Display: Content pane */
        +  $handler = $view->new_display('panel_pane', 'Content pane', 'panel_pane_1');
        +  $export['reward_dashboard'] = $view;
        +
        +  $view = new view();
        +  $view->name = 'rewards_user';
        +  $view->description = '';
        +  $view->tag = 'default';
        +  $view->base_table = 'eck_reward';
        +  $view->human_name = 'Rewards User';
        +  $view->core = 7;
        +  $view->api_version = '3.0';
        +  $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
        +
        +  /* Display: Master */
        +  $handler = $view->new_display('default', 'Master', 'default');
        +  $handler->display->display_options['title'] = 'My print rewards';
        +  $handler->display->display_options['use_more_always'] = FALSE;
        +  $handler->display->display_options['access']['type'] = 'none';
        +  $handler->display->display_options['cache']['type'] = 'none';
        +  $handler->display->display_options['query']['type'] = 'views_query';
        +  $handler->display->display_options['exposed_form']['type'] = 'basic';
        +  $handler->display->display_options['pager']['type'] = 'full';
        +  $handler->display->display_options['style_plugin'] = 'default';
        +  $handler->display->display_options['row_plugin'] = 'fields';
        +  /* No results behavior: Global: Text area */
        +  $handler->display->display_options['empty']['area']['id'] = 'area';
        +  $handler->display->display_options['empty']['area']['table'] = 'views';
        +  $handler->display->display_options['empty']['area']['field'] = 'area';
        +  $handler->display->display_options['empty']['area']['empty'] = TRUE;
        +  $handler->display->display_options['empty']['area']['content'] = 'You have not yet earned any rewards. Why not try doing some activities?';
        +  $handler->display->display_options['empty']['area']['format'] = 'simple_html';
        +  /* Relationship: Entity Reference: Referenced Entity */
        +  $handler->display->display_options['relationships']['field_reward_claim_id_target_id']['id'] = 'field_reward_claim_id_target_id';
        +  $handler->display->display_options['relationships']['field_reward_claim_id_target_id']['table'] = 'field_data_field_reward_claim_id';
        +  $handler->display->display_options['relationships']['field_reward_claim_id_target_id']['field'] = 'field_reward_claim_id_target_id';
        +  $handler->display->display_options['relationships']['field_reward_claim_id_target_id']['required'] = TRUE;
        +  /* Field: Reward: Title */
        +  $handler->display->display_options['fields']['title']['id'] = 'title';
        +  $handler->display->display_options['fields']['title']['table'] = 'eck_reward';
        +  $handler->display->display_options['fields']['title']['field'] = 'title';
        +  $handler->display->display_options['fields']['title']['relationship'] = 'field_reward_claim_id_target_id';
        +  /* Contextual filter: Reward: Author */
        +  $handler->display->display_options['arguments']['uid']['id'] = 'uid';
        +  $handler->display->display_options['arguments']['uid']['table'] = 'eck_reward';
        +  $handler->display->display_options['arguments']['uid']['field'] = 'uid';
        +  $handler->display->display_options['arguments']['uid']['default_action'] = 'default';
        +  $handler->display->display_options['arguments']['uid']['default_argument_type'] = 'current_user';
        +  $handler->display->display_options['arguments']['uid']['summary']['number_of_records'] = '0';
        +  $handler->display->display_options['arguments']['uid']['summary']['format'] = 'default_summary';
        +  $handler->display->display_options['arguments']['uid']['summary_options']['items_per_page'] = '25';
        +  /* Filter criterion: Reward: reward type */
        +  $handler->display->display_options['filters']['type']['id'] = 'type';
        +  $handler->display->display_options['filters']['type']['table'] = 'eck_reward';
        +  $handler->display->display_options['filters']['type']['field'] = 'type';
        +  $handler->display->display_options['filters']['type']['relationship'] = 'field_reward_claim_id_target_id';
        +  $handler->display->display_options['filters']['type']['value'] = array(
        +    'print_reward' => 'print_reward',
        +  );
        +
        +  /* Display: Print Rewards */
        +  $handler = $view->new_display('block', 'Print Rewards', 'block_1');
        +
        +  /* Display: Badges */
        +  $handler = $view->new_display('block', 'Badges', 'block_2');
        +  $handler->display->display_options['defaults']['title'] = FALSE;
        +  $handler->display->display_options['title'] = 'My badges';
        +  $handler->display->display_options['defaults']['fields'] = FALSE;
        +  /* Field: Reward: Reward Badge */
        +  $handler->display->display_options['fields']['field_reward_badge']['id'] = 'field_reward_badge';
        +  $handler->display->display_options['fields']['field_reward_badge']['table'] = 'field_data_field_reward_badge';
        +  $handler->display->display_options['fields']['field_reward_badge']['field'] = 'field_reward_badge';
        +  $handler->display->display_options['fields']['field_reward_badge']['relationship'] = 'field_reward_claim_id_target_id';
        +  $handler->display->display_options['fields']['field_reward_badge']['label'] = '';
        +  $handler->display->display_options['fields']['field_reward_badge']['element_label_colon'] = FALSE;
        +  $handler->display->display_options['fields']['field_reward_badge']['type'] = 'entityreference_entity_view';
        +  $handler->display->display_options['fields']['field_reward_badge']['settings'] = array(
        +    'view_mode' => 'default',
        +    'links' => 1,
        +  );
        +  $handler->display->display_options['defaults']['filter_groups'] = FALSE;
        +  $handler->display->display_options['defaults']['filters'] = FALSE;
        +  /* Filter criterion: Reward: reward type */
        +  $handler->display->display_options['filters']['type']['id'] = 'type';
        +  $handler->display->display_options['filters']['type']['table'] = 'eck_reward';
        +  $handler->display->display_options['filters']['type']['field'] = 'type';
        +  $handler->display->display_options['filters']['type']['relationship'] = 'field_reward_claim_id_target_id';
        +  $handler->display->display_options['filters']['type']['value'] = array(
        +    'reward' => 'reward',
        +  );
        +  /* Filter criterion: Reward: Reward Badge (field_reward_badge) */
        +  $handler->display->display_options['filters']['field_reward_badge_target_id']['id'] = 'field_reward_badge_target_id';
        +  $handler->display->display_options['filters']['field_reward_badge_target_id']['table'] = 'field_data_field_reward_badge';
        +  $handler->display->display_options['filters']['field_reward_badge_target_id']['field'] = 'field_reward_badge_target_id';
        +  $handler->display->display_options['filters']['field_reward_badge_target_id']['relationship'] = 'field_reward_claim_id_target_id';
        +  $handler->display->display_options['filters']['field_reward_badge_target_id']['operator'] = 'not empty';
        +  $export['rewards_user'] = $view;
        +
        +  return $export;
        +}
        diff --git a/docroot/sites/all/modules/features/program_badges_view/program_badges_view.features.inc b/docroot/sites/all/modules/features/program_badges_view/program_badges_view.features.inc
        new file mode 100644
        index 00000000..b746daaf
        --- /dev/null
        +++ b/docroot/sites/all/modules/features/program_badges_view/program_badges_view.features.inc
        @@ -0,0 +1,12 @@
        + "3.0");
        +}
        diff --git a/docroot/sites/all/modules/features/program_badges_view/program_badges_view.info b/docroot/sites/all/modules/features/program_badges_view/program_badges_view.info
        new file mode 100644
        index 00000000..2f1e7a9b
        --- /dev/null
        +++ b/docroot/sites/all/modules/features/program_badges_view/program_badges_view.info
        @@ -0,0 +1,11 @@
        +name = Program badges view
        +core = 7.x
        +package = Features
        +version = 7.x-1.0
        +dependencies[] = ctools
        +dependencies[] = views
        +dependencies[] = views_php
        +features[ctools][] = views:views_default:3.0
        +features[features_api][] = api:2
        +features[views_view][] = program_badges
        +project path = sites/all/modules/features
        diff --git a/docroot/sites/all/modules/features/program_badges_view/program_badges_view.module b/docroot/sites/all/modules/features/program_badges_view/program_badges_view.module
        new file mode 100644
        index 00000000..f19cce39
        --- /dev/null
        +++ b/docroot/sites/all/modules/features/program_badges_view/program_badges_view.module
        @@ -0,0 +1,7 @@
        +name = 'program_badges';
        +  $view->description = '';
        +  $view->tag = 'default';
        +  $view->base_table = 'eck_badge';
        +  $view->human_name = 'Program badges';
        +  $view->core = 7;
        +  $view->api_version = '3.0';
        +  $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
        +
        +  /* Display: Master */
        +  $handler = $view->new_display('default', 'Master', 'default');
        +  $handler->display->display_options['title'] = 'Program badges';
        +  $handler->display->display_options['use_more_always'] = FALSE;
        +  $handler->display->display_options['access']['type'] = 'none';
        +  $handler->display->display_options['cache']['type'] = 'none';
        +  $handler->display->display_options['query']['type'] = 'views_query';
        +  $handler->display->display_options['exposed_form']['type'] = 'basic';
        +  $handler->display->display_options['pager']['type'] = 'some';
        +  $handler->display->display_options['pager']['options']['items_per_page'] = '5';
        +  $handler->display->display_options['style_plugin'] = 'default';
        +  $handler->display->display_options['row_plugin'] = 'fields';
        +  /* Field: Badge: Id */
        +  $handler->display->display_options['fields']['id']['id'] = 'id';
        +  $handler->display->display_options['fields']['id']['table'] = 'eck_badge';
        +  $handler->display->display_options['fields']['id']['field'] = 'id';
        +
        +  /* Display: Block */
        +  $handler = $view->new_display('block', 'Block', 'block');
        +  $handler->display->display_options['defaults']['pager'] = FALSE;
        +  $handler->display->display_options['pager']['type'] = 'none';
        +  $handler->display->display_options['pager']['options']['offset'] = '0';
        +  $handler->display->display_options['defaults']['style_plugin'] = FALSE;
        +  $handler->display->display_options['style_plugin'] = 'default';
        +  $handler->display->display_options['defaults']['style_options'] = FALSE;
        +  $handler->display->display_options['defaults']['row_plugin'] = FALSE;
        +  $handler->display->display_options['row_plugin'] = 'fields';
        +  $handler->display->display_options['defaults']['row_options'] = FALSE;
        +  $handler->display->display_options['defaults']['header'] = FALSE;
        +  /* Header: Global: Text area */
        +  $handler->display->display_options['header']['area']['id'] = 'area';
        +  $handler->display->display_options['header']['area']['table'] = 'views';
        +  $handler->display->display_options['header']['area']['field'] = 'area';
        +  $handler->display->display_options['header']['area']['content'] = '

        Badges You Can Earn!

        +

        Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus

        '; + $handler->display->display_options['header']['area']['format'] = 'full_html'; + $handler->display->display_options['defaults']['fields'] = FALSE; + /* Field: Badge: Badge Image */ + $handler->display->display_options['fields']['field_badge_image']['id'] = 'field_badge_image'; + $handler->display->display_options['fields']['field_badge_image']['table'] = 'field_data_field_badge_image'; + $handler->display->display_options['fields']['field_badge_image']['field'] = 'field_badge_image'; + $handler->display->display_options['fields']['field_badge_image']['label'] = ''; + $handler->display->display_options['fields']['field_badge_image']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['field_badge_image']['click_sort_column'] = 'fid'; + $handler->display->display_options['fields']['field_badge_image']['settings'] = array( + 'image_style' => '', + 'image_link' => '', + ); + /* Field: Badge: Title */ + $handler->display->display_options['fields']['title']['id'] = 'title'; + $handler->display->display_options['fields']['title']['table'] = 'eck_badge'; + $handler->display->display_options['fields']['title']['field'] = 'title'; + $handler->display->display_options['fields']['title']['label'] = ''; + $handler->display->display_options['fields']['title']['element_label_colon'] = FALSE; + /* Field: Badge: Badge Description */ + $handler->display->display_options['fields']['field_badge_description']['id'] = 'field_badge_description'; + $handler->display->display_options['fields']['field_badge_description']['table'] = 'field_data_field_badge_description'; + $handler->display->display_options['fields']['field_badge_description']['field'] = 'field_badge_description'; + $handler->display->display_options['fields']['field_badge_description']['label'] = ''; + $handler->display->display_options['fields']['field_badge_description']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['field_badge_description']['type'] = 'text_trimmed'; + $handler->display->display_options['fields']['field_badge_description']['settings'] = array( + 'trim_length' => '125', + ); + $handler->display->display_options['defaults']['filter_groups'] = FALSE; + $handler->display->display_options['defaults']['filters'] = FALSE; + /* Filter criterion: Badge: badge type */ + $handler->display->display_options['filters']['type']['id'] = 'type'; + $handler->display->display_options['filters']['type']['table'] = 'eck_badge'; + $handler->display->display_options['filters']['type']['field'] = 'type'; + $handler->display->display_options['filters']['type']['value'] = array( + 'badge' => 'badge', + ); + $handler->display->display_options['block_description'] = 'Program badges block'; + $export['program_badges'] = $view; + + return $export; +} diff --git a/docroot/sites/all/modules/features/program_reward_raffle_view/program_reward_raffle_view.features.inc b/docroot/sites/all/modules/features/program_reward_raffle_view/program_reward_raffle_view.features.inc new file mode 100755 index 00000000..d0aa7daf --- /dev/null +++ b/docroot/sites/all/modules/features/program_reward_raffle_view/program_reward_raffle_view.features.inc @@ -0,0 +1,12 @@ + "3.0"); +} diff --git a/docroot/sites/all/modules/features/program_reward_raffle_view/program_reward_raffle_view.info b/docroot/sites/all/modules/features/program_reward_raffle_view/program_reward_raffle_view.info new file mode 100755 index 00000000..c5dcd0d0 --- /dev/null +++ b/docroot/sites/all/modules/features/program_reward_raffle_view/program_reward_raffle_view.info @@ -0,0 +1,10 @@ +name = Program Reward Raffle view +description = View for all program raffle reward +core = 7.x +package = Features +version = 7.x-1.0 +dependencies[] = views +features[ctools][] = views:views_default:3.0 +features[features_api][] = api:2 +features[views_view][] = program_rewards_raffle +project path = sites/all/modules/features diff --git a/docroot/sites/all/modules/features/program_reward_raffle_view/program_reward_raffle_view.module b/docroot/sites/all/modules/features/program_reward_raffle_view/program_reward_raffle_view.module new file mode 100755 index 00000000..4c8d8146 --- /dev/null +++ b/docroot/sites/all/modules/features/program_reward_raffle_view/program_reward_raffle_view.module @@ -0,0 +1,7 @@ +name = 'program_rewards_raffle'; + $view->description = ''; + $view->tag = 'default'; + $view->base_table = 'eck_raffle'; + $view->human_name = 'Program rewards raffle'; + $view->core = 7; + $view->api_version = '3.0'; + $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */ + + /* Display: Master */ + $handler = $view->new_display('default', 'Master', 'default'); + $handler->display->display_options['title'] = 'Program rewards raffle'; + $handler->display->display_options['use_more_always'] = FALSE; + $handler->display->display_options['access']['type'] = 'none'; + $handler->display->display_options['cache']['type'] = 'none'; + $handler->display->display_options['query']['type'] = 'views_query'; + $handler->display->display_options['exposed_form']['type'] = 'basic'; + $handler->display->display_options['pager']['type'] = 'full'; + $handler->display->display_options['pager']['options']['items_per_page'] = '10'; + $handler->display->display_options['style_plugin'] = 'default'; + $handler->display->display_options['row_plugin'] = 'fields'; + /* Field: Raffle: Id */ + $handler->display->display_options['fields']['id']['id'] = 'id'; + $handler->display->display_options['fields']['id']['table'] = 'eck_raffle'; + $handler->display->display_options['fields']['id']['field'] = 'id'; + + /* Display: Page */ + $handler = $view->new_display('page', 'Page', 'page'); + $handler->display->display_options['defaults']['fields'] = FALSE; + /* Field: Raffle: Raffle Image */ + $handler->display->display_options['fields']['field_raffle_image']['id'] = 'field_raffle_image'; + $handler->display->display_options['fields']['field_raffle_image']['table'] = 'field_data_field_raffle_image'; + $handler->display->display_options['fields']['field_raffle_image']['field'] = 'field_raffle_image'; + $handler->display->display_options['fields']['field_raffle_image']['label'] = ''; + $handler->display->display_options['fields']['field_raffle_image']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['field_raffle_image']['click_sort_column'] = 'fid'; + $handler->display->display_options['fields']['field_raffle_image']['settings'] = array( + 'image_style' => '', + 'image_link' => '', + ); + /* Field: Raffle: Title */ + $handler->display->display_options['fields']['title']['id'] = 'title'; + $handler->display->display_options['fields']['title']['table'] = 'eck_raffle'; + $handler->display->display_options['fields']['title']['field'] = 'title'; + $handler->display->display_options['fields']['title']['label'] = ''; + $handler->display->display_options['fields']['title']['element_label_colon'] = FALSE; + /* Field: Raffle: Raffle description */ + $handler->display->display_options['fields']['field_raffle_description']['id'] = 'field_raffle_description'; + $handler->display->display_options['fields']['field_raffle_description']['table'] = 'field_data_field_raffle_description'; + $handler->display->display_options['fields']['field_raffle_description']['field'] = 'field_raffle_description'; + $handler->display->display_options['fields']['field_raffle_description']['label'] = ''; + $handler->display->display_options['fields']['field_raffle_description']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['field_raffle_description']['type'] = 'text_trimmed'; + $handler->display->display_options['fields']['field_raffle_description']['settings'] = array( + 'trim_length' => '125', + ); + $handler->display->display_options['defaults']['filter_groups'] = FALSE; + $handler->display->display_options['defaults']['filters'] = FALSE; + /* Filter criterion: Raffle: raffle type */ + $handler->display->display_options['filters']['type']['id'] = 'type'; + $handler->display->display_options['filters']['type']['table'] = 'eck_raffle'; + $handler->display->display_options['filters']['type']['field'] = 'type'; + $handler->display->display_options['filters']['type']['value'] = array( + 'raffle' => 'raffle', + ); + $handler->display->display_options['path'] = 'program-rewards-raffle'; + + /* Display: Block */ + $handler = $view->new_display('block', 'Block', 'block_1'); + $handler->display->display_options['defaults']['fields'] = FALSE; + /* Field: Raffle: Raffle Image */ + $handler->display->display_options['fields']['field_raffle_image']['id'] = 'field_raffle_image'; + $handler->display->display_options['fields']['field_raffle_image']['table'] = 'field_data_field_raffle_image'; + $handler->display->display_options['fields']['field_raffle_image']['field'] = 'field_raffle_image'; + $handler->display->display_options['fields']['field_raffle_image']['label'] = ''; + $handler->display->display_options['fields']['field_raffle_image']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['field_raffle_image']['click_sort_column'] = 'fid'; + $handler->display->display_options['fields']['field_raffle_image']['settings'] = array( + 'image_style' => '', + 'image_link' => '', + ); + /* Field: Raffle: Title */ + $handler->display->display_options['fields']['title']['id'] = 'title'; + $handler->display->display_options['fields']['title']['table'] = 'eck_raffle'; + $handler->display->display_options['fields']['title']['field'] = 'title'; + $handler->display->display_options['fields']['title']['label'] = ''; + $handler->display->display_options['fields']['title']['element_label_colon'] = FALSE; + /* Field: Raffle: Raffle description */ + $handler->display->display_options['fields']['field_raffle_description']['id'] = 'field_raffle_description'; + $handler->display->display_options['fields']['field_raffle_description']['table'] = 'field_data_field_raffle_description'; + $handler->display->display_options['fields']['field_raffle_description']['field'] = 'field_raffle_description'; + $handler->display->display_options['fields']['field_raffle_description']['label'] = ''; + $handler->display->display_options['fields']['field_raffle_description']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['field_raffle_description']['type'] = 'text_trimmed'; + $handler->display->display_options['fields']['field_raffle_description']['settings'] = array( + 'trim_length' => '125', + ); + $handler->display->display_options['defaults']['filter_groups'] = FALSE; + $handler->display->display_options['defaults']['filters'] = FALSE; + /* Filter criterion: Raffle: raffle type */ + $handler->display->display_options['filters']['type']['id'] = 'type'; + $handler->display->display_options['filters']['type']['table'] = 'eck_raffle'; + $handler->display->display_options['filters']['type']['field'] = 'type'; + $handler->display->display_options['filters']['type']['value'] = array( + 'raffle' => 'raffle', + ); + $handler->display->display_options['block_description'] = 'Program rewards raffle block'; + $export['program_rewards_raffle'] = $view; + + return $export; +} diff --git a/docroot/sites/all/modules/features/program_rewards_view/program_rewards_view.features.inc b/docroot/sites/all/modules/features/program_rewards_view/program_rewards_view.features.inc new file mode 100755 index 00000000..70a0edb3 --- /dev/null +++ b/docroot/sites/all/modules/features/program_rewards_view/program_rewards_view.features.inc @@ -0,0 +1,12 @@ + "3.0"); +} diff --git a/docroot/sites/all/modules/features/program_rewards_view/program_rewards_view.info b/docroot/sites/all/modules/features/program_rewards_view/program_rewards_view.info new file mode 100755 index 00000000..4800578b --- /dev/null +++ b/docroot/sites/all/modules/features/program_rewards_view/program_rewards_view.info @@ -0,0 +1,10 @@ +name = Program rewards view +description = View for all program rewards +core = 7.x +package = Features +version = 7.x-1.0 +dependencies[] = views +features[ctools][] = views:views_default:3.0 +features[features_api][] = api:2 +features[views_view][] = program_rewards +project path = sites/all/modules/features diff --git a/docroot/sites/all/modules/features/program_rewards_view/program_rewards_view.module b/docroot/sites/all/modules/features/program_rewards_view/program_rewards_view.module new file mode 100755 index 00000000..ce395302 --- /dev/null +++ b/docroot/sites/all/modules/features/program_rewards_view/program_rewards_view.module @@ -0,0 +1,7 @@ +name = 'program_rewards'; + $view->description = ''; + $view->tag = 'default'; + $view->base_table = 'eck_reward'; + $view->human_name = 'Program rewards'; + $view->core = 7; + $view->api_version = '3.0'; + $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */ + + /* Display: Master */ + $handler = $view->new_display('default', 'Master', 'default'); + $handler->display->display_options['title'] = 'Program rewards'; + $handler->display->display_options['use_more_always'] = FALSE; + $handler->display->display_options['access']['type'] = 'none'; + $handler->display->display_options['cache']['type'] = 'none'; + $handler->display->display_options['query']['type'] = 'views_query'; + $handler->display->display_options['exposed_form']['type'] = 'basic'; + $handler->display->display_options['pager']['type'] = 'full'; + $handler->display->display_options['pager']['options']['items_per_page'] = '10'; + $handler->display->display_options['style_plugin'] = 'default'; + $handler->display->display_options['row_plugin'] = 'fields'; + /* Field: Reward: Id */ + $handler->display->display_options['fields']['id']['id'] = 'id'; + $handler->display->display_options['fields']['id']['table'] = 'eck_reward'; + $handler->display->display_options['fields']['id']['field'] = 'id'; + + /* Display: Page */ + $handler = $view->new_display('page', 'Page', 'page'); + $handler->display->display_options['defaults']['relationships'] = FALSE; + $handler->display->display_options['defaults']['fields'] = FALSE; + /* Field: Reward: Image upload */ + $handler->display->display_options['fields']['field_image_upload']['id'] = 'field_image_upload'; + $handler->display->display_options['fields']['field_image_upload']['table'] = 'field_data_field_image_upload'; + $handler->display->display_options['fields']['field_image_upload']['field'] = 'field_image_upload'; + $handler->display->display_options['fields']['field_image_upload']['label'] = ''; + $handler->display->display_options['fields']['field_image_upload']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['field_image_upload']['click_sort_column'] = 'fid'; + $handler->display->display_options['fields']['field_image_upload']['settings'] = array( + 'image_style' => '', + 'image_link' => '', + ); + /* Field: Reward: Title */ + $handler->display->display_options['fields']['title']['id'] = 'title'; + $handler->display->display_options['fields']['title']['table'] = 'eck_reward'; + $handler->display->display_options['fields']['title']['field'] = 'title'; + $handler->display->display_options['fields']['title']['label'] = ''; + $handler->display->display_options['fields']['title']['element_label_colon'] = FALSE; + /* Field: Reward: Description */ + $handler->display->display_options['fields']['field_physical_description']['id'] = 'field_physical_description'; + $handler->display->display_options['fields']['field_physical_description']['table'] = 'field_data_field_physical_description'; + $handler->display->display_options['fields']['field_physical_description']['field'] = 'field_physical_description'; + $handler->display->display_options['fields']['field_physical_description']['label'] = ''; + $handler->display->display_options['fields']['field_physical_description']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['field_physical_description']['type'] = 'text_trimmed'; + $handler->display->display_options['fields']['field_physical_description']['settings'] = array( + 'trim_length' => '125', + ); + $handler->display->display_options['defaults']['filter_groups'] = FALSE; + $handler->display->display_options['defaults']['filters'] = FALSE; + /* Filter criterion: Reward: reward type */ + $handler->display->display_options['filters']['type']['id'] = 'type'; + $handler->display->display_options['filters']['type']['table'] = 'eck_reward'; + $handler->display->display_options['filters']['type']['field'] = 'type'; + $handler->display->display_options['filters']['type']['value'] = array( + 'physical_reward' => 'physical_reward', + ); + $handler->display->display_options['path'] = 'program-rewards'; + + /* Display: Block */ + $handler = $view->new_display('block', 'Block', 'block_1'); + $handler->display->display_options['defaults']['header'] = FALSE; + /* Header: Global: Text area */ + $handler->display->display_options['header']['area']['id'] = 'area'; + $handler->display->display_options['header']['area']['table'] = 'views'; + $handler->display->display_options['header']['area']['field'] = 'area'; + $handler->display->display_options['header']['area']['content'] = '

        Rewards You Can Earn!

        +

        Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus

        '; + $handler->display->display_options['header']['area']['format'] = 'full_html'; + $handler->display->display_options['defaults']['fields'] = FALSE; + /* Field: Reward: Image upload */ + $handler->display->display_options['fields']['field_image_upload']['id'] = 'field_image_upload'; + $handler->display->display_options['fields']['field_image_upload']['table'] = 'field_data_field_image_upload'; + $handler->display->display_options['fields']['field_image_upload']['field'] = 'field_image_upload'; + $handler->display->display_options['fields']['field_image_upload']['label'] = ''; + $handler->display->display_options['fields']['field_image_upload']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['field_image_upload']['click_sort_column'] = 'fid'; + $handler->display->display_options['fields']['field_image_upload']['settings'] = array( + 'image_style' => '', + 'image_link' => '', + ); + /* Field: Reward: Title */ + $handler->display->display_options['fields']['title']['id'] = 'title'; + $handler->display->display_options['fields']['title']['table'] = 'eck_reward'; + $handler->display->display_options['fields']['title']['field'] = 'title'; + $handler->display->display_options['fields']['title']['label'] = ''; + $handler->display->display_options['fields']['title']['element_label_colon'] = FALSE; + /* Field: Reward: Description */ + $handler->display->display_options['fields']['field_physical_description']['id'] = 'field_physical_description'; + $handler->display->display_options['fields']['field_physical_description']['table'] = 'field_data_field_physical_description'; + $handler->display->display_options['fields']['field_physical_description']['field'] = 'field_physical_description'; + $handler->display->display_options['fields']['field_physical_description']['label'] = ''; + $handler->display->display_options['fields']['field_physical_description']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['field_physical_description']['type'] = 'text_trimmed'; + $handler->display->display_options['fields']['field_physical_description']['settings'] = array( + 'trim_length' => '125', + ); + $handler->display->display_options['defaults']['filter_groups'] = FALSE; + $handler->display->display_options['defaults']['filters'] = FALSE; + /* Filter criterion: Reward: reward type */ + $handler->display->display_options['filters']['type']['id'] = 'type'; + $handler->display->display_options['filters']['type']['table'] = 'eck_reward'; + $handler->display->display_options['filters']['type']['field'] = 'type'; + $handler->display->display_options['filters']['type']['value'] = array( + 'physical_reward' => 'physical_reward', + ); + $handler->display->display_options['block_description'] = 'Program rewards block'; + $export['program_rewards'] = $view; + + return $export; +} diff --git a/docroot/sites/all/modules/features/video_game_review_content_type/video_game_review_content_type.features.field_base.inc b/docroot/sites/all/modules/features/video_game_review_content_type/video_game_review_content_type.features.field_base.inc new file mode 100644 index 00000000..20eb1bda --- /dev/null +++ b/docroot/sites/all/modules/features/video_game_review_content_type/video_game_review_content_type.features.field_base.inc @@ -0,0 +1,170 @@ + 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_age_rating_of_game', + 'field_permissions' => array( + 'type' => 0, + ), + 'indexes' => array( + 'value' => array( + 0 => 'value', + ), + ), + 'locked' => 0, + 'module' => 'list', + 'settings' => array( + 'allowed_values' => array( + 'teen' => 'Teen', + 'adult' => 'Adult', + ), + 'allowed_values_function' => '', + 'profile2_private' => FALSE, + ), + 'translatable' => 0, + 'type' => 'list_text', + ); + + // Exported field_base: 'field_catalog_link_video_game'. + $field_bases['field_catalog_link_video_game'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_catalog_link_video_game', + 'field_permissions' => array( + 'type' => 0, + ), + 'indexes' => array(), + 'locked' => 0, + 'module' => 'link', + 'settings' => array( + 'attributes' => array( + 'class' => '', + 'rel' => '', + 'target' => 'default', + ), + 'display' => array( + 'url_cutoff' => 80, + ), + 'enable_tokens' => 1, + 'profile2_private' => FALSE, + 'title' => 'optional', + 'title_maxlength' => 128, + 'title_value' => '', + 'url' => 0, + ), + 'translatable' => 0, + 'type' => 'link_field', + ); + + // Exported field_base: 'field_platform'. + $field_bases['field_platform'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_platform', + 'field_permissions' => array( + 'type' => 0, + ), + 'indexes' => array( + 'value' => array( + 0 => 'value', + ), + ), + 'locked' => 0, + 'module' => 'list', + 'settings' => array( + 'allowed_values' => array( + 'nintendo_game_cube' => 'Nintendo GameCube', + 'nintendo_wii' => 'intendo Wii', + 'nintendo_wii_u' => 'Nintendo Wii U', + 'playstation_portable_psp' => 'Playstation Portable (PSP)', + 'playstation_2' => 'Playstation 2', + 'playstation_3' => 'Playstation 3', + 'playstation_4' => 'Playstation 4', + 'sega_dreamcast' => 'Sega Dreamcast', + 'xbox' => 'XBox', + 'xbox_one' => 'XBox One', + 'xbox_360' => ' XBox 360', + 'other' => 'Other', + ), + 'allowed_values_function' => '', + 'profile2_private' => FALSE, + ), + 'translatable' => 0, + 'type' => 'list_text', + ); + + // Exported field_base: 'field_platform_other_option'. + $field_bases['field_platform_other_option'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_platform_other_option', + 'field_permissions' => array( + 'type' => 0, + ), + 'indexes' => array( + 'format' => array( + 0 => 'format', + ), + ), + 'locked' => 0, + 'module' => 'text', + 'settings' => array( + 'max_length' => 255, + 'profile2_private' => FALSE, + ), + 'translatable' => 0, + 'type' => 'text', + ); + + // Exported field_base: 'field_please_select_videogame'. + $field_bases['field_please_select_videogame'] = array( + 'active' => 1, + 'cardinality' => 1, + 'deleted' => 0, + 'entity_types' => array(), + 'field_name' => 'field_please_select_videogame', + 'field_permissions' => array( + 'type' => 0, + ), + 'indexes' => array( + 'value' => array( + 0 => 'value', + ), + ), + 'locked' => 0, + 'module' => 'list', + 'settings' => array( + 'allowed_values' => array( + 'public' => 'Other players can read this review and see my username', + 'publicnoname' => 'Other players can read this review, but I don’t want them to see my username', + 'private' => 'I don’t want other players to see this review', + ), + 'allowed_values_function' => '', + 'profile2_private' => FALSE, + ), + 'translatable' => 0, + 'type' => 'list_text', + ); + + return $field_bases; +} diff --git a/docroot/sites/all/modules/features/video_game_review_content_type/video_game_review_content_type.features.field_instance.inc b/docroot/sites/all/modules/features/video_game_review_content_type/video_game_review_content_type.features.field_instance.inc new file mode 100644 index 00000000..05e07818 --- /dev/null +++ b/docroot/sites/all/modules/features/video_game_review_content_type/video_game_review_content_type.features.field_instance.inc @@ -0,0 +1,377 @@ + 'video_game_review', + 'default_value' => array( + 0 => array( + 'summary' => '', + 'value' => '', + 'format' => 'simple_html', + ), + ), + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'hidden', + 'module' => 'text', + 'settings' => array(), + 'type' => 'text_default', + 'weight' => 0, + ), + 'teaser' => array( + 'label' => 'hidden', + 'module' => 'text', + 'settings' => array( + 'trim_length' => 600, + ), + 'type' => 'text_summary_or_trimmed', + 'weight' => 0, + ), + ), + 'display_label' => '', + 'entity_type' => 'node', + 'field_name' => 'body', + 'label' => 'Write Your Review', + 'placeholder' => '', + 'required' => 1, + 'settings' => array( + 'better_formats' => array( + 'allowed_formats' => array( + 'filtered_html' => 'filtered_html', + 'filtered_html_with_tables' => 'filtered_html_with_tables', + 'full_html' => 'full_html', + 'php_code' => 'php_code', + 'plain_text' => 'plain_text', + 'simple_html' => 'simple_html', + ), + 'allowed_formats_toggle' => 0, + 'default_order_toggle' => 0, + 'default_order_wrapper' => array( + 'formats' => array( + 'filtered_html' => array( + 'weight' => -9, + ), + 'filtered_html_with_tables' => array( + 'weight' => -7, + ), + 'full_html' => array( + 'weight' => -6, + ), + 'php_code' => array( + 'weight' => -4, + ), + 'plain_text' => array( + 'weight' => -5, + ), + 'simple_html' => array( + 'weight' => -10, + ), + ), + ), + ), + 'display_summary' => 1, + 'text_processing' => 1, + 'user_register_form' => FALSE, + ), + 'use_title_as_placeholder' => 0, + 'widget' => array( + 'active' => 1, + 'module' => 'text', + 'settings' => array( + 'rows' => 20, + 'summary_rows' => 5, + ), + 'type' => 'text_textarea_with_summary', + 'weight' => 6, + ), + 'workbench_access_field' => 0, + ); + + // Exported field_instance: 'node-video_game_review-field_age_rating_of_game'. + $field_instances['node-video_game_review-field_age_rating_of_game'] = array( + 'bundle' => 'video_game_review', + 'default_value' => NULL, + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'list', + 'settings' => array(), + 'type' => 'list_default', + 'weight' => 2, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'display_label' => '', + 'entity_type' => 'node', + 'field_name' => 'field_age_rating_of_game', + 'label' => 'Age Rating Of Game', + 'required' => 0, + 'settings' => array( + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'options', + 'settings' => array(), + 'type' => 'options_buttons', + 'weight' => 4, + ), + 'workbench_access_field' => 0, + ); + + // Exported field_instance: + // 'node-video_game_review-field_catalog_link_video_game'. + $field_instances['node-video_game_review-field_catalog_link_video_game'] = array( + 'bundle' => 'video_game_review', + 'default_value' => NULL, + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'link', + 'settings' => array(), + 'type' => 'link_default', + 'weight' => 3, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'display_label' => '', + 'entity_type' => 'node', + 'field_name' => 'field_catalog_link_video_game', + 'label' => 'Catalog Link', + 'required' => 0, + 'settings' => array( + 'absolute_url' => 1, + 'attributes' => array( + 'class' => '', + 'configurable_class' => 0, + 'configurable_title' => 0, + 'rel' => '', + 'target' => 'default', + 'title' => '', + ), + 'display' => array( + 'url_cutoff' => 80, + ), + 'enable_tokens' => 1, + 'linkit' => array( + 'enable' => 0, + 'insert_plugin' => '', + ), + 'rel_remove' => 'default', + 'title' => 'none', + 'title_label_use_field_label' => 0, + 'title_maxlength' => 128, + 'title_value' => '', + 'url' => 0, + 'user_register_form' => FALSE, + 'validate_url' => 1, + ), + 'widget' => array( + 'active' => 0, + 'module' => 'link', + 'settings' => array(), + 'type' => 'link_field', + 'weight' => 5, + ), + 'workbench_access_field' => 0, + ); + + // Exported field_instance: 'node-video_game_review-field_platform'. + $field_instances['node-video_game_review-field_platform'] = array( + 'bundle' => 'video_game_review', + 'default_value' => NULL, + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'list', + 'settings' => array(), + 'type' => 'list_default', + 'weight' => 1, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'display_label' => '', + 'entity_type' => 'node', + 'field_name' => 'field_platform', + 'label' => 'Platform', + 'required' => 1, + 'settings' => array( + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'options', + 'settings' => array(), + 'type' => 'options_buttons', + 'weight' => 2, + ), + 'workbench_access_field' => 0, + ); + + // Exported field_instance: + // 'node-video_game_review-field_platform_other_option'. + $field_instances['node-video_game_review-field_platform_other_option'] = array( + 'bundle' => 'video_game_review', + 'default_value' => NULL, + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'text', + 'settings' => array(), + 'type' => 'text_default', + 'weight' => 5, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'display_label' => '', + 'entity_type' => 'node', + 'field_name' => 'field_platform_other_option', + 'label' => 'Platform other option', + 'placeholder' => 'Please Enter Platform', + 'required' => 0, + 'settings' => array( + 'better_formats' => array( + 'allowed_formats' => array( + 'filtered_html' => 'filtered_html', + 'filtered_html_with_tables' => 'filtered_html_with_tables', + 'full_html' => 'full_html', + 'php_code' => 'php_code', + 'plain_text' => 'plain_text', + 'simple_html' => 'simple_html', + ), + 'allowed_formats_toggle' => 0, + 'default_order_toggle' => 0, + 'default_order_wrapper' => array( + 'formats' => array( + 'filtered_html' => array( + 'weight' => -9, + ), + 'filtered_html_with_tables' => array( + 'weight' => -7, + ), + 'full_html' => array( + 'weight' => -6, + ), + 'php_code' => array( + 'weight' => -4, + ), + 'plain_text' => array( + 'weight' => -5, + ), + 'simple_html' => array( + 'weight' => -10, + ), + ), + ), + ), + 'linkit' => array( + 'enable' => 0, + 'insert_plugin' => '', + ), + 'text_processing' => 0, + 'user_register_form' => FALSE, + ), + 'use_title_as_placeholder' => 0, + 'widget' => array( + 'active' => 1, + 'module' => 'text', + 'settings' => array( + 'size' => 60, + ), + 'type' => 'text_textfield', + 'weight' => 3, + ), + 'workbench_access_field' => 0, + ); + + // Exported field_instance: + // 'node-video_game_review-field_please_select_videogame'. + $field_instances['node-video_game_review-field_please_select_videogame'] = array( + 'bundle' => 'video_game_review', + 'default_value' => NULL, + 'deleted' => 0, + 'description' => '', + 'display' => array( + 'default' => array( + 'label' => 'above', + 'module' => 'list', + 'settings' => array(), + 'type' => 'list_default', + 'weight' => 4, + ), + 'teaser' => array( + 'label' => 'above', + 'settings' => array(), + 'type' => 'hidden', + 'weight' => 0, + ), + ), + 'display_label' => '', + 'entity_type' => 'node', + 'field_name' => 'field_please_select_videogame', + 'label' => 'Please select one', + 'required' => 0, + 'settings' => array( + 'user_register_form' => FALSE, + ), + 'widget' => array( + 'active' => 1, + 'module' => 'options', + 'settings' => array(), + 'type' => 'options_buttons', + 'weight' => 7, + ), + 'workbench_access_field' => 0, + ); + + // Translatables + // Included for use with string extractors like potx. + t('Age Rating Of Game'); + t('Catalog Link'); + t('Platform'); + t('Platform other option'); + t('Please select one'); + t('Write Your Review'); + + return $field_instances; +} diff --git a/docroot/sites/all/modules/features/video_game_review_content_type/video_game_review_content_type.features.inc b/docroot/sites/all/modules/features/video_game_review_content_type/video_game_review_content_type.features.inc new file mode 100644 index 00000000..b2f04d95 --- /dev/null +++ b/docroot/sites/all/modules/features/video_game_review_content_type/video_game_review_content_type.features.inc @@ -0,0 +1,32 @@ + "1"); + } +} + +/** + * Implements hook_node_info(). + */ +function video_game_review_content_type_node_info() { + $items = array( + 'video_game_review' => array( + 'name' => t('Video Game Review'), + 'base' => 'node_content', + 'description' => t('This content type is used for Video Game Review.'), + 'has_title' => '1', + 'title_label' => t('Title'), + 'help' => '', + ), + ); + drupal_alter('node_info', $items); + return $items; +} diff --git a/docroot/sites/all/modules/features/video_game_review_content_type/video_game_review_content_type.info b/docroot/sites/all/modules/features/video_game_review_content_type/video_game_review_content_type.info new file mode 100644 index 00000000..1128af2f --- /dev/null +++ b/docroot/sites/all/modules/features/video_game_review_content_type/video_game_review_content_type.info @@ -0,0 +1,35 @@ +name = Video Game Review content type +description = Feature for video game review content type +core = 7.x +package = Features +version = 7.x-1.0 +dependencies[] = ctools +dependencies[] = features +dependencies[] = link +dependencies[] = list +dependencies[] = node +dependencies[] = options +dependencies[] = program_and_activities_pages +dependencies[] = strongarm +dependencies[] = text +features[ctools][] = strongarm:strongarm:1 +features[features_api][] = api:2 +features[field_base][] = field_age_rating_of_game +features[field_base][] = field_catalog_link_video_game +features[field_base][] = field_platform +features[field_base][] = field_platform_other_option +features[field_base][] = field_please_select_videogame +features[field_instance][] = node-video_game_review-body +features[field_instance][] = node-video_game_review-field_age_rating_of_game +features[field_instance][] = node-video_game_review-field_catalog_link_video_game +features[field_instance][] = node-video_game_review-field_platform +features[field_instance][] = node-video_game_review-field_platform_other_option +features[field_instance][] = node-video_game_review-field_please_select_videogame +features[node][] = video_game_review +features[variable][] = field_bundle_settings_node__video_game_review +features[variable][] = menu_options_video_game_review +features[variable][] = menu_parent_video_game_review +features[variable][] = node_options_video_game_review +features[variable][] = node_preview_video_game_review +features[variable][] = node_submitted_video_game_review +project path = sites/all/modules/features diff --git a/docroot/sites/all/modules/features/video_game_review_content_type/video_game_review_content_type.module b/docroot/sites/all/modules/features/video_game_review_content_type/video_game_review_content_type.module new file mode 100644 index 00000000..846251cb --- /dev/null +++ b/docroot/sites/all/modules/features/video_game_review_content_type/video_game_review_content_type.module @@ -0,0 +1,7 @@ +disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */ + $strongarm->api_version = 1; + $strongarm->name = 'field_bundle_settings_node__video_game_review'; + $strongarm->value = array( + 'view_modes' => array(), + 'extra_fields' => array( + 'form' => array( + 'title' => array( + 'weight' => '0', + ), + 'path' => array( + 'weight' => '1', + ), + ), + 'display' => array(), + ), + ); + $export['field_bundle_settings_node__video_game_review'] = $strongarm; + + $strongarm = new stdClass(); + $strongarm->disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */ + $strongarm->api_version = 1; + $strongarm->name = 'menu_options_video_game_review'; + $strongarm->value = array( + 0 => 'main-menu', + ); + $export['menu_options_video_game_review'] = $strongarm; + + $strongarm = new stdClass(); + $strongarm->disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */ + $strongarm->api_version = 1; + $strongarm->name = 'menu_parent_video_game_review'; + $strongarm->value = 'main-menu:0'; + $export['menu_parent_video_game_review'] = $strongarm; + + $strongarm = new stdClass(); + $strongarm->disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */ + $strongarm->api_version = 1; + $strongarm->name = 'node_options_video_game_review'; + $strongarm->value = array(); + $export['node_options_video_game_review'] = $strongarm; + + $strongarm = new stdClass(); + $strongarm->disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */ + $strongarm->api_version = 1; + $strongarm->name = 'node_preview_video_game_review'; + $strongarm->value = '1'; + $export['node_preview_video_game_review'] = $strongarm; + + $strongarm = new stdClass(); + $strongarm->disabled = FALSE; /* Edit this to true to make a default strongarm disabled initially */ + $strongarm->api_version = 1; + $strongarm->name = 'node_submitted_video_game_review'; + $strongarm->value = 1; + $export['node_submitted_video_game_review'] = $strongarm; + + return $export; +} diff --git a/docroot/sites/all/modules/features/video_game_review_view_listing/video_game_review_view_listing.features.inc b/docroot/sites/all/modules/features/video_game_review_view_listing/video_game_review_view_listing.features.inc new file mode 100755 index 00000000..7f67e3da --- /dev/null +++ b/docroot/sites/all/modules/features/video_game_review_view_listing/video_game_review_view_listing.features.inc @@ -0,0 +1,12 @@ + "3.0"); +} diff --git a/docroot/sites/all/modules/features/video_game_review_view_listing/video_game_review_view_listing.info b/docroot/sites/all/modules/features/video_game_review_view_listing/video_game_review_view_listing.info new file mode 100755 index 00000000..b9b6da84 --- /dev/null +++ b/docroot/sites/all/modules/features/video_game_review_view_listing/video_game_review_view_listing.info @@ -0,0 +1,11 @@ +name = Video Game Review View Listing +description = Video Game Review View Listing page +core = 7.x +package = Features +version = 7.x-1.1 +dependencies[] = ctools +dependencies[] = views +features[ctools][] = views:views_default:3.0 +features[features_api][] = api:2 +features[views_view][] = video_game_review +project path = sites/all/modules/features diff --git a/docroot/sites/all/modules/features/video_game_review_view_listing/video_game_review_view_listing.module b/docroot/sites/all/modules/features/video_game_review_view_listing/video_game_review_view_listing.module new file mode 100755 index 00000000..e6bbd050 --- /dev/null +++ b/docroot/sites/all/modules/features/video_game_review_view_listing/video_game_review_view_listing.module @@ -0,0 +1,7 @@ +name = 'video_game_review'; + $view->description = ''; + $view->tag = 'default'; + $view->base_table = 'node'; + $view->human_name = 'Video Game Review'; + $view->core = 7; + $view->api_version = '3.0'; + $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */ + + /* Display: Master */ + $handler = $view->new_display('default', 'Master', 'default'); + $handler->display->display_options['title'] = 'Video Game Review'; + $handler->display->display_options['use_more_always'] = FALSE; + $handler->display->display_options['access']['type'] = 'perm'; + $handler->display->display_options['cache']['type'] = 'none'; + $handler->display->display_options['query']['type'] = 'views_query'; + $handler->display->display_options['exposed_form']['type'] = 'basic'; + $handler->display->display_options['exposed_form']['options']['submit_button'] = 'Search'; + $handler->display->display_options['exposed_form']['options']['sort_asc_label'] = 'Ascending'; + $handler->display->display_options['exposed_form']['options']['sort_desc_label'] = 'Descending'; + $handler->display->display_options['pager']['type'] = 'full'; + $handler->display->display_options['pager']['options']['items_per_page'] = '10'; + $handler->display->display_options['pager']['options']['offset'] = '0'; + $handler->display->display_options['pager']['options']['id'] = '0'; + $handler->display->display_options['pager']['options']['quantity'] = '9'; + $handler->display->display_options['pager']['options']['expose']['items_per_page'] = TRUE; + $handler->display->display_options['pager']['options']['expose']['items_per_page_options'] = '10, 20, 30'; + $handler->display->display_options['style_plugin'] = 'default'; + $handler->display->display_options['row_plugin'] = 'fields'; + $handler->display->display_options['row_options']['inline'] = array( + 'title' => 'title', + 'counter' => 'counter', + ); + /* Header: Global: Text area */ + $handler->display->display_options['header']['area']['id'] = 'area'; + $handler->display->display_options['header']['area']['table'] = 'views'; + $handler->display->display_options['header']['area']['field'] = 'area'; + $handler->display->display_options['header']['area']['content'] = '

        Reviews & Booklists

        + +

        VIDEO GAME REVIEWS

        '; + $handler->display->display_options['header']['area']['format'] = 'simple_html'; + /* Relationship: Content: Author */ + $handler->display->display_options['relationships']['uid']['id'] = 'uid'; + $handler->display->display_options['relationships']['uid']['table'] = 'node'; + $handler->display->display_options['relationships']['uid']['field'] = 'uid'; + /* Relationship: Flags: like counter */ + $handler->display->display_options['relationships']['flag_count_rel']['id'] = 'flag_count_rel'; + $handler->display->display_options['relationships']['flag_count_rel']['table'] = 'node'; + $handler->display->display_options['relationships']['flag_count_rel']['field'] = 'flag_count_rel'; + $handler->display->display_options['relationships']['flag_count_rel']['required'] = 0; + $handler->display->display_options['relationships']['flag_count_rel']['flag'] = 'like'; + /* Relationship: Flags: like */ + $handler->display->display_options['relationships']['flag_content_rel']['id'] = 'flag_content_rel'; + $handler->display->display_options['relationships']['flag_content_rel']['table'] = 'node'; + $handler->display->display_options['relationships']['flag_content_rel']['field'] = 'flag_content_rel'; + $handler->display->display_options['relationships']['flag_content_rel']['required'] = 0; + $handler->display->display_options['relationships']['flag_content_rel']['flag'] = 'like'; + $handler->display->display_options['relationships']['flag_content_rel']['user_scope'] = 'any'; + /* Relationship: User: Profile */ + $handler->display->display_options['relationships']['profile']['id'] = 'profile'; + $handler->display->display_options['relationships']['profile']['table'] = 'users'; + $handler->display->display_options['relationships']['profile']['field'] = 'profile'; + $handler->display->display_options['relationships']['profile']['relationship'] = 'uid'; + $handler->display->display_options['relationships']['profile']['bundle_types'] = array( + 'main' => 'main', + ); + /* Field: Global: View result counter */ + $handler->display->display_options['fields']['counter']['id'] = 'counter'; + $handler->display->display_options['fields']['counter']['table'] = 'views'; + $handler->display->display_options['fields']['counter']['field'] = 'counter'; + $handler->display->display_options['fields']['counter']['label'] = ''; + $handler->display->display_options['fields']['counter']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['counter']['counter_start'] = '1'; + $handler->display->display_options['fields']['counter']['reverse'] = 0; + /* Field: Content: Catalog Link */ + $handler->display->display_options['fields']['field_catalog_link_video_game_1']['id'] = 'field_catalog_link_video_game_1'; + $handler->display->display_options['fields']['field_catalog_link_video_game_1']['table'] = 'field_data_field_catalog_link_video_game'; + $handler->display->display_options['fields']['field_catalog_link_video_game_1']['field'] = 'field_catalog_link_video_game'; + $handler->display->display_options['fields']['field_catalog_link_video_game_1']['exclude'] = TRUE; + $handler->display->display_options['fields']['field_catalog_link_video_game_1']['click_sort_column'] = 'url'; + /* Field: Content: Title */ + $handler->display->display_options['fields']['title']['id'] = 'title'; + $handler->display->display_options['fields']['title']['table'] = 'node'; + $handler->display->display_options['fields']['title']['field'] = 'title'; + $handler->display->display_options['fields']['title']['label'] = ''; + $handler->display->display_options['fields']['title']['alter']['path'] = '[field_catalog_link_video_game_1]'; + $handler->display->display_options['fields']['title']['alter']['target'] = '_blank'; + $handler->display->display_options['fields']['title']['alter']['word_boundary'] = FALSE; + $handler->display->display_options['fields']['title']['alter']['ellipsis'] = FALSE; + $handler->display->display_options['fields']['title']['element_label_colon'] = FALSE; + /* Field: Flags: Flag counter */ + $handler->display->display_options['fields']['count']['id'] = 'count'; + $handler->display->display_options['fields']['count']['table'] = 'flag_counts'; + $handler->display->display_options['fields']['count']['field'] = 'count'; + $handler->display->display_options['fields']['count']['relationship'] = 'flag_count_rel'; + $handler->display->display_options['fields']['count']['label'] = 'Likes'; + /* Field: Content: Platform */ + $handler->display->display_options['fields']['field_platform']['id'] = 'field_platform'; + $handler->display->display_options['fields']['field_platform']['table'] = 'field_data_field_platform'; + $handler->display->display_options['fields']['field_platform']['field'] = 'field_platform'; + $handler->display->display_options['fields']['field_platform']['exclude'] = TRUE; + /* Field: Content: Platform other option */ + $handler->display->display_options['fields']['field_platform_other_option']['id'] = 'field_platform_other_option'; + $handler->display->display_options['fields']['field_platform_other_option']['table'] = 'field_data_field_platform_other_option'; + $handler->display->display_options['fields']['field_platform_other_option']['field'] = 'field_platform_other_option'; + $handler->display->display_options['fields']['field_platform_other_option']['exclude'] = TRUE; + /* Field: Global: PHP */ + $handler->display->display_options['fields']['php']['id'] = 'php'; + $handler->display->display_options['fields']['php']['table'] = 'views'; + $handler->display->display_options['fields']['php']['field'] = 'php'; + $handler->display->display_options['fields']['php']['label'] = ''; + $handler->display->display_options['fields']['php']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['php']['use_php_setup'] = 0; + $handler->display->display_options['fields']['php']['php_output'] = 'field_field_platform[0][\'rendered\'][\'#markup\']; +$other_option_val = $data->field_field_platform[0][\'rendered\'][\'#markup\']; +$other_option_value = $data->field_field_platform_other_option[0][\'rendered\'][\'#markup\']; + +if(isset($other_option_val)){ +if($other_option_val == \'Other\'){ +echo \'Platform: \'.$other_option_value; +}else{ +echo \'Platform: \'.$value; +} +} + +?>'; + $handler->display->display_options['fields']['php']['use_php_click_sortable'] = '0'; + $handler->display->display_options['fields']['php']['php_click_sortable'] = ''; + /* Field: Content: Catalog Link */ + $handler->display->display_options['fields']['field_catalog_link_video_game']['id'] = 'field_catalog_link_video_game'; + $handler->display->display_options['fields']['field_catalog_link_video_game']['table'] = 'field_data_field_catalog_link_video_game'; + $handler->display->display_options['fields']['field_catalog_link_video_game']['field'] = 'field_catalog_link_video_game'; + $handler->display->display_options['fields']['field_catalog_link_video_game']['label'] = ''; + $handler->display->display_options['fields']['field_catalog_link_video_game']['alter']['alter_text'] = TRUE; + $handler->display->display_options['fields']['field_catalog_link_video_game']['alter']['text'] = 'Catalog Link: [field_catalog_link_video_game]'; + $handler->display->display_options['fields']['field_catalog_link_video_game']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['field_catalog_link_video_game']['click_sort_column'] = 'url'; + $handler->display->display_options['fields']['field_catalog_link_video_game']['type'] = 'link_url'; + /* Field: Content: Age Rating Of Game */ + $handler->display->display_options['fields']['field_age_rating_of_game']['id'] = 'field_age_rating_of_game'; + $handler->display->display_options['fields']['field_age_rating_of_game']['table'] = 'field_data_field_age_rating_of_game'; + $handler->display->display_options['fields']['field_age_rating_of_game']['field'] = 'field_age_rating_of_game'; + $handler->display->display_options['fields']['field_age_rating_of_game']['label'] = ''; + $handler->display->display_options['fields']['field_age_rating_of_game']['alter']['alter_text'] = TRUE; + $handler->display->display_options['fields']['field_age_rating_of_game']['alter']['text'] = 'Age Rating Of Game: [field_age_rating_of_game]'; + $handler->display->display_options['fields']['field_age_rating_of_game']['element_label_colon'] = FALSE; + /* Field: Content: Please select one */ + $handler->display->display_options['fields']['field_please_select_videogame']['id'] = 'field_please_select_videogame'; + $handler->display->display_options['fields']['field_please_select_videogame']['table'] = 'field_data_field_please_select_videogame'; + $handler->display->display_options['fields']['field_please_select_videogame']['field'] = 'field_please_select_videogame'; + $handler->display->display_options['fields']['field_please_select_videogame']['label'] = ''; + $handler->display->display_options['fields']['field_please_select_videogame']['exclude'] = TRUE; + $handler->display->display_options['fields']['field_please_select_videogame']['element_label_colon'] = FALSE; + /* Field: Global: PHP */ + $handler->display->display_options['fields']['php_1']['id'] = 'php_1'; + $handler->display->display_options['fields']['php_1']['table'] = 'views'; + $handler->display->display_options['fields']['php_1']['field'] = 'php'; + $handler->display->display_options['fields']['php_1']['label'] = ''; + $handler->display->display_options['fields']['php_1']['exclude'] = TRUE; + $handler->display->display_options['fields']['php_1']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['php_1']['use_php_setup'] = 0; + $handler->display->display_options['fields']['php_1']['php_output'] = '_field_data[\'nid\'][\'entity\']; +$privacy_key = $privacy->field_please_select_videogame[LANGUAGE_NONE][0][\'value\']; +if($privacy_key == \'public\'){ +print \'Reviewed by \'; +} + +?>'; + $handler->display->display_options['fields']['php_1']['use_php_click_sortable'] = '0'; + $handler->display->display_options['fields']['php_1']['php_click_sortable'] = ''; + /* Field: Profile: Avatar image */ + $handler->display->display_options['fields']['field_user_avatar']['id'] = 'field_user_avatar'; + $handler->display->display_options['fields']['field_user_avatar']['table'] = 'field_data_field_user_avatar'; + $handler->display->display_options['fields']['field_user_avatar']['field'] = 'field_user_avatar'; + $handler->display->display_options['fields']['field_user_avatar']['relationship'] = 'profile'; + $handler->display->display_options['fields']['field_user_avatar']['label'] = ''; + $handler->display->display_options['fields']['field_user_avatar']['exclude'] = TRUE; + $handler->display->display_options['fields']['field_user_avatar']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['field_user_avatar']['type'] = 'entityreference_entity_view'; + $handler->display->display_options['fields']['field_user_avatar']['settings'] = array( + 'view_mode' => 'default', + 'links' => 1, + ); + /* Field: Global: PHP */ + $handler->display->display_options['fields']['php_2']['id'] = 'php_2'; + $handler->display->display_options['fields']['php_2']['table'] = 'views'; + $handler->display->display_options['fields']['php_2']['field'] = 'php'; + $handler->display->display_options['fields']['php_2']['label'] = ''; + $handler->display->display_options['fields']['php_2']['exclude'] = TRUE; + $handler->display->display_options['fields']['php_2']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['php_2']['use_php_setup'] = 0; + $handler->display->display_options['fields']['php_2']['php_output'] = 'field_user_avatar; + +$query = db_select(\'field_data_field_user_avatar\',\'avatar\') +->fields(\'avatar\',array(\'field_user_avatar_target_id\')) +->condition(\'entity_id\',$img_id) +->execute() +->fetchAssoc(); + +$image_id = $query[\'field_user_avatar_target_id\']; + +$query = db_select(\'field_data_field_avatar_image\', \'t\'); +$query->join(\'file_managed\', \'n\', \'n.fid = t.field_avatar_image_fid\'); +$result = $query + ->fields(\'n\', array(\'uri\')) + ->condition(\'t.entity_id\', $image_id) + ->execute(); + +$img_uri = $result->fetchObject(); +$img_uri = $img_uri->uri; +$style = \'avatar_style\'; +$img_path = image_style_url($style, $img_uri); + +$img = ""; + +$privacy = $data->_field_data[\'nid\'][\'entity\']; +$privacy_key = $privacy->field_please_select_videogame[LANGUAGE_NONE][0][\'value\']; + +if(isset($img_uri)){ + if($privacy_key == \'public\'){ + print $img; + } +} +?>'; + $handler->display->display_options['fields']['php_2']['use_php_click_sortable'] = '0'; + $handler->display->display_options['fields']['php_2']['php_click_sortable'] = ''; + /* Field: User: Name */ + $handler->display->display_options['fields']['name']['id'] = 'name'; + $handler->display->display_options['fields']['name']['table'] = 'users'; + $handler->display->display_options['fields']['name']['field'] = 'name'; + $handler->display->display_options['fields']['name']['relationship'] = 'uid'; + $handler->display->display_options['fields']['name']['exclude'] = TRUE; + /* Field: User: Uid */ + $handler->display->display_options['fields']['uid']['id'] = 'uid'; + $handler->display->display_options['fields']['uid']['table'] = 'users'; + $handler->display->display_options['fields']['uid']['field'] = 'uid'; + $handler->display->display_options['fields']['uid']['relationship'] = 'uid'; + $handler->display->display_options['fields']['uid']['exclude'] = TRUE; + /* Field: Global: PHP */ + $handler->display->display_options['fields']['php_3']['id'] = 'php_3'; + $handler->display->display_options['fields']['php_3']['table'] = 'views'; + $handler->display->display_options['fields']['php_3']['field'] = 'php'; + $handler->display->display_options['fields']['php_3']['label'] = ''; + $handler->display->display_options['fields']['php_3']['exclude'] = TRUE; + $handler->display->display_options['fields']['php_3']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['php_3']['use_php_setup'] = 0; + $handler->display->display_options['fields']['php_3']['php_output'] = '_field_data[\'nid\'][\'entity\']; +$privacy_key = $privacy->field_please_select_videogame[LANGUAGE_NONE][0][\'value\']; +if($privacy_key == \'public\'){ +echo "uid>".$row->name.""; +} + +?>'; + $handler->display->display_options['fields']['php_3']['use_php_click_sortable'] = '0'; + $handler->display->display_options['fields']['php_3']['php_click_sortable'] = ''; + /* Field: Global: Custom text */ + $handler->display->display_options['fields']['nothing']['id'] = 'nothing'; + $handler->display->display_options['fields']['nothing']['table'] = 'views'; + $handler->display->display_options['fields']['nothing']['field'] = 'nothing'; + $handler->display->display_options['fields']['nothing']['label'] = ''; + $handler->display->display_options['fields']['nothing']['alter']['text'] = '
        [php_1]
        [php_2]
        [php_3]
        '; + $handler->display->display_options['fields']['nothing']['element_label_colon'] = FALSE; + /* Field: Content: Post date */ + $handler->display->display_options['fields']['created']['id'] = 'created'; + $handler->display->display_options['fields']['created']['table'] = 'node'; + $handler->display->display_options['fields']['created']['field'] = 'created'; + $handler->display->display_options['fields']['created']['label'] = ''; + $handler->display->display_options['fields']['created']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['created']['date_format'] = 'custom'; + $handler->display->display_options['fields']['created']['custom_date_format'] = 'M d, Y'; + $handler->display->display_options['fields']['created']['second_date_format'] = 'privatemsg_current_day'; + /* Field: Content: Body */ + $handler->display->display_options['fields']['body']['id'] = 'body'; + $handler->display->display_options['fields']['body']['table'] = 'field_data_body'; + $handler->display->display_options['fields']['body']['field'] = 'body'; + $handler->display->display_options['fields']['body']['label'] = ''; + $handler->display->display_options['fields']['body']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['body']['type'] = 'text_trimmed'; + $handler->display->display_options['fields']['body']['settings'] = array( + 'trim_length' => '200', + ); + /* Field: Content: Link */ + $handler->display->display_options['fields']['view_node']['id'] = 'view_node'; + $handler->display->display_options['fields']['view_node']['table'] = 'views_entity_node'; + $handler->display->display_options['fields']['view_node']['field'] = 'view_node'; + $handler->display->display_options['fields']['view_node']['label'] = ''; + $handler->display->display_options['fields']['view_node']['element_label_colon'] = FALSE; + $handler->display->display_options['fields']['view_node']['text'] = 'View full review'; + /* Sort criterion: Content: Post date */ + $handler->display->display_options['sorts']['created']['id'] = 'created'; + $handler->display->display_options['sorts']['created']['table'] = 'node'; + $handler->display->display_options['sorts']['created']['field'] = 'created'; + $handler->display->display_options['sorts']['created']['order'] = 'DESC'; + $handler->display->display_options['sorts']['created']['exposed'] = TRUE; + $handler->display->display_options['sorts']['created']['expose']['label'] = 'Post date'; + /* Filter criterion: Content: Published */ + $handler->display->display_options['filters']['status']['id'] = 'status'; + $handler->display->display_options['filters']['status']['table'] = 'node'; + $handler->display->display_options['filters']['status']['field'] = 'status'; + $handler->display->display_options['filters']['status']['value'] = 1; + $handler->display->display_options['filters']['status']['group'] = 1; + $handler->display->display_options['filters']['status']['expose']['operator'] = FALSE; + /* Filter criterion: Content: Type */ + $handler->display->display_options['filters']['type']['id'] = 'type'; + $handler->display->display_options['filters']['type']['table'] = 'node'; + $handler->display->display_options['filters']['type']['field'] = 'type'; + $handler->display->display_options['filters']['type']['value'] = array( + 'video_game_review' => 'video_game_review', + ); + /* Filter criterion: Search: Search Terms */ + $handler->display->display_options['filters']['keys']['id'] = 'keys'; + $handler->display->display_options['filters']['keys']['table'] = 'search_index'; + $handler->display->display_options['filters']['keys']['field'] = 'keys'; + $handler->display->display_options['filters']['keys']['exposed'] = TRUE; + $handler->display->display_options['filters']['keys']['expose']['operator_id'] = 'keys_op'; + $handler->display->display_options['filters']['keys']['expose']['label'] = 'Search'; + $handler->display->display_options['filters']['keys']['expose']['operator'] = 'keys_op'; + $handler->display->display_options['filters']['keys']['expose']['identifier'] = 'keys'; + $handler->display->display_options['filters']['keys']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + /* Filter criterion: User: Name (raw) */ + $handler->display->display_options['filters']['name']['id'] = 'name'; + $handler->display->display_options['filters']['name']['table'] = 'users'; + $handler->display->display_options['filters']['name']['field'] = 'name'; + $handler->display->display_options['filters']['name']['relationship'] = 'uid'; + $handler->display->display_options['filters']['name']['operator'] = 'contains'; + $handler->display->display_options['filters']['name']['exposed'] = TRUE; + $handler->display->display_options['filters']['name']['expose']['operator_id'] = 'name_op'; + $handler->display->display_options['filters']['name']['expose']['label'] = 'Reviewer'; + $handler->display->display_options['filters']['name']['expose']['operator'] = 'name_op'; + $handler->display->display_options['filters']['name']['expose']['identifier'] = 'name'; + $handler->display->display_options['filters']['name']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + /* Filter criterion: Content: Title */ + $handler->display->display_options['filters']['title']['id'] = 'title'; + $handler->display->display_options['filters']['title']['table'] = 'node'; + $handler->display->display_options['filters']['title']['field'] = 'title'; + $handler->display->display_options['filters']['title']['operator'] = 'contains'; + $handler->display->display_options['filters']['title']['exposed'] = TRUE; + $handler->display->display_options['filters']['title']['expose']['operator_id'] = 'title_op'; + $handler->display->display_options['filters']['title']['expose']['label'] = 'by Title'; + $handler->display->display_options['filters']['title']['expose']['operator'] = 'title_op'; + $handler->display->display_options['filters']['title']['expose']['identifier'] = 'title'; + $handler->display->display_options['filters']['title']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + /* Filter criterion: Content: Please select one (field_please_select_videogame) */ + $handler->display->display_options['filters']['field_please_select_videogame_value']['id'] = 'field_please_select_videogame_value'; + $handler->display->display_options['filters']['field_please_select_videogame_value']['table'] = 'field_data_field_please_select_videogame'; + $handler->display->display_options['filters']['field_please_select_videogame_value']['field'] = 'field_please_select_videogame_value'; + $handler->display->display_options['filters']['field_please_select_videogame_value']['value'] = array( + 'public' => 'public', + 'publicnoname' => 'publicnoname', + ); + /* Filter criterion: Content: Platform (field_platform) */ + $handler->display->display_options['filters']['field_platform_value']['id'] = 'field_platform_value'; + $handler->display->display_options['filters']['field_platform_value']['table'] = 'field_data_field_platform'; + $handler->display->display_options['filters']['field_platform_value']['field'] = 'field_platform_value'; + $handler->display->display_options['filters']['field_platform_value']['exposed'] = TRUE; + $handler->display->display_options['filters']['field_platform_value']['expose']['operator_id'] = 'field_platform_value_op'; + $handler->display->display_options['filters']['field_platform_value']['expose']['label'] = 'By Platform'; + $handler->display->display_options['filters']['field_platform_value']['expose']['operator'] = 'field_platform_value_op'; + $handler->display->display_options['filters']['field_platform_value']['expose']['identifier'] = 'field_platform_value'; + $handler->display->display_options['filters']['field_platform_value']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + + /* Display: Page */ + $handler = $view->new_display('page', 'Page', 'page'); + $handler->display->display_options['defaults']['header'] = FALSE; + /* Header: Global: Text area */ + $handler->display->display_options['header']['area']['id'] = 'area'; + $handler->display->display_options['header']['area']['table'] = 'views'; + $handler->display->display_options['header']['area']['field'] = 'area'; + $handler->display->display_options['header']['area']['content'] = '

        Reviews & Booklists

        + +

        Video Game Reviews

        '; + $handler->display->display_options['header']['area']['format'] = 'full_html'; + $handler->display->display_options['path'] = 'video-game-review'; + + /* Display: Staff */ + $handler = $view->new_display('page', 'Staff', 'page_1'); + $handler->display->display_options['defaults']['header'] = FALSE; + /* Header: Global: Text area */ + $handler->display->display_options['header']['area']['id'] = 'area'; + $handler->display->display_options['header']['area']['table'] = 'views'; + $handler->display->display_options['header']['area']['field'] = 'area'; + $handler->display->display_options['header']['area']['content'] = '

        Reviews & Booklists

        + +

        VIDEO GAME REVIEWS

        '; + $handler->display->display_options['header']['area']['format'] = 'simple_html'; + $handler->display->display_options['defaults']['filter_groups'] = FALSE; + $handler->display->display_options['defaults']['filters'] = FALSE; + /* Filter criterion: Content: Published */ + $handler->display->display_options['filters']['status']['id'] = 'status'; + $handler->display->display_options['filters']['status']['table'] = 'node'; + $handler->display->display_options['filters']['status']['field'] = 'status'; + $handler->display->display_options['filters']['status']['value'] = 1; + $handler->display->display_options['filters']['status']['group'] = 1; + $handler->display->display_options['filters']['status']['expose']['operator'] = FALSE; + /* Filter criterion: Content: Type */ + $handler->display->display_options['filters']['type']['id'] = 'type'; + $handler->display->display_options['filters']['type']['table'] = 'node'; + $handler->display->display_options['filters']['type']['field'] = 'type'; + $handler->display->display_options['filters']['type']['value'] = array( + 'video_game_review' => 'video_game_review', + ); + /* Filter criterion: Search: Search Terms */ + $handler->display->display_options['filters']['keys']['id'] = 'keys'; + $handler->display->display_options['filters']['keys']['table'] = 'search_index'; + $handler->display->display_options['filters']['keys']['field'] = 'keys'; + $handler->display->display_options['filters']['keys']['exposed'] = TRUE; + $handler->display->display_options['filters']['keys']['expose']['operator_id'] = 'keys_op'; + $handler->display->display_options['filters']['keys']['expose']['label'] = 'Search'; + $handler->display->display_options['filters']['keys']['expose']['operator'] = 'keys_op'; + $handler->display->display_options['filters']['keys']['expose']['identifier'] = 'keys'; + $handler->display->display_options['filters']['keys']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + /* Filter criterion: User: Name (raw) */ + $handler->display->display_options['filters']['name']['id'] = 'name'; + $handler->display->display_options['filters']['name']['table'] = 'users'; + $handler->display->display_options['filters']['name']['field'] = 'name'; + $handler->display->display_options['filters']['name']['relationship'] = 'uid'; + $handler->display->display_options['filters']['name']['operator'] = 'contains'; + $handler->display->display_options['filters']['name']['exposed'] = TRUE; + $handler->display->display_options['filters']['name']['expose']['operator_id'] = 'name_op'; + $handler->display->display_options['filters']['name']['expose']['label'] = 'Reviewer'; + $handler->display->display_options['filters']['name']['expose']['operator'] = 'name_op'; + $handler->display->display_options['filters']['name']['expose']['identifier'] = 'name'; + $handler->display->display_options['filters']['name']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + /* Filter criterion: Content: Title */ + $handler->display->display_options['filters']['title']['id'] = 'title'; + $handler->display->display_options['filters']['title']['table'] = 'node'; + $handler->display->display_options['filters']['title']['field'] = 'title'; + $handler->display->display_options['filters']['title']['operator'] = 'contains'; + $handler->display->display_options['filters']['title']['exposed'] = TRUE; + $handler->display->display_options['filters']['title']['expose']['operator_id'] = 'title_op'; + $handler->display->display_options['filters']['title']['expose']['label'] = 'by Title'; + $handler->display->display_options['filters']['title']['expose']['operator'] = 'title_op'; + $handler->display->display_options['filters']['title']['expose']['identifier'] = 'title'; + $handler->display->display_options['filters']['title']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + /* Filter criterion: Content: Please select one (field_please_select_videogame) */ + $handler->display->display_options['filters']['field_please_select_videogame_value']['id'] = 'field_please_select_videogame_value'; + $handler->display->display_options['filters']['field_please_select_videogame_value']['table'] = 'field_data_field_please_select_videogame'; + $handler->display->display_options['filters']['field_please_select_videogame_value']['field'] = 'field_please_select_videogame_value'; + $handler->display->display_options['filters']['field_please_select_videogame_value']['value'] = array( + 'public' => 'public', + 'publicnoname' => 'publicnoname', + ); + /* Filter criterion: Profile: First name (field_user_first_name) */ + $handler->display->display_options['filters']['field_user_first_name_value']['id'] = 'field_user_first_name_value'; + $handler->display->display_options['filters']['field_user_first_name_value']['table'] = 'field_data_field_user_first_name'; + $handler->display->display_options['filters']['field_user_first_name_value']['field'] = 'field_user_first_name_value'; + $handler->display->display_options['filters']['field_user_first_name_value']['relationship'] = 'profile'; + $handler->display->display_options['filters']['field_user_first_name_value']['operator'] = 'contains'; + $handler->display->display_options['filters']['field_user_first_name_value']['exposed'] = TRUE; + $handler->display->display_options['filters']['field_user_first_name_value']['expose']['operator_id'] = 'field_user_first_name_value_op'; + $handler->display->display_options['filters']['field_user_first_name_value']['expose']['label'] = 'Author first name'; + $handler->display->display_options['filters']['field_user_first_name_value']['expose']['operator'] = 'field_user_first_name_value_op'; + $handler->display->display_options['filters']['field_user_first_name_value']['expose']['identifier'] = 'field_user_first_name_value'; + $handler->display->display_options['filters']['field_user_first_name_value']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + /* Filter criterion: Profile: Last name (field_user_last_name) */ + $handler->display->display_options['filters']['field_user_last_name_value']['id'] = 'field_user_last_name_value'; + $handler->display->display_options['filters']['field_user_last_name_value']['table'] = 'field_data_field_user_last_name'; + $handler->display->display_options['filters']['field_user_last_name_value']['field'] = 'field_user_last_name_value'; + $handler->display->display_options['filters']['field_user_last_name_value']['relationship'] = 'profile'; + $handler->display->display_options['filters']['field_user_last_name_value']['operator'] = 'contains'; + $handler->display->display_options['filters']['field_user_last_name_value']['exposed'] = TRUE; + $handler->display->display_options['filters']['field_user_last_name_value']['expose']['operator_id'] = 'field_user_last_name_value_op'; + $handler->display->display_options['filters']['field_user_last_name_value']['expose']['label'] = 'Author last name'; + $handler->display->display_options['filters']['field_user_last_name_value']['expose']['operator'] = 'field_user_last_name_value_op'; + $handler->display->display_options['filters']['field_user_last_name_value']['expose']['identifier'] = 'field_user_last_name_value'; + $handler->display->display_options['filters']['field_user_last_name_value']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + /* Filter criterion: User: Roles */ + $handler->display->display_options['filters']['rid']['id'] = 'rid'; + $handler->display->display_options['filters']['rid']['table'] = 'users_roles'; + $handler->display->display_options['filters']['rid']['field'] = 'rid'; + $handler->display->display_options['filters']['rid']['relationship'] = 'uid'; + $handler->display->display_options['filters']['rid']['value'] = array( + 10 => '10', + ); + $handler->display->display_options['path'] = 'video-game-review/staff'; + + /* Display: Players */ + $handler = $view->new_display('page', 'Players', 'page_2'); + $handler->display->display_options['defaults']['header'] = FALSE; + /* Header: Global: Text area */ + $handler->display->display_options['header']['area']['id'] = 'area'; + $handler->display->display_options['header']['area']['table'] = 'views'; + $handler->display->display_options['header']['area']['field'] = 'area'; + $handler->display->display_options['header']['area']['content'] = '

        Reviews & Booklists

        + +

        VIDEO GAME REVIEWS

        '; + $handler->display->display_options['header']['area']['format'] = 'simple_html'; + $handler->display->display_options['defaults']['filter_groups'] = FALSE; + $handler->display->display_options['defaults']['filters'] = FALSE; + /* Filter criterion: Content: Published */ + $handler->display->display_options['filters']['status']['id'] = 'status'; + $handler->display->display_options['filters']['status']['table'] = 'node'; + $handler->display->display_options['filters']['status']['field'] = 'status'; + $handler->display->display_options['filters']['status']['value'] = 1; + $handler->display->display_options['filters']['status']['group'] = 1; + $handler->display->display_options['filters']['status']['expose']['operator'] = FALSE; + /* Filter criterion: Content: Type */ + $handler->display->display_options['filters']['type']['id'] = 'type'; + $handler->display->display_options['filters']['type']['table'] = 'node'; + $handler->display->display_options['filters']['type']['field'] = 'type'; + $handler->display->display_options['filters']['type']['value'] = array( + 'video_game_review' => 'video_game_review', + ); + /* Filter criterion: Search: Search Terms */ + $handler->display->display_options['filters']['keys']['id'] = 'keys'; + $handler->display->display_options['filters']['keys']['table'] = 'search_index'; + $handler->display->display_options['filters']['keys']['field'] = 'keys'; + $handler->display->display_options['filters']['keys']['exposed'] = TRUE; + $handler->display->display_options['filters']['keys']['expose']['operator_id'] = 'keys_op'; + $handler->display->display_options['filters']['keys']['expose']['label'] = 'Search'; + $handler->display->display_options['filters']['keys']['expose']['operator'] = 'keys_op'; + $handler->display->display_options['filters']['keys']['expose']['identifier'] = 'keys'; + $handler->display->display_options['filters']['keys']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + /* Filter criterion: User: Name (raw) */ + $handler->display->display_options['filters']['name']['id'] = 'name'; + $handler->display->display_options['filters']['name']['table'] = 'users'; + $handler->display->display_options['filters']['name']['field'] = 'name'; + $handler->display->display_options['filters']['name']['relationship'] = 'uid'; + $handler->display->display_options['filters']['name']['operator'] = 'contains'; + $handler->display->display_options['filters']['name']['exposed'] = TRUE; + $handler->display->display_options['filters']['name']['expose']['operator_id'] = 'name_op'; + $handler->display->display_options['filters']['name']['expose']['label'] = 'Reviewer'; + $handler->display->display_options['filters']['name']['expose']['operator'] = 'name_op'; + $handler->display->display_options['filters']['name']['expose']['identifier'] = 'name'; + $handler->display->display_options['filters']['name']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + /* Filter criterion: Content: Title */ + $handler->display->display_options['filters']['title']['id'] = 'title'; + $handler->display->display_options['filters']['title']['table'] = 'node'; + $handler->display->display_options['filters']['title']['field'] = 'title'; + $handler->display->display_options['filters']['title']['operator'] = 'contains'; + $handler->display->display_options['filters']['title']['exposed'] = TRUE; + $handler->display->display_options['filters']['title']['expose']['operator_id'] = 'title_op'; + $handler->display->display_options['filters']['title']['expose']['label'] = 'by Title'; + $handler->display->display_options['filters']['title']['expose']['operator'] = 'title_op'; + $handler->display->display_options['filters']['title']['expose']['identifier'] = 'title'; + $handler->display->display_options['filters']['title']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + /* Filter criterion: Content: Please select one (field_please_select_videogame) */ + $handler->display->display_options['filters']['field_please_select_videogame_value']['id'] = 'field_please_select_videogame_value'; + $handler->display->display_options['filters']['field_please_select_videogame_value']['table'] = 'field_data_field_please_select_videogame'; + $handler->display->display_options['filters']['field_please_select_videogame_value']['field'] = 'field_please_select_videogame_value'; + $handler->display->display_options['filters']['field_please_select_videogame_value']['value'] = array( + 'public' => 'public', + 'publicnoname' => 'publicnoname', + ); + /* Filter criterion: Profile: First name (field_user_first_name) */ + $handler->display->display_options['filters']['field_user_first_name_value']['id'] = 'field_user_first_name_value'; + $handler->display->display_options['filters']['field_user_first_name_value']['table'] = 'field_data_field_user_first_name'; + $handler->display->display_options['filters']['field_user_first_name_value']['field'] = 'field_user_first_name_value'; + $handler->display->display_options['filters']['field_user_first_name_value']['relationship'] = 'profile'; + $handler->display->display_options['filters']['field_user_first_name_value']['operator'] = 'contains'; + $handler->display->display_options['filters']['field_user_first_name_value']['exposed'] = TRUE; + $handler->display->display_options['filters']['field_user_first_name_value']['expose']['operator_id'] = 'field_user_first_name_value_op'; + $handler->display->display_options['filters']['field_user_first_name_value']['expose']['label'] = 'Author first name'; + $handler->display->display_options['filters']['field_user_first_name_value']['expose']['operator'] = 'field_user_first_name_value_op'; + $handler->display->display_options['filters']['field_user_first_name_value']['expose']['identifier'] = 'field_user_first_name_value'; + $handler->display->display_options['filters']['field_user_first_name_value']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + /* Filter criterion: Profile: Last name (field_user_last_name) */ + $handler->display->display_options['filters']['field_user_last_name_value']['id'] = 'field_user_last_name_value'; + $handler->display->display_options['filters']['field_user_last_name_value']['table'] = 'field_data_field_user_last_name'; + $handler->display->display_options['filters']['field_user_last_name_value']['field'] = 'field_user_last_name_value'; + $handler->display->display_options['filters']['field_user_last_name_value']['relationship'] = 'profile'; + $handler->display->display_options['filters']['field_user_last_name_value']['operator'] = 'contains'; + $handler->display->display_options['filters']['field_user_last_name_value']['exposed'] = TRUE; + $handler->display->display_options['filters']['field_user_last_name_value']['expose']['operator_id'] = 'field_user_last_name_value_op'; + $handler->display->display_options['filters']['field_user_last_name_value']['expose']['label'] = 'Author last name'; + $handler->display->display_options['filters']['field_user_last_name_value']['expose']['operator'] = 'field_user_last_name_value_op'; + $handler->display->display_options['filters']['field_user_last_name_value']['expose']['identifier'] = 'field_user_last_name_value'; + $handler->display->display_options['filters']['field_user_last_name_value']['expose']['remember_roles'] = array( + 2 => '2', + 1 => 0, + 6 => 0, + 10 => 0, + 11 => 0, + 4 => 0, + 3 => 0, + 12 => 0, + ); + /* Filter criterion: User: Roles */ + $handler->display->display_options['filters']['rid']['id'] = 'rid'; + $handler->display->display_options['filters']['rid']['table'] = 'users_roles'; + $handler->display->display_options['filters']['rid']['field'] = 'rid'; + $handler->display->display_options['filters']['rid']['relationship'] = 'uid'; + $handler->display->display_options['filters']['rid']['value'] = array( + 6 => '6', + ); + $handler->display->display_options['path'] = 'video-game-review/players'; + $export['video_game_review'] = $view; + + return $export; +} diff --git a/docroot/sites/all/themes/libraryzurb/js/scripts.js b/docroot/sites/all/themes/libraryzurb/js/scripts.js index b5faf349..3dd07e35 100644 --- a/docroot/sites/all/themes/libraryzurb/js/scripts.js +++ b/docroot/sites/all/themes/libraryzurb/js/scripts.js @@ -59,8 +59,8 @@ jQuery( document ).ready(function() { /* Jquery for script for raffle entry checkbox */ jQuery( ".active_raffle" ).click(function() { - var location = window.location; - var baseUrl1 = location.protocol + "//" + location.host + '/raffle_pro'; + //var location = window.location; + var baseUrl1 = Drupal.settings.basePath + 'raffle_pro'; jQuery.ajax({ @@ -209,9 +209,9 @@ if(!div2.is(':empty')){ jQuery(this).remove(); } - var loc = window.location; - var baseUrl = loc.protocol + "//" + loc.host + '/calendar'; - + //var loc = window.location; + //var baseUrl = loc.protocol + "//" + loc.host + 'calendar'; + var baseUrl = Drupal.settings.basePath + 'calendar'; var currentUser = Drupal.settings.auto_role_allocation.currentUser; if(time_string > event_date) { jQuery.ajax({ @@ -289,8 +289,9 @@ if(!div2.is(':empty')){ var event_tit5 = event_tit4[1].split('/'); var image_path = event_tit5[6]; - var loc = window.location; - var baseUrl = loc.protocol + "//" + loc.host + '/calendar'; + //var loc = window.location; + //var baseUrl = loc.protocol + "//" + loc.host + '/kids2016/calendar'; + var baseUrl = Drupal.settings.basePath + 'calendar'; if(time_string1 > event_date1) { jQuery.ajax({ //url: 'http://localhost/playatyourlibrary/docroot/calendar', @@ -333,8 +334,8 @@ jQuery(document).on('click','#raffle_form_button',function() { - var location = window.location; - var baseUrl1 = location.protocol + "//" + location.host + '/raffle_user_list'; + //var location = window.location; + var baseUrl1 = Drupal.settings.basePath + 'raffle_user_list'; var raffleId = jQuery("input[name='raffle']:checked").attr('raffle_id'); @@ -369,8 +370,8 @@ jQuery(document).on('click','#raffle_form_button',function() { jQuery(document).on('click','#raffle-entry-list-btn',function() { - var location = window.location; - var baseUrl1 = location.protocol + "//" + location.host + '/raffle_winner'; + //var location = window.location; + var baseUrl1 = Drupal.settings.basePath + 'raffle_winner'; var raffleUid = ''; jQuery( "input:checkbox:checked" ).each(function() { var uid = jQuery( this ).attr( "id" ); diff --git a/docroot/sites/all/themes/libraryzurb_teen/Gemfile b/docroot/sites/all/themes/libraryzurb_teen/Gemfile new file mode 100644 index 00000000..9dbb33bf --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/Gemfile @@ -0,0 +1,10 @@ +source "https://rubygems.org" +# Replace 4.3.2 with the version of Foundation you want to use +gem "zurb-foundation", "4.3.2" +gem "compass" +gem "sass-globbing" +# gem "guard" + +# For more information on this file see: +# http://foundation.zurb.com/docs/sass.html +# http://zslabs.com/articles/versioned-dependencies-with-compass diff --git a/docroot/sites/all/themes/libraryzurb_teen/Gemfile.lock b/docroot/sites/all/themes/libraryzurb_teen/Gemfile.lock new file mode 100644 index 00000000..c2f330cf --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/Gemfile.lock @@ -0,0 +1,34 @@ +GEM + remote: https://rubygems.org/ + specs: + chunky_png (1.3.4) + compass (1.0.3) + chunky_png (~> 1.2) + compass-core (~> 1.0.2) + compass-import-once (~> 1.0.5) + rb-fsevent (>= 0.9.3) + rb-inotify (>= 0.9) + sass (>= 3.3.13, < 3.5) + compass-core (1.0.3) + multi_json (~> 1.0) + sass (>= 3.3.0, < 3.5) + compass-import-once (1.0.5) + sass (>= 3.2, < 3.5) + ffi (1.9.8) + multi_json (1.11.0) + rb-fsevent (0.9.5) + rb-inotify (0.9.5) + ffi (>= 0.5.0) + sass (3.4.14) + sass-globbing (1.1.1) + sass (>= 3.1) + zurb-foundation (4.3.2) + sass (>= 3.2.0) + +PLATFORMS + ruby + +DEPENDENCIES + compass + sass-globbing + zurb-foundation (= 4.3.2) diff --git a/docroot/sites/all/themes/libraryzurb_teen/Guardfile b/docroot/sites/all/themes/libraryzurb_teen/Guardfile new file mode 100644 index 00000000..d2eaa8d1 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/Guardfile @@ -0,0 +1,18 @@ +# Example Guardfile. Read more about Guardfiles: +# https://github.com/guard/guard +# +# Start guard: +# $ guard start -i +# +# Or with bundler: +# $ bundle exec guard start -i +# + +# guard 'livereload', :host => 'THEMENAME', :port => '35729' do +# watch(%r{.+\.(sass|css|js|jpg|jpeg|png|html?|php|inc)$}) +# end + +# guard 'compass', +# :configuration_file => "config.rb" do +# watch(%r{scss/.+\.s[ac]ss}) +# end diff --git a/docroot/sites/all/themes/libraryzurb_teen/LIBRARYSITE_FONTS.txt b/docroot/sites/all/themes/libraryzurb_teen/LIBRARYSITE_FONTS.txt new file mode 100644 index 00000000..18a06714 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/LIBRARYSITE_FONTS.txt @@ -0,0 +1,100 @@ + +Following are pre-set code snippets from Google Fonts. Use the code snippet that matches the fonts you want to use in your theme. + +NOTE: to change which set of fonts and colors gets used on the site, scroll to the bottom of _variable.scss and tell the scss file to import from the desired directory. + +------------------------------------------------ + + +Font set 1: Zurb Defaults + + + + + +------------------------------------------------ + + +Font set 2: Clean Type - Arvo + + + + + + +------------------------------------------------ + + +Font set 3: Old Typewriter - Special Elite + + + + + +------------------------------------------------ + + +Font set 4: Playful - Shadows into Light + + + \ No newline at end of file diff --git a/docroot/sites/all/themes/libraryzurb_teen/README.txt b/docroot/sites/all/themes/libraryzurb_teen/README.txt new file mode 100644 index 00000000..e2fa0d54 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/README.txt @@ -0,0 +1,133 @@ +DOCUMENTATION +---------------------------------- +Please refer also to the community documentation: + http://drupal.org/node/1948260 + +BUILD A THEME WITH ZURB FOUNDATION +---------------------------------- + +The base Foundation theme is designed to be easily extended by its sub-themes. +You shouldn't modify any of the CSS or PHP files in the zurb_foundation/ folder; +but instead you should create a sub-theme of zurb_foundation which is located in +a folder outside of the root zurb_foundation/ folder. The examples below assume +zurb_foundation and your sub-theme will be installed in sites/all/themes/, +but any valid theme directory is acceptable. Read the +sites/default/default.settings.php for more info. + +This theme does not support IE7. If you need it downgrade to Foundation 2 see +http://foundation.zurb.com/docs/faq.php or use the script in the starter +template.php THEMENAME_preprocess_html function. + +*** IMPORTANT NOTE *** +* +* In Drupal 7, the theme system caches which template files and which theme +* functions should be called. This means that if you add a new theme, +* preprocess or process function to your template.php file or add a new template +* (.tpl.php) file to your sub-theme, you will need to rebuild the "theme +* registry." See http://drupal.org/node/173880#theme-registry +* +* Drupal 7 also stores a cache of the data in .info files. If you modify any +* lines in your sub-theme's .info file, you MUST refresh Drupal 7's cache by +* simply visiting the Appearance page at admin/appearance or at + admin/config/development/performance. + +BUILD A THEME WITH DRUSH +---------------------------------- +If you have drush and the zurb foundation theme enabled you can create a +subtheme easily with a drush. + +The command to do this is simply: + drush fst [THEMENAME] [Description !Optional] + +MANUALLY BUILD A THEME +---------------------------------- + 1. Setup the location for your new sub-theme. + + Copy the STARTER folder out of the zurb_foundation/ folder and rename it to + be your new sub-theme. IMPORTANT: The name of your sub-theme must start with + an alphabetic character and can only contain lowercase letters, numbers and + underscores. + + For example, copy the sites/all/themes/zurb_foundation/STARTER folder and + rename it as sites/all/themes/foo. + + Why? Each theme should reside in its own folder. To make it easier to + upgrade Foundation, sub-themes should reside in a folder separate from the + base theme. + + 2. Setup the basic information for your sub-theme. + + In your new sub-theme folder, rename the STARTERKIT.info.txt file to include + the name of your new sub-theme and remove the ".txt" extension. Then edit + the .info file by editing the name and description field. + + For example, rename the foo/STARTER.info.txt file to foo/foo.info. Edit the + foo.info file and change "name = Foundation Sub-theme Starter" to + "name = Foo" and "description = Read..." to "description = A sub-theme". + + Why? The .info file describes the basic things about your theme: its + name, description, features, template regions, CSS files, and JavaScript + files. See the Drupal 7 Theme Guide for more info: + http://drupal.org/node/171205 + + Then, visit your site's Appearance page at admin/appearance to refresh + Drupal 7's cache of .info file data. + + 3. Edit your sub-theme to use the proper function names. + + Edit the template.php and theme-settings.php files in your sub-theme's + folder; replace ALL occurrences of "STARTER" with the name of your + sub-theme. + + For example, edit foo/template.php and foo/theme-settings.php and replace + every occurrence of "STARTER" with "foo". + + It is recommended to use a text editing application with search and + "replace all" functionality. + + 5. Set your website's default theme. + + Log in as an administrator on your Drupal site, go to the Appearance page at + admin/appearance and click the "Enable and set default" link next to your + new sub-theme. + + +Optional steps: + + 6. Modify the markup in Foundation core's template files. + + If you decide you want to modify any of the .tpl.php template files in the + zurb_foundation folder, copy them to your sub-theme's folder before + making any changes.And then rebuild the theme registry. + + For example, copy zurb_foundation/templates/page.tpl.php to + THEMENAME/templates/page.tpl.php. + + 7. Modify the markup in Drupal's search form. + + Copy the search-block-form.tpl.php template file from the modules/search/ + folder and place it in your sub-theme's template folder. And then rebuild + the theme registry. + + You can find a full list of Drupal templates that you can override in the + templates/README.txt file or http://drupal.org/node/190815 + + Why? In Drupal 7 theming, if you want to modify a template included by a + module, you should copy the template file from the module's directory to + your sub-theme's template directory and then rebuild the theme registry. + See the Drupal 7 Theme Guide for more info: http://drupal.org/node/173880 + + 8. Further extend your sub-theme. + + Discover further ways to extend your sub-theme by reading + Drupal 7's Theme Guide online at: http://drupal.org/theme-guide + +CHANGING FOUNDATION DEFAULT SETTINGS +------------------------------------ +In order to avoid overwriting your customizations in _settings.scss when +updating Zurb Foundation, subthemes default to placing the standard Foundation +settings in [subtheme-name]/scss/_variables.scss. + +If you prefer to do it the standard Foundation way (at your own risk), you can +rename _variables.scss to _settings.scss in your subtheme and then load +"settings" instead of "variables" in [subtheme-name]/scss/base/_init.scss. diff --git a/docroot/sites/all/themes/libraryzurb_teen/config.rb b/docroot/sites/all/themes/libraryzurb_teen/config.rb new file mode 100644 index 00000000..03863575 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/config.rb @@ -0,0 +1,45 @@ +# Default to development if environment is not set. +saved = environment +if (environment.nil?) + environment = :development +else + environment = saved +end + +# Requre a specific version in this file: +# gem 'zurb-foundation', '=4.3.2' +require 'zurb-foundation' +# Require any additional compass plugins here. +require 'sass-globbing' + +# Set this to the root of your project when deployed: +http_path = "../" +css_dir = "css" +sass_dir = "scss" +images_dir = "images" +javascripts_dir = "js" +fonts_dir = "fonts" + +# You can select your preferred output style here (can be overridden via the command line): +# output_style = :expanded or :nested or :compact or :compressed +output_style = :expanded + +# To enable relative paths to assets via compass helper functions. Uncomment: +# relative_assets = true + +# To disable debugging comments that display the original location of your selectors. Uncomment: +line_comments = false +# line_comments = (environment == :production) ? false : true + +# sass_options = (environment == :production) ? {} : {:debug_info => true} +# sass_options = {:debug_info => true} +# sass_options = {:sourcemap => true} +sourcemap = (environment == :production) ? false : true + +# disable_warnings = true + +# If you prefer the indented syntax, you might want to regenerate this +# project again passing --syntax sass, or you can uncomment this: +# preferred_syntax = :sass +# and then run: +# sass-convert -R --from scss --to sass sass scss && rm -rf sass && mv scss sass diff --git a/docroot/sites/all/themes/libraryzurb_teen/css/app.css b/docroot/sites/all/themes/libraryzurb_teen/css/app.css new file mode 100644 index 00000000..6495f22a --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/css/app.css @@ -0,0 +1,7314 @@ +/*! normalize.css v2.1.2 | MIT License | git.io/normalize */ +/* ========================================================================== + HTML5 display definitions + ========================================================================== */ +/** + * Correct `block` display not defined in IE 8/9. + */ +/* line 11, ../scss/_normalize.scss */ +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section, +summary { + display: block; +} + +/** + * Correct `inline-block` display not defined in IE 8/9. + */ +/* line 30, ../scss/_normalize.scss */ +audio, +canvas, +video { + display: inline-block; +} + +/** + * Prevent modern browsers from displaying `audio` without controls. + * Remove excess height in iOS 5 devices. + */ +/* line 41, ../scss/_normalize.scss */ +audio:not([controls]) { + display: none; + height: 0; +} + +/** + * Address `[hidden]` styling not present in IE 8/9. + * Hide the `template` element in IE, Safari, and Firefox < 22. + */ +/* line 51, ../scss/_normalize.scss */ +[hidden], +template { + display: none; +} + +/* line 56, ../scss/_normalize.scss */ +script { + display: none !important; +} + +/* ========================================================================== + Base + ========================================================================== */ +/** + * 1. Set default font family to sans-serif. + * 2. Prevent iOS text size adjust after orientation change, without disabling + * user zoom. + */ +/* line 70, ../scss/_normalize.scss */ +html { + font-family: sans-serif; + /* 1 */ + -ms-text-size-adjust: 100%; + /* 2 */ + -webkit-text-size-adjust: 100%; + /* 2 */ +} + +/** + * Remove default margin. + */ +/* line 80, ../scss/_normalize.scss */ +body { + margin: 0; +} + +/* ========================================================================== + Links + ========================================================================== */ +/** + * Remove the gray background color from active links in IE 10. + */ +/* line 92, ../scss/_normalize.scss */ +a { + background: transparent; +} + +/** + * Address `outline` inconsistency between Chrome and other browsers. + */ +/* line 100, ../scss/_normalize.scss */ +a:focus { + outline: thin dotted; +} + +/** + * Improve readability when focused and also mouse hovered in all browsers. + */ +/* line 108, ../scss/_normalize.scss */ +a:active, +a:hover { + outline: 0; +} + +/* ========================================================================== + Typography + ========================================================================== */ +/** + * Address variable `h1` font-size and margin within `section` and `article` + * contexts in Firefox 4+, Safari 5, and Chrome. + */ +/* line 122, ../scss/_normalize.scss */ +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/** + * Address styling not present in IE 8/9, Safari 5, and Chrome. + */ +/* line 131, ../scss/_normalize.scss */ +abbr[title] { + border-bottom: 1px dotted; +} + +/** + * Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. + */ +/* line 139, ../scss/_normalize.scss */ +b, +strong { + font-weight: bold; +} + +/** + * Address styling not present in Safari 5 and Chrome. + */ +/* line 148, ../scss/_normalize.scss */ +dfn { + font-style: italic; +} + +/** + * Address differences between Firefox and other browsers. + */ +/* line 156, ../scss/_normalize.scss */ +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} + +/** + * Address styling not present in IE 8/9. + */ +/* line 166, ../scss/_normalize.scss */ +mark { + background: #ff0; + color: #000; +} + +/** + * Correct font family set oddly in Safari 5 and Chrome. + */ +/* line 175, ../scss/_normalize.scss */ +code, +kbd, +pre, +samp { + font-family: monospace, serif; + font-size: 1em; +} + +/** + * Improve readability of pre-formatted text in all browsers. + */ +/* line 187, ../scss/_normalize.scss */ +pre { + white-space: pre-wrap; +} + +/** + * Set consistent quote types. + */ +/* line 195, ../scss/_normalize.scss */ +q { + quotes: "\201C" "\201D" "\2018" "\2019"; +} + +/** + * Address inconsistent and variable font size in all browsers. + */ +/* line 203, ../scss/_normalize.scss */ +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` affecting `line-height` in all browsers. + */ +/* line 211, ../scss/_normalize.scss */ +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +/* line 219, ../scss/_normalize.scss */ +sup { + top: -0.5em; +} + +/* line 223, ../scss/_normalize.scss */ +sub { + bottom: -0.25em; +} + +/* ========================================================================== + Embedded content + ========================================================================== */ +/** + * Remove border when inside `a` element in IE 8/9. + */ +/* line 235, ../scss/_normalize.scss */ +img { + border: 0; +} + +/** + * Correct overflow displayed oddly in IE 9. + */ +/* line 243, ../scss/_normalize.scss */ +svg:not(:root) { + overflow: hidden; +} + +/* ========================================================================== + Figures + ========================================================================== */ +/** + * Address margin not present in IE 8/9 and Safari 5. + */ +/* line 255, ../scss/_normalize.scss */ +figure { + margin: 0; +} + +/* ========================================================================== + Forms + ========================================================================== */ +/** + * Define consistent border, margin, and padding. + */ +/* line 267, ../scss/_normalize.scss */ +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +/** + * 1. Correct `color` not being inherited in IE 8/9. + * 2. Remove padding so people aren't caught out if they zero out fieldsets. + */ +/* line 278, ../scss/_normalize.scss */ +legend { + border: 0; + /* 1 */ + padding: 0; + /* 2 */ +} + +/** + * 1. Correct font family not being inherited in all browsers. + * 2. Correct font size not being inherited in all browsers. + * 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. + */ +/* line 289, ../scss/_normalize.scss */ +button, +input, +select, +textarea { + font-family: inherit; + /* 1 */ + font-size: 100%; + /* 2 */ + margin: 0; + /* 3 */ +} + +/** + * Address Firefox 4+ setting `line-height` on `input` using `!important` in + * the UA stylesheet. + */ +/* line 303, ../scss/_normalize.scss */ +button, +input { + line-height: normal; +} + +/** + * Address inconsistent `text-transform` inheritance for `button` and `select`. + * All other form control elements do not inherit `text-transform` values. + * Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. + * Correct `select` style inheritance in Firefox 4+ and Opera. + */ +/* line 315, ../scss/_normalize.scss */ +button, +select { + text-transform: none; +} + +/** + * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` + * and `video` controls. + * 2. Correct inability to style clickable `input` types in iOS. + * 3. Improve usability and consistency of cursor style between image-type + * `input` and others. + */ +/* line 328, ../scss/_normalize.scss */ +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + /* 2 */ + cursor: pointer; + /* 3 */ +} + +/** + * Re-set default cursor for disabled elements. + */ +/* line 340, ../scss/_normalize.scss */ +button[disabled], +html input[disabled] { + cursor: default; +} + +/** + * 1. Address box sizing set to `content-box` in IE 8/9. + * 2. Remove excess padding in IE 8/9. + */ +/* line 350, ../scss/_normalize.scss */ +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + /* 1 */ + padding: 0; + /* 2 */ +} + +/** + * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. + * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome + * (include `-moz` to future-proof). + */ +/* line 362, ../scss/_normalize.scss */ +input[type="search"] { + -webkit-appearance: textfield; + /* 1 */ + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + /* 2 */ + box-sizing: content-box; +} + +/** + * Remove inner padding and search cancel button in Safari 5 and Chrome + * on OS X. + */ +/* line 374, ../scss/_normalize.scss */ +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * Remove inner padding and border in Firefox 4+. + */ +/* line 383, ../scss/_normalize.scss */ +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/** + * 1. Remove default vertical scrollbar in IE 8/9. + * 2. Improve readability and alignment in all browsers. + */ +/* line 394, ../scss/_normalize.scss */ +textarea { + overflow: auto; + /* 1 */ + vertical-align: top; + /* 2 */ +} + +/* ========================================================================== + Tables + ========================================================================== */ +/** + * Remove most spacing between table cells. + */ +/* line 407, ../scss/_normalize.scss */ +table { + border-collapse: collapse; + border-spacing: 0; +} + +/* line 264, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss */ +meta.foundation-mq-small { + font-family: "only screen and (min-width: 768px)"; + width: 768px; +} + +/* line 269, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss */ +meta.foundation-mq-medium { + font-family: "only screen and (min-width:1280px)"; + width: 1280px; +} + +/* line 274, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss */ +meta.foundation-mq-large { + font-family: "only screen and (min-width:1440px)"; + width: 1440px; +} + +/* line 290, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss */ +*, +*:before, +*:after { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +/* line 296, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss */ +html, +body { + font-size: 100%; +} + +/* line 300, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss */ +body { + background: #fff; + color: #222; + padding: 0; + margin: 0; + font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; + font-weight: normal; + font-style: normal; + line-height: 1; + position: relative; + cursor: default; +} + +/* line 313, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss */ +a:hover { + cursor: pointer; +} + +/* line 316, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss */ +img, +object, +embed { + max-width: 100%; + height: auto; +} + +/* line 320, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss */ +object, +embed { + height: 100%; +} + +/* line 322, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss */ +img { + -ms-interpolation-mode: bicubic; +} + +/* line 326, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss */ +#map_canvas img, +#map_canvas embed, +#map_canvas object, +.map_canvas img, +.map_canvas embed, +.map_canvas object { + max-width: none !important; +} + +/* line 333, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss */ +.left { + float: left !important; +} + +/* line 334, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss */ +.right { + float: right !important; +} + +/* line 335, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss */ +.text-left { + text-align: left !important; +} + +/* line 336, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss */ +.text-right { + text-align: right !important; +} + +/* line 337, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss */ +.text-center { + text-align: center !important; +} + +/* line 338, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss */ +.text-justify { + text-align: justify !important; +} + +/* line 339, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss */ +.hide { + display: none; +} + +/* line 345, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss */ +.antialiased { + -webkit-font-smoothing: antialiased; +} + +/* line 348, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss */ +img { + display: inline-block; + vertical-align: middle; +} + +/* line 358, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss */ +textarea { + height: auto; + min-height: 50px; +} + +/* line 361, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss */ +select { + width: 100%; +} + +/* Grid HTML Classes */ +/* line 116, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ +.row { + width: 100%; + margin-left: auto; + margin-right: auto; + margin-top: 0; + margin-bottom: 0; + max-width: 62.5em; + *zoom: 1; +} +/* line 121, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss */ +.row:before, .row:after { + content: " "; + display: table; +} +/* line 122, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss */ +.row:after { + clear: both; +} +/* line 120, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ +.row.collapse > .column, +.row.collapse > .columns { + position: relative; + padding-left: 0; + padding-right: 0; + float: left; +} +/* line 123, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ +.row.collapse .row { + margin-left: 0; + margin-right: 0; +} +/* line 126, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ +.row .row { + width: auto; + margin-left: -0.9375em; + margin-right: -0.9375em; + margin-top: 0; + margin-bottom: 0; + max-width: none; + *zoom: 1; +} +/* line 121, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss */ +.row .row:before, .row .row:after { + content: " "; + display: table; +} +/* line 122, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss */ +.row .row:after { + clear: both; +} +/* line 127, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ +.row .row.collapse { + width: auto; + margin: 0; + max-width: none; + *zoom: 1; +} +/* line 121, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss */ +.row .row.collapse:before, .row .row.collapse:after { + content: " "; + display: table; +} +/* line 122, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss */ +.row .row.collapse:after { + clear: both; +} + +/* line 131, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ +.column, +.columns { + position: relative; + padding-left: 0.9375em; + padding-right: 0.9375em; + width: 100%; + float: left; +} + +@media only screen { + /* line 136, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .column, + .columns { + position: relative; + padding-left: 0.9375em; + padding-right: 0.9375em; + float: left; + } + + /* line 140, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .small-1 { + position: relative; + width: 8.33333%; + } + + /* line 140, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .small-2 { + position: relative; + width: 16.66667%; + } + + /* line 140, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .small-3 { + position: relative; + width: 25%; + } + + /* line 140, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .small-4 { + position: relative; + width: 33.33333%; + } + + /* line 140, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .small-5 { + position: relative; + width: 41.66667%; + } + + /* line 140, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .small-6 { + position: relative; + width: 50%; + } + + /* line 140, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .small-7 { + position: relative; + width: 58.33333%; + } + + /* line 140, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .small-8 { + position: relative; + width: 66.66667%; + } + + /* line 140, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .small-9 { + position: relative; + width: 75%; + } + + /* line 140, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .small-10 { + position: relative; + width: 83.33333%; + } + + /* line 140, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .small-11 { + position: relative; + width: 91.66667%; + } + + /* line 140, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .small-12 { + position: relative; + width: 100%; + } + + /* line 144, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .small-offset-0 { + position: relative; + margin-left: 0%; + } + + /* line 144, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .small-offset-1 { + position: relative; + margin-left: 8.33333%; + } + + /* line 144, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .small-offset-2 { + position: relative; + margin-left: 16.66667%; + } + + /* line 144, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .small-offset-3 { + position: relative; + margin-left: 25%; + } + + /* line 144, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .small-offset-4 { + position: relative; + margin-left: 33.33333%; + } + + /* line 144, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .small-offset-5 { + position: relative; + margin-left: 41.66667%; + } + + /* line 144, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .small-offset-6 { + position: relative; + margin-left: 50%; + } + + /* line 144, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .small-offset-7 { + position: relative; + margin-left: 58.33333%; + } + + /* line 144, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .small-offset-8 { + position: relative; + margin-left: 66.66667%; + } + + /* line 144, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .small-offset-9 { + position: relative; + margin-left: 75%; + } + + /* line 144, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .small-offset-10 { + position: relative; + margin-left: 83.33333%; + } + + /* line 147, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + [class*="column"] + [class*="column"]:last-child { + float: right; + } + + /* line 148, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + [class*="column"] + [class*="column"].end { + float: left; + } + + /* line 150, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .column.small-centered, + .columns.small-centered { + position: relative; + margin-left: auto; + margin-right: auto; + float: none !important; + } +} +/* Styles for screens that are atleast 768px; */ +@media only screen and (min-width: 768px) { + /* line 158, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .large-1 { + position: relative; + width: 8.33333%; + } + + /* line 158, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .large-2 { + position: relative; + width: 16.66667%; + } + + /* line 158, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .large-3 { + position: relative; + width: 25%; + } + + /* line 158, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .large-4 { + position: relative; + width: 33.33333%; + } + + /* line 158, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .large-5 { + position: relative; + width: 41.66667%; + } + + /* line 158, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .large-6 { + position: relative; + width: 50%; + } + + /* line 158, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .large-7 { + position: relative; + width: 58.33333%; + } + + /* line 158, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .large-8 { + position: relative; + width: 66.66667%; + } + + /* line 158, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .large-9 { + position: relative; + width: 75%; + } + + /* line 158, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .large-10 { + position: relative; + width: 83.33333%; + } + + /* line 158, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .large-11 { + position: relative; + width: 91.66667%; + } + + /* line 158, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .large-12 { + position: relative; + width: 100%; + } + + /* line 162, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .row .large-offset-0 { + position: relative; + margin-left: 0%; + } + + /* line 162, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .row .large-offset-1 { + position: relative; + margin-left: 8.33333%; + } + + /* line 162, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .row .large-offset-2 { + position: relative; + margin-left: 16.66667%; + } + + /* line 162, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .row .large-offset-3 { + position: relative; + margin-left: 25%; + } + + /* line 162, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .row .large-offset-4 { + position: relative; + margin-left: 33.33333%; + } + + /* line 162, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .row .large-offset-5 { + position: relative; + margin-left: 41.66667%; + } + + /* line 162, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .row .large-offset-6 { + position: relative; + margin-left: 50%; + } + + /* line 162, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .row .large-offset-7 { + position: relative; + margin-left: 58.33333%; + } + + /* line 162, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .row .large-offset-8 { + position: relative; + margin-left: 66.66667%; + } + + /* line 162, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .row .large-offset-9 { + position: relative; + margin-left: 75%; + } + + /* line 162, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .row .large-offset-10 { + position: relative; + margin-left: 83.33333%; + } + + /* line 162, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .row .large-offset-11 { + position: relative; + margin-left: 91.66667%; + } + + /* line 166, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .push-1 { + position: relative; + left: 8.33333%; + right: auto; + } + + /* line 167, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .pull-1 { + position: relative; + right: 8.33333%; + left: auto; + } + + /* line 166, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .push-2 { + position: relative; + left: 16.66667%; + right: auto; + } + + /* line 167, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .pull-2 { + position: relative; + right: 16.66667%; + left: auto; + } + + /* line 166, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .push-3 { + position: relative; + left: 25%; + right: auto; + } + + /* line 167, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .pull-3 { + position: relative; + right: 25%; + left: auto; + } + + /* line 166, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .push-4 { + position: relative; + left: 33.33333%; + right: auto; + } + + /* line 167, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .pull-4 { + position: relative; + right: 33.33333%; + left: auto; + } + + /* line 166, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .push-5 { + position: relative; + left: 41.66667%; + right: auto; + } + + /* line 167, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .pull-5 { + position: relative; + right: 41.66667%; + left: auto; + } + + /* line 166, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .push-6 { + position: relative; + left: 50%; + right: auto; + } + + /* line 167, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .pull-6 { + position: relative; + right: 50%; + left: auto; + } + + /* line 166, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .push-7 { + position: relative; + left: 58.33333%; + right: auto; + } + + /* line 167, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .pull-7 { + position: relative; + right: 58.33333%; + left: auto; + } + + /* line 166, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .push-8 { + position: relative; + left: 66.66667%; + right: auto; + } + + /* line 167, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .pull-8 { + position: relative; + right: 66.66667%; + left: auto; + } + + /* line 166, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .push-9 { + position: relative; + left: 75%; + right: auto; + } + + /* line 167, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .pull-9 { + position: relative; + right: 75%; + left: auto; + } + + /* line 166, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .push-10 { + position: relative; + left: 83.33333%; + right: auto; + } + + /* line 167, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .pull-10 { + position: relative; + right: 83.33333%; + left: auto; + } + + /* line 166, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .push-11 { + position: relative; + left: 91.66667%; + right: auto; + } + + /* line 167, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .pull-11 { + position: relative; + right: 91.66667%; + left: auto; + } + + /* line 170, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .column.large-centered, + .columns.large-centered { + position: relative; + margin-left: auto; + margin-right: auto; + float: none !important; + } + + /* line 173, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .column.large-uncentered, + .columns.large-uncentered { + margin-left: 0; + margin-right: 0; + float: left !important; + } + + /* line 180, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss */ + .column.large-uncentered.opposite, + .columns.large-uncentered.opposite { + float: right !important; + } +} +/* Foundation Visibility HTML Classes */ +/* line 9, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ +.show-for-small, +.show-for-medium-down, +.show-for-large-down { + display: inherit !important; +} + +/* line 13, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ +.show-for-medium, +.show-for-medium-up, +.show-for-large, +.show-for-large-up, +.show-for-xlarge { + display: none !important; +} + +/* line 19, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ +.hide-for-medium, +.hide-for-medium-up, +.hide-for-large, +.hide-for-large-up, +.hide-for-xlarge { + display: inherit !important; +} + +/* line 25, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ +.hide-for-small, +.hide-for-medium-down, +.hide-for-large-down { + display: none !important; +} + +/* Specific visilbity for tables */ +/* line 31, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ +table.show-for-small, table.show-for-medium-down, table.show-for-large-down, table.hide-for-medium, table.hide-for-medium-up, table.hide-for-large, table.hide-for-large-up, table.hide-for-xlarge { + display: table; +} + +/* line 41, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ +thead.show-for-small, thead.show-for-medium-down, thead.show-for-large-down, thead.hide-for-medium, thead.hide-for-medium-up, thead.hide-for-large, thead.hide-for-large-up, thead.hide-for-xlarge { + display: table-header-group !important; +} + +/* line 51, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ +tbody.show-for-small, tbody.show-for-medium-down, tbody.show-for-large-down, tbody.hide-for-medium, tbody.hide-for-medium-up, tbody.hide-for-large, tbody.hide-for-large-up, tbody.hide-for-xlarge { + display: table-row-group !important; +} + +/* line 61, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ +tr.show-for-small, tr.show-for-medium-down, tr.show-for-large-down, tr.hide-for-medium, tr.hide-for-medium-up, tr.hide-for-large, tr.hide-for-large-up, tr.hide-for-xlarge { + display: table-row !important; +} + +/* line 72, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ +td.show-for-small, td.show-for-medium-down, td.show-for-large-down, td.hide-for-medium, td.hide-for-medium-up, td.hide-for-large, td.hide-for-large-up, td.hide-for-xlarge, +th.show-for-small, +th.show-for-medium-down, +th.show-for-large-down, +th.hide-for-medium, +th.hide-for-medium-up, +th.hide-for-large, +th.hide-for-large-up, +th.hide-for-xlarge { + display: table-cell !important; +} + +/* Medium Displays: 768px - 1279px */ +@media only screen and (min-width: 768px) { + /* line 84, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + .show-for-medium, + .show-for-medium-up { + display: inherit !important; + } + + /* line 87, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + .show-for-small { + display: none !important; + } + + /* line 89, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + .hide-for-small { + display: inherit !important; + } + + /* line 91, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + .hide-for-medium, + .hide-for-medium-up { + display: none !important; + } + + /* Specific visilbity for tables */ + /* line 96, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + table.show-for-medium, table.show-for-medium-up, table.hide-for-small { + display: table; + } + + /* line 101, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + thead.show-for-medium, thead.show-for-medium-up, thead.hide-for-small { + display: table-header-group !important; + } + + /* line 106, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + tbody.show-for-medium, tbody.show-for-medium-up, tbody.hide-for-small { + display: table-row-group !important; + } + + /* line 111, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + tr.show-for-medium, tr.show-for-medium-up, tr.hide-for-small { + display: table-row !important; + } + + /* line 117, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + td.show-for-medium, td.show-for-medium-up, td.hide-for-small, + th.show-for-medium, + th.show-for-medium-up, + th.hide-for-small { + display: table-cell !important; + } +} +/* Large Displays: 1280px - 1440px */ +@media only screen and (min-width: 1280px) { + /* line 125, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + .show-for-large, + .show-for-large-up { + display: inherit !important; + } + + /* line 128, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + .show-for-medium, + .show-for-medium-down { + display: none !important; + } + + /* line 131, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + .hide-for-medium, + .hide-for-medium-down { + display: inherit !important; + } + + /* line 134, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + .hide-for-large, + .hide-for-large-up { + display: none !important; + } + + /* Specific visilbity for tables */ + /* line 139, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + table.show-for-large, table.show-for-large-up, table.hide-for-medium, table.hide-for-medium-down { + display: table; + } + + /* line 145, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + thead.show-for-large, thead.show-for-large-up, thead.hide-for-medium, thead.hide-for-medium-down { + display: table-header-group !important; + } + + /* line 151, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + tbody.show-for-large, tbody.show-for-large-up, tbody.hide-for-medium, tbody.hide-for-medium-down { + display: table-row-group !important; + } + + /* line 157, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + tr.show-for-large, tr.show-for-large-up, tr.hide-for-medium, tr.hide-for-medium-down { + display: table-row !important; + } + + /* line 164, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + td.show-for-large, td.show-for-large-up, td.hide-for-medium, td.hide-for-medium-down, + th.show-for-large, + th.show-for-large-up, + th.hide-for-medium, + th.hide-for-medium-down { + display: table-cell !important; + } +} +/* X-Large Displays: 1400px and up */ +@media only screen and (min-width: 1440px) { + /* line 173, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + .show-for-xlarge { + display: inherit !important; + } + + /* line 175, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + .show-for-large, + .show-for-large-down { + display: none !important; + } + + /* line 178, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + .hide-for-large, + .hide-for-large-down { + display: inherit !important; + } + + /* line 181, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + .hide-for-xlarge { + display: none !important; + } + + /* Specific visilbity for tables */ + /* line 185, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + table.show-for-xlarge, table.hide-for-large, table.hide-for-large-down { + display: table; + } + + /* line 190, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + thead.show-for-xlarge, thead.hide-for-large, thead.hide-for-large-down { + display: table-header-group !important; + } + + /* line 195, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + tbody.show-for-xlarge, tbody.hide-for-large, tbody.hide-for-large-down { + display: table-row-group !important; + } + + /* line 200, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + tr.show-for-xlarge, tr.hide-for-large, tr.hide-for-large-down { + display: table-row !important; + } + + /* line 206, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + td.show-for-xlarge, td.hide-for-large, td.hide-for-large-down, + th.show-for-xlarge, + th.hide-for-large, + th.hide-for-large-down { + display: table-cell !important; + } +} +/* Orientation targeting */ +/* line 214, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ +.show-for-landscape, +.hide-for-portrait { + display: inherit !important; +} + +/* line 216, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ +.hide-for-landscape, +.show-for-portrait { + display: none !important; +} + +/* Specific visilbity for tables */ +/* line 221, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ +table.hide-for-landscape, table.show-for-portrait { + display: table; +} + +/* line 225, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ +thead.hide-for-landscape, thead.show-for-portrait { + display: table-header-group !important; +} + +/* line 229, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ +tbody.hide-for-landscape, tbody.show-for-portrait { + display: table-row-group !important; +} + +/* line 233, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ +tr.hide-for-landscape, tr.show-for-portrait { + display: table-row !important; +} + +/* line 238, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ +td.hide-for-landscape, td.show-for-portrait, +th.hide-for-landscape, +th.show-for-portrait { + display: table-cell !important; +} + +@media only screen and (orientation: landscape) { + /* line 243, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + .show-for-landscape, + .hide-for-portrait { + display: inherit !important; + } + + /* line 245, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + .hide-for-landscape, + .show-for-portrait { + display: none !important; + } + + /* Specific visilbity for tables */ + /* line 250, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + table.show-for-landscape, table.hide-for-portrait { + display: table; + } + + /* line 254, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + thead.show-for-landscape, thead.hide-for-portrait { + display: table-header-group !important; + } + + /* line 258, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + tbody.show-for-landscape, tbody.hide-for-portrait { + display: table-row-group !important; + } + + /* line 262, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + tr.show-for-landscape, tr.hide-for-portrait { + display: table-row !important; + } + + /* line 267, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + td.show-for-landscape, td.hide-for-portrait, + th.show-for-landscape, + th.hide-for-portrait { + display: table-cell !important; + } +} +@media only screen and (orientation: portrait) { + /* line 273, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + .show-for-portrait, + .hide-for-landscape { + display: inherit !important; + } + + /* line 275, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + .hide-for-portrait, + .show-for-landscape { + display: none !important; + } + + /* Specific visilbity for tables */ + /* line 280, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + table.show-for-portrait, table.hide-for-landscape { + display: table; + } + + /* line 284, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + thead.show-for-portrait, thead.hide-for-landscape { + display: table-header-group !important; + } + + /* line 288, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + tbody.show-for-portrait, tbody.hide-for-landscape { + display: table-row-group !important; + } + + /* line 292, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + tr.show-for-portrait, tr.hide-for-landscape { + display: table-row !important; + } + + /* line 297, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ + td.show-for-portrait, td.hide-for-landscape, + th.show-for-portrait, + th.hide-for-landscape { + display: table-cell !important; + } +} +/* Touch-enabled device targeting */ +/* line 303, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ +.show-for-touch { + display: none !important; +} + +/* line 304, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ +.hide-for-touch { + display: inherit !important; +} + +/* line 305, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ +.touch .show-for-touch { + display: inherit !important; +} + +/* line 306, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ +.touch .hide-for-touch { + display: none !important; +} + +/* Specific visilbity for tables */ +/* line 309, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ +table.hide-for-touch { + display: table; +} + +/* line 310, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ +.touch table.show-for-touch { + display: table; +} + +/* line 311, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ +thead.hide-for-touch { + display: table-header-group !important; +} + +/* line 312, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ +.touch thead.show-for-touch { + display: table-header-group !important; +} + +/* line 313, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ +tbody.hide-for-touch { + display: table-row-group !important; +} + +/* line 314, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ +.touch tbody.show-for-touch { + display: table-row-group !important; +} + +/* line 315, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ +tr.hide-for-touch { + display: table-row !important; +} + +/* line 316, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ +.touch tr.show-for-touch { + display: table-row !important; +} + +/* line 317, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ +td.hide-for-touch { + display: table-cell !important; +} + +/* line 318, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ +.touch td.show-for-touch { + display: table-cell !important; +} + +/* line 319, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ +th.hide-for-touch { + display: table-cell !important; +} + +/* line 320, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss */ +.touch th.show-for-touch { + display: table-cell !important; +} + +/* Foundation Block Grids for below small breakpoint */ +@media only screen { + /* line 50, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + [class*="block-grid-"] { + display: block; + padding: 0; + margin: 0 -0.625em; + *zoom: 1; + } + /* line 121, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss */ + [class*="block-grid-"]:before, [class*="block-grid-"]:after { + content: " "; + display: table; + } + /* line 122, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss */ + [class*="block-grid-"]:after { + clear: both; + } + /* line 27, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + [class*="block-grid-"] > li { + display: inline; + height: auto; + float: left; + padding: 0 0.625em 1.25em; + } + + /* line 36, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-1 > li { + width: 100%; + padding: 0 0.625em 1.25em; + } + /* line 40, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-1 > li:nth-of-type(n) { + clear: none; + } + /* line 41, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-1 > li:nth-of-type(1n+1) { + clear: both; + } + + /* line 36, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-2 > li { + width: 50%; + padding: 0 0.625em 1.25em; + } + /* line 40, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-2 > li:nth-of-type(n) { + clear: none; + } + /* line 41, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-2 > li:nth-of-type(2n+1) { + clear: both; + } + + /* line 36, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-3 > li { + width: 33.33333%; + padding: 0 0.625em 1.25em; + } + /* line 40, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-3 > li:nth-of-type(n) { + clear: none; + } + /* line 41, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-3 > li:nth-of-type(3n+1) { + clear: both; + } + + /* line 36, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-4 > li { + width: 25%; + padding: 0 0.625em 1.25em; + } + /* line 40, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-4 > li:nth-of-type(n) { + clear: none; + } + /* line 41, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-4 > li:nth-of-type(4n+1) { + clear: both; + } + + /* line 36, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-5 > li { + width: 20%; + padding: 0 0.625em 1.25em; + } + /* line 40, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-5 > li:nth-of-type(n) { + clear: none; + } + /* line 41, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-5 > li:nth-of-type(5n+1) { + clear: both; + } + + /* line 36, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-6 > li { + width: 16.66667%; + padding: 0 0.625em 1.25em; + } + /* line 40, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-6 > li:nth-of-type(n) { + clear: none; + } + /* line 41, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-6 > li:nth-of-type(6n+1) { + clear: both; + } + + /* line 36, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-7 > li { + width: 14.28571%; + padding: 0 0.625em 1.25em; + } + /* line 40, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-7 > li:nth-of-type(n) { + clear: none; + } + /* line 41, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-7 > li:nth-of-type(7n+1) { + clear: both; + } + + /* line 36, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-8 > li { + width: 12.5%; + padding: 0 0.625em 1.25em; + } + /* line 40, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-8 > li:nth-of-type(n) { + clear: none; + } + /* line 41, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-8 > li:nth-of-type(8n+1) { + clear: both; + } + + /* line 36, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-9 > li { + width: 11.11111%; + padding: 0 0.625em 1.25em; + } + /* line 40, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-9 > li:nth-of-type(n) { + clear: none; + } + /* line 41, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-9 > li:nth-of-type(9n+1) { + clear: both; + } + + /* line 36, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-10 > li { + width: 10%; + padding: 0 0.625em 1.25em; + } + /* line 40, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-10 > li:nth-of-type(n) { + clear: none; + } + /* line 41, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-10 > li:nth-of-type(10n+1) { + clear: both; + } + + /* line 36, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-11 > li { + width: 9.09091%; + padding: 0 0.625em 1.25em; + } + /* line 40, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-11 > li:nth-of-type(n) { + clear: none; + } + /* line 41, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-11 > li:nth-of-type(11n+1) { + clear: both; + } + + /* line 36, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-12 > li { + width: 8.33333%; + padding: 0 0.625em 1.25em; + } + /* line 40, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-12 > li:nth-of-type(n) { + clear: none; + } + /* line 41, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-12 > li:nth-of-type(12n+1) { + clear: both; + } +} +/* Foundation Block Grids for above small breakpoint */ +@media only screen and (min-width: 768px) { + /* Remove small grid clearing */ + /* line 63, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-1 > li:nth-of-type(1n+1) { + clear: none; + } + + /* line 63, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-2 > li:nth-of-type(2n+1) { + clear: none; + } + + /* line 63, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-3 > li:nth-of-type(3n+1) { + clear: none; + } + + /* line 63, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-4 > li:nth-of-type(4n+1) { + clear: none; + } + + /* line 63, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-5 > li:nth-of-type(5n+1) { + clear: none; + } + + /* line 63, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-6 > li:nth-of-type(6n+1) { + clear: none; + } + + /* line 63, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-7 > li:nth-of-type(7n+1) { + clear: none; + } + + /* line 63, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-8 > li:nth-of-type(8n+1) { + clear: none; + } + + /* line 63, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-9 > li:nth-of-type(9n+1) { + clear: none; + } + + /* line 63, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-10 > li:nth-of-type(10n+1) { + clear: none; + } + + /* line 63, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-11 > li:nth-of-type(11n+1) { + clear: none; + } + + /* line 63, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .small-block-grid-12 > li:nth-of-type(12n+1) { + clear: none; + } + + /* line 36, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .large-block-grid-1 > li { + width: 100%; + padding: 0 0.625em 1.25em; + } + /* line 40, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .large-block-grid-1 > li:nth-of-type(n) { + clear: none; + } + /* line 41, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .large-block-grid-1 > li:nth-of-type(1n+1) { + clear: both; + } + + /* line 36, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .large-block-grid-2 > li { + width: 50%; + padding: 0 0.625em 1.25em; + } + /* line 40, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .large-block-grid-2 > li:nth-of-type(n) { + clear: none; + } + /* line 41, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .large-block-grid-2 > li:nth-of-type(2n+1) { + clear: both; + } + + /* line 36, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .large-block-grid-3 > li { + width: 33.33333%; + padding: 0 0.625em 1.25em; + } + /* line 40, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .large-block-grid-3 > li:nth-of-type(n) { + clear: none; + } + /* line 41, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .large-block-grid-3 > li:nth-of-type(3n+1) { + clear: both; + } + + /* line 36, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .large-block-grid-4 > li { + width: 25%; + padding: 0 0.625em 1.25em; + } + /* line 40, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .large-block-grid-4 > li:nth-of-type(n) { + clear: none; + } + /* line 41, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .large-block-grid-4 > li:nth-of-type(4n+1) { + clear: both; + } + + /* line 36, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .large-block-grid-5 > li { + width: 20%; + padding: 0 0.625em 1.25em; + } + /* line 40, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .large-block-grid-5 > li:nth-of-type(n) { + clear: none; + } + /* line 41, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .large-block-grid-5 > li:nth-of-type(5n+1) { + clear: both; + } + + /* line 36, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .large-block-grid-6 > li { + width: 16.66667%; + padding: 0 0.625em 1.25em; + } + /* line 40, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .large-block-grid-6 > li:nth-of-type(n) { + clear: none; + } + /* line 41, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .large-block-grid-6 > li:nth-of-type(6n+1) { + clear: both; + } + + /* line 36, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .large-block-grid-7 > li { + width: 14.28571%; + padding: 0 0.625em 1.25em; + } + /* line 40, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .large-block-grid-7 > li:nth-of-type(n) { + clear: none; + } + /* line 41, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .large-block-grid-7 > li:nth-of-type(7n+1) { + clear: both; + } + + /* line 36, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .large-block-grid-8 > li { + width: 12.5%; + padding: 0 0.625em 1.25em; + } + /* line 40, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .large-block-grid-8 > li:nth-of-type(n) { + clear: none; + } + /* line 41, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .large-block-grid-8 > li:nth-of-type(8n+1) { + clear: both; + } + + /* line 36, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .large-block-grid-9 > li { + width: 11.11111%; + padding: 0 0.625em 1.25em; + } + /* line 40, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .large-block-grid-9 > li:nth-of-type(n) { + clear: none; + } + /* line 41, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .large-block-grid-9 > li:nth-of-type(9n+1) { + clear: both; + } + + /* line 36, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .large-block-grid-10 > li { + width: 10%; + padding: 0 0.625em 1.25em; + } + /* line 40, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .large-block-grid-10 > li:nth-of-type(n) { + clear: none; + } + /* line 41, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .large-block-grid-10 > li:nth-of-type(10n+1) { + clear: both; + } + + /* line 36, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .large-block-grid-11 > li { + width: 9.09091%; + padding: 0 0.625em 1.25em; + } + /* line 40, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .large-block-grid-11 > li:nth-of-type(n) { + clear: none; + } + /* line 41, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .large-block-grid-11 > li:nth-of-type(11n+1) { + clear: both; + } + + /* line 36, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .large-block-grid-12 > li { + width: 8.33333%; + padding: 0 0.625em 1.25em; + } + /* line 40, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .large-block-grid-12 > li:nth-of-type(n) { + clear: none; + } + /* line 41, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss */ + .large-block-grid-12 > li:nth-of-type(12n+1) { + clear: both; + } +} +/* line 111, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +p.lead { + font-size: 1.21875em; + line-height: 1.6; +} + +/* line 116, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +.subheader { + line-height: 1.4; + color: #6f6f6f; + font-weight: 300; + margin-top: 0.2em; + margin-bottom: 0.5em; +} + +/* Typography resets */ +/* line 127, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +div, +dl, +dt, +dd, +ul, +ol, +li, +h1, +h2, +h3, +h4, +h5, +h6, +pre, +form, +p, +blockquote, +th, +td { + margin: 0; + padding: 0; + direction: ltr; +} + +/* Default Link Styles */ +/* line 152, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +a { + color: #2ba6cb; + text-decoration: none; + line-height: inherit; +} +/* line 157, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +a:hover, a:focus { + color: #2795b6; +} +/* line 160, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +a img { + border: none; +} + +/* Default paragraph styles */ +/* line 164, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +p { + font-family: inherit; + font-weight: normal; + font-size: 1em; + line-height: 1.6; + margin-bottom: 1.25em; + text-rendering: optimizeLegibility; +} +/* line 174, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +p aside { + font-size: 0.875em; + line-height: 1.35; + font-style: italic; +} + +/* Default header styles */ +/* line 182, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +h1, h2, h3, h4, h5, h6 { + font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; + font-weight: bold; + font-style: normal; + color: #222; + text-rendering: optimizeLegibility; + margin-top: 0.2em; + margin-bottom: 0.5em; + line-height: 1.2125em; +} +/* line 192, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { + font-size: 60%; + color: #6f6f6f; + line-height: 0; +} + +/* line 199, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +h1 { + font-size: 2.125em; +} + +/* line 200, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +h2 { + font-size: 1.6875em; +} + +/* line 201, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +h3 { + font-size: 1.375em; +} + +/* line 202, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +h4 { + font-size: 1.125em; +} + +/* line 203, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +h5 { + font-size: 1.125em; +} + +/* line 204, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +h6 { + font-size: 1em; +} + +/* line 208, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +hr { + border: solid #ddd; + border-width: 1px 0 0; + clear: both; + margin: 1.25em 0 1.1875em; + height: 0; +} + +/* Helpful Typography Defaults */ +/* line 217, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +em, +i { + font-style: italic; + line-height: inherit; +} + +/* line 223, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +strong, +b { + font-weight: bold; + line-height: inherit; +} + +/* line 229, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +small { + font-size: 60%; + line-height: inherit; +} + +/* line 234, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +code { + font-family: Consolas, "Liberation Mono", Courier, monospace; + font-weight: bold; + color: #7f0a0c; +} + +/* Lists */ +/* line 241, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +ul, +ol, +dl { + font-size: 1em; + line-height: 1.6; + margin-bottom: 1.25em; + list-style-position: outside; + font-family: inherit; +} + +/* line 251, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +ul, ol { + margin-left: 0; +} +/* line 253, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +ul.no-bullet, ol.no-bullet { + margin-left: 0; +} + +/* Unordered Lists */ +/* line 259, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +ul li ul, +ul li ol { + margin-left: 1.25em; + margin-bottom: 0; + font-size: 1em; + /* Override nested font-size change */ +} +/* line 269, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +ul.square li ul, ul.circle li ul, ul.disc li ul { + list-style: inherit; +} +/* line 272, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +ul.square { + list-style-type: square; +} +/* line 273, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +ul.circle { + list-style-type: circle; +} +/* line 274, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +ul.disc { + list-style-type: disc; +} +/* line 275, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +ul.no-bullet { + list-style: none; +} + +/* Ordered Lists */ +/* line 281, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +ol li ul, +ol li ol { + margin-left: 1.25em; + margin-bottom: 0; +} + +/* Definition Lists */ +/* line 291, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +dl dt { + margin-bottom: 0.3em; + font-weight: bold; +} +/* line 295, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +dl dd { + margin-bottom: 0.75em; +} + +/* Abbreviations */ +/* line 299, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +abbr, +acronym { + text-transform: uppercase; + font-size: 90%; + color: #222; + border-bottom: 1px dotted #ddd; + cursor: help; +} + +/* line 307, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +abbr { + text-transform: none; +} + +/* Blockquotes */ +/* line 312, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +blockquote { + margin: 0 0 1.25em; + padding: 0.5625em 1.25em 0 1.1875em; + border-left: 1px solid #ddd; +} +/* line 317, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +blockquote cite { + display: block; + font-size: 0.8125em; + color: #555555; +} +/* line 321, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +blockquote cite:before { + content: "\2014 \0020"; +} +/* line 325, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +blockquote cite a, +blockquote cite a:visited { + color: #555555; +} + +/* line 331, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +blockquote, +blockquote p { + line-height: 1.6; + color: #6f6f6f; +} + +/* Microformats */ +/* line 338, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +.vcard { + display: inline-block; + margin: 0 0 1.25em 0; + border: 1px solid #ddd; + padding: 0.625em 0.75em; +} +/* line 344, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +.vcard li { + margin: 0; + display: block; +} +/* line 348, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +.vcard .fn { + font-weight: bold; + font-size: 0.9375em; +} + +/* line 355, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +.vevent .summary { + font-weight: bold; +} +/* line 357, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +.vevent abbr { + cursor: default; + text-decoration: none; + font-weight: bold; + border: none; + padding: 0 0.0625em; +} + +@media only screen and (min-width: 768px) { + /* line 368, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ + h1, h2, h3, h4, h5, h6 { + line-height: 1.4; + } + + /* line 369, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ + h1 { + font-size: 2.75em; + } + + /* line 370, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ + h2 { + font-size: 2.3125em; + } + + /* line 371, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ + h3 { + font-size: 1.6875em; + } + + /* line 372, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ + h4 { + font-size: 1.4375em; + } +} +/* + * Print styles. + * + * Inlined to avoid required HTTP connection: www.phpied.com/delay-loading-your-print-css/ + * Credit to Paul Irish and HTML5 Boilerplate (html5boilerplate.com) +*/ +/* line 383, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ +.print-only { + display: none !important; +} + +@media print { + /* line 385, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ + * { + background: transparent !important; + color: #000 !important; + /* Black prints faster: h5bp.com/s */ + box-shadow: none !important; + text-shadow: none !important; + } + + /* line 392, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ + a, + a:visited { + text-decoration: underline; + } + + /* line 394, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ + a[href]:after { + content: " (" attr(href) ")"; + } + + /* line 396, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ + abbr[title]:after { + content: " (" attr(title) ")"; + } + + /* line 399, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ + .ir a:after, + a[href^="javascript:"]:after, + a[href^="#"]:after { + content: ""; + } + + /* line 403, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + + /* line 409, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ + thead { + display: table-header-group; + /* h5bp.com/t */ + } + + /* line 411, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ + tr, + img { + page-break-inside: avoid; + } + + /* line 414, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ + img { + max-width: 100% !important; + } + + @page { + margin: 0.5cm; + } + /* line 418, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + + /* line 425, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ + h2, + h3 { + page-break-after: avoid; + } + + /* line 428, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ + .hide-on-print { + display: none !important; + } + + /* line 429, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ + .print-only { + display: block !important; + } + + /* line 430, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ + .hide-for-print { + display: none !important; + } + + /* line 431, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss */ + .show-for-print { + display: inherit !important; + } +} +/* line 171, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ +button, .button { + border-style: solid; + border-width: 1px; + cursor: pointer; + font-family: inherit; + font-weight: bold; + line-height: normal; + margin: 0 0 1.25em; + position: relative; + text-decoration: none; + text-align: center; + display: inline-block; + padding-top: 0.75em; + padding-right: 1.5em; + padding-bottom: 0.8125em; + padding-left: 1.5em; + font-size: 1em; + background-color: #2ba6cb; + border-color: #2284a1; + color: #fff; +} +/* line 121, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ +button:hover, button:focus, .button:hover, .button:focus { + background-color: #2284a1; +} +/* line 132, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ +button:hover, button:focus, .button:hover, .button:focus { + color: #fff; +} +/* line 176, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ +button.secondary, .button.secondary { + background-color: #e9e9e9; + border-color: #d0d0d0; + color: #333; +} +/* line 121, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ +button.secondary:hover, button.secondary:focus, .button.secondary:hover, .button.secondary:focus { + background-color: #d0d0d0; +} +/* line 127, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ +button.secondary:hover, button.secondary:focus, .button.secondary:hover, .button.secondary:focus { + color: #333; +} +/* line 177, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ +button.success, .button.success { + background-color: #5da423; + border-color: #457a1a; + color: #fff; +} +/* line 121, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ +button.success:hover, button.success:focus, .button.success:hover, .button.success:focus { + background-color: #457a1a; +} +/* line 132, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ +button.success:hover, button.success:focus, .button.success:hover, .button.success:focus { + color: #fff; +} +/* line 178, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ +button.alert, .button.alert { + background-color: #c60f13; + border-color: #970b0e; + color: #fff; +} +/* line 121, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ +button.alert:hover, button.alert:focus, .button.alert:hover, .button.alert:focus { + background-color: #970b0e; +} +/* line 132, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ +button.alert:hover, button.alert:focus, .button.alert:hover, .button.alert:focus { + color: #fff; +} +/* line 180, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ +button.large, .button.large { + padding-top: 1em; + padding-right: 2em; + padding-bottom: 1.0625em; + padding-left: 2em; + font-size: 1.25em; +} +/* line 181, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ +button.small, .button.small { + padding-top: 0.5625em; + padding-right: 1.125em; + padding-bottom: 0.625em; + padding-left: 1.125em; + font-size: 0.8125em; +} +/* line 182, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ +button.tiny, .button.tiny { + padding-top: 0.4375em; + padding-right: 0.875em; + padding-bottom: 0.5em; + padding-left: 0.875em; + font-size: 0.6875em; +} +/* line 183, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ +button.expand, .button.expand { + padding-right: 0; + padding-left: 0; + width: 100%; +} +/* line 185, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ +button.left-align, .button.left-align { + text-align: left; + text-indent: 0.75em; +} +/* line 186, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ +button.right-align, .button.right-align { + text-align: right; + padding-right: 0.75em; +} +/* line 188, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ +button.disabled, button[disabled], .button.disabled, .button[disabled] { + background-color: #2ba6cb; + border-color: #2284a1; + color: #fff; + cursor: default; + opacity: 0.6; + -webkit-box-shadow: none; + box-shadow: none; +} +/* line 121, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ +button.disabled:hover, button.disabled:focus, button[disabled]:hover, button[disabled]:focus, .button.disabled:hover, .button.disabled:focus, .button[disabled]:hover, .button[disabled]:focus { + background-color: #2284a1; +} +/* line 132, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ +button.disabled:hover, button.disabled:focus, button[disabled]:hover, button[disabled]:focus, .button.disabled:hover, .button.disabled:focus, .button[disabled]:hover, .button[disabled]:focus { + color: #fff; +} +/* line 145, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ +button.disabled:hover, button.disabled:focus, button[disabled]:hover, button[disabled]:focus, .button.disabled:hover, .button.disabled:focus, .button[disabled]:hover, .button[disabled]:focus { + background-color: #2ba6cb; +} +/* line 189, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ +button.disabled.secondary, button[disabled].secondary, .button.disabled.secondary, .button[disabled].secondary { + background-color: #e9e9e9; + border-color: #d0d0d0; + color: #333; + cursor: default; + opacity: 0.6; + -webkit-box-shadow: none; + box-shadow: none; +} +/* line 121, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ +button.disabled.secondary:hover, button.disabled.secondary:focus, button[disabled].secondary:hover, button[disabled].secondary:focus, .button.disabled.secondary:hover, .button.disabled.secondary:focus, .button[disabled].secondary:hover, .button[disabled].secondary:focus { + background-color: #d0d0d0; +} +/* line 127, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ +button.disabled.secondary:hover, button.disabled.secondary:focus, button[disabled].secondary:hover, button[disabled].secondary:focus, .button.disabled.secondary:hover, .button.disabled.secondary:focus, .button[disabled].secondary:hover, .button[disabled].secondary:focus { + color: #333; +} +/* line 145, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ +button.disabled.secondary:hover, button.disabled.secondary:focus, button[disabled].secondary:hover, button[disabled].secondary:focus, .button.disabled.secondary:hover, .button.disabled.secondary:focus, .button[disabled].secondary:hover, .button[disabled].secondary:focus { + background-color: #e9e9e9; +} +/* line 190, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ +button.disabled.success, button[disabled].success, .button.disabled.success, .button[disabled].success { + background-color: #5da423; + border-color: #457a1a; + color: #fff; + cursor: default; + opacity: 0.6; + -webkit-box-shadow: none; + box-shadow: none; +} +/* line 121, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ +button.disabled.success:hover, button.disabled.success:focus, button[disabled].success:hover, button[disabled].success:focus, .button.disabled.success:hover, .button.disabled.success:focus, .button[disabled].success:hover, .button[disabled].success:focus { + background-color: #457a1a; +} +/* line 132, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ +button.disabled.success:hover, button.disabled.success:focus, button[disabled].success:hover, button[disabled].success:focus, .button.disabled.success:hover, .button.disabled.success:focus, .button[disabled].success:hover, .button[disabled].success:focus { + color: #fff; +} +/* line 145, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ +button.disabled.success:hover, button.disabled.success:focus, button[disabled].success:hover, button[disabled].success:focus, .button.disabled.success:hover, .button.disabled.success:focus, .button[disabled].success:hover, .button[disabled].success:focus { + background-color: #5da423; +} +/* line 191, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ +button.disabled.alert, button[disabled].alert, .button.disabled.alert, .button[disabled].alert { + background-color: #c60f13; + border-color: #970b0e; + color: #fff; + cursor: default; + opacity: 0.6; + -webkit-box-shadow: none; + box-shadow: none; +} +/* line 121, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ +button.disabled.alert:hover, button.disabled.alert:focus, button[disabled].alert:hover, button[disabled].alert:focus, .button.disabled.alert:hover, .button.disabled.alert:focus, .button[disabled].alert:hover, .button[disabled].alert:focus { + background-color: #970b0e; +} +/* line 132, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ +button.disabled.alert:hover, button.disabled.alert:focus, button[disabled].alert:hover, button[disabled].alert:focus, .button.disabled.alert:hover, .button.disabled.alert:focus, .button[disabled].alert:hover, .button[disabled].alert:focus { + color: #fff; +} +/* line 145, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ +button.disabled.alert:hover, button.disabled.alert:focus, button[disabled].alert:hover, button[disabled].alert:focus, .button.disabled.alert:hover, .button.disabled.alert:focus, .button[disabled].alert:hover, .button[disabled].alert:focus { + background-color: #c60f13; +} + +/* line 196, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ +button, .button { + padding-top: 0.8125em; + padding-bottom: 0.75em; + -webkit-appearance: none; +} +/* line 198, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ +button.tiny, .button.tiny { + padding-top: 0.5em; + padding-bottom: 0.4375em; + -webkit-appearance: none; +} +/* line 199, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ +button.small, .button.small { + padding-top: 0.625em; + padding-bottom: 0.5625em; + -webkit-appearance: none; +} +/* line 200, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ +button.large, .button.large { + padding-top: 1.03125em; + padding-bottom: 1.03125em; + -webkit-appearance: none; +} + +@media only screen { + /* line 206, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ + button, .button { + -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5) inset; + box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5) inset; + -webkit-transition: background-color 300ms ease-out; + -moz-transition: background-color 300ms ease-out; + transition: background-color 300ms ease-out; + } + /* line 68, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss */ + button:active, .button:active { + -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2) inset; + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2) inset; + } + /* line 214, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ + button.radius, .button.radius { + -webkit-border-radius: 3px; + border-radius: 3px; + } + /* line 215, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ + button.round, .button.round { + -webkit-border-radius: 1000px; + border-radius: 1000px; + } +} +@media only screen and (min-width: 768px) { + /* line 223, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss */ + button, .button { + display: inline-block; + } +} +/* Standard Forms */ +/* line 264, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +form { + margin: 0 0 1em; +} + +/* Using forms within rows, we need to set some defaults */ +/* line 67, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +form .row .row { + margin: 0 -0.5em; +} +/* line 69, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +form .row .row .column, +form .row .row .columns { + padding: 0 0.5em; +} +/* line 73, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +form .row .row.collapse { + margin: 0; +} +/* line 75, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +form .row .row.collapse .column, +form .row .row.collapse .columns { + padding: 0; +} +/* line 77, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +form .row .row.collapse input { + -moz-border-radius-bottomright: 0; + -moz-border-radius-topright: 0; + -webkit-border-bottom-right-radius: 0; + -webkit-border-top-right-radius: 0; +} +/* line 86, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +form .row input.column, +form .row input.columns, +form .row textarea.column, +form .row textarea.columns { + padding-left: 0.5em; +} + +/* Label Styles */ +/* line 270, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +label { + font-size: 0.875em; + color: #4d4d4d; + cursor: pointer; + display: block; + font-weight: 500; + margin-bottom: 0.1875em; + /* Styles for required inputs */ +} +/* line 271, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +label.right { + float: none; + text-align: right; +} +/* line 272, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +label.inline { + margin: 0 0 1em 0; + padding: 0.625em 0; +} +/* line 274, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +label small { + text-transform: capitalize; + color: #666666; +} + +/* Attach elements to the beginning or end of an input */ +/* line 281, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +.prefix, +.postfix { + display: block; + position: relative; + z-index: 2; + text-align: center; + width: 100%; + padding-top: 0; + padding-bottom: 0; + border-style: solid; + border-width: 1px; + overflow: hidden; + font-size: 0.875em; + height: 2.3125em; + line-height: 2.3125em; +} + +/* Adjust padding, alignment and radius if pre/post element is a button */ +/* line 285, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +.postfix.button { + padding-left: 0; + padding-right: 0; + padding-top: 0; + padding-bottom: 0; + text-align: center; + line-height: 2.125em; +} + +/* line 286, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +.prefix.button { + padding-left: 0; + padding-right: 0; + padding-top: 0; + padding-bottom: 0; + text-align: center; + line-height: 2.125em; +} + +/* line 288, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +.prefix.button.radius { + -webkit-border-radius: 0; + border-radius: 0; + -moz-border-radius-bottomleft: 3px; + -moz-border-radius-topleft: 3px; + -webkit-border-bottom-left-radius: 3px; + -webkit-border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} + +/* line 289, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +.postfix.button.radius { + -webkit-border-radius: 0; + border-radius: 0; + -moz-border-radius-topright: 3px; + -moz-border-radius-bottomright: 3px; + -webkit-border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} + +/* line 290, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +.prefix.button.round { + -webkit-border-radius: 0; + border-radius: 0; + -moz-border-radius-bottomleft: 1000px; + -moz-border-radius-topleft: 1000px; + -webkit-border-bottom-left-radius: 1000px; + -webkit-border-top-left-radius: 1000px; + border-bottom-left-radius: 1000px; + border-top-left-radius: 1000px; +} + +/* line 291, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +.postfix.button.round { + -webkit-border-radius: 0; + border-radius: 0; + -moz-border-radius-topright: 1000px; + -moz-border-radius-bottomright: 1000px; + -webkit-border-top-right-radius: 1000px; + -webkit-border-bottom-right-radius: 1000px; + border-top-right-radius: 1000px; + border-bottom-right-radius: 1000px; +} + +/* Separate prefix and postfix styles when on span or label so buttons keep their own */ +/* line 294, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +span.prefix, label.prefix { + background: #f2f2f2; + border-color: #d9d9d9; + border-right: none; + color: #333; +} +/* line 295, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +span.prefix.radius, label.prefix.radius { + -webkit-border-radius: 0; + border-radius: 0; + -moz-border-radius-bottomleft: 3px; + -moz-border-radius-topleft: 3px; + -webkit-border-bottom-left-radius: 3px; + -webkit-border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} + +/* line 297, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +span.postfix, label.postfix { + background: #f2f2f2; + border-color: #cccccc; + border-left: none; + color: #333; +} +/* line 298, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +span.postfix.radius, label.postfix.radius { + -webkit-border-radius: 0; + border-radius: 0; + -moz-border-radius-topright: 3px; + -moz-border-radius-bottomright: 3px; + -webkit-border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} + +/* Input groups will automatically style first and last elements of the group */ +/* line 304, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +.input-group.radius > *:first-child, .input-group.radius > *:first-child * { + -moz-border-radius-bottomleft: 3px; + -moz-border-radius-topleft: 3px; + -webkit-border-bottom-left-radius: 3px; + -webkit-border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} +/* line 307, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +.input-group.radius > *:last-child, .input-group.radius > *:last-child * { + -moz-border-radius-topright: 3px; + -moz-border-radius-bottomright: 3px; + -webkit-border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} +/* line 312, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +.input-group.round > *:first-child, .input-group.round > *:first-child * { + -moz-border-radius-bottomleft: 1000px; + -moz-border-radius-topleft: 1000px; + -webkit-border-bottom-left-radius: 1000px; + -webkit-border-top-left-radius: 1000px; + border-bottom-left-radius: 1000px; + border-top-left-radius: 1000px; +} +/* line 315, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +.input-group.round > *:last-child, .input-group.round > *:last-child * { + -moz-border-radius-topright: 1000px; + -moz-border-radius-bottomright: 1000px; + -webkit-border-top-right-radius: 1000px; + -webkit-border-bottom-right-radius: 1000px; + border-top-right-radius: 1000px; + border-bottom-right-radius: 1000px; +} + +/* We use this to get basic styling on all basic form elements */ +/* line 322, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +input[type="text"], +input[type="password"], +input[type="date"], +input[type="datetime"], +input[type="datetime-local"], +input[type="month"], +input[type="week"], +input[type="email"], +input[type="number"], +input[type="search"], +input[type="tel"], +input[type="time"], +input[type="url"], +textarea { + -webkit-appearance: none; + -webkit-border-radius: 0; + border-radius: 0; + background-color: #fff; + font-family: inherit; + border: 1px solid #cccccc; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + color: rgba(0, 0, 0, 0.75); + display: block; + font-size: 0.875em; + margin: 0 0 1em 0; + padding: 0.5em; + height: 2.3125em; + width: 100%; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-transition: -webkit-box-shadow 0.45s, border-color 0.45s ease-in-out; + -moz-transition: -moz-box-shadow 0.45s, border-color 0.45s ease-in-out; + transition: box-shadow 0.45s, border-color 0.45s ease-in-out; +} +/* line 134, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss */ +input[type="text"]:focus, +input[type="password"]:focus, +input[type="date"]:focus, +input[type="datetime"]:focus, +input[type="datetime-local"]:focus, +input[type="month"]:focus, +input[type="week"]:focus, +input[type="email"]:focus, +input[type="number"]:focus, +input[type="search"]:focus, +input[type="tel"]:focus, +input[type="time"]:focus, +input[type="url"]:focus, +textarea:focus { + -webkit-box-shadow: 0 0 5px #999999; + -moz-box-shadow: 0 0 5px #999999; + box-shadow: 0 0 5px #999999; + border-color: #999999; +} +/* line 113, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +input[type="text"]:focus, +input[type="password"]:focus, +input[type="date"]:focus, +input[type="datetime"]:focus, +input[type="datetime-local"]:focus, +input[type="month"]:focus, +input[type="week"]:focus, +input[type="email"]:focus, +input[type="number"]:focus, +input[type="search"]:focus, +input[type="tel"]:focus, +input[type="time"]:focus, +input[type="url"]:focus, +textarea:focus { + background: #fafafa; + border-color: #999999; + outline: none; +} +/* line 120, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +input[type="text"][disabled], +input[type="password"][disabled], +input[type="date"][disabled], +input[type="datetime"][disabled], +input[type="datetime-local"][disabled], +input[type="month"][disabled], +input[type="week"][disabled], +input[type="email"][disabled], +input[type="number"][disabled], +input[type="search"][disabled], +input[type="tel"][disabled], +input[type="time"][disabled], +input[type="url"][disabled], +textarea[disabled] { + background-color: #ddd; +} + +/* Adjust margin for form elements below */ +/* line 346, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +input[type="file"], +input[type="checkbox"], +input[type="radio"], +select { + margin: 0 0 1em 0; +} + +/* Normalize file input width */ +/* line 354, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +input[type="file"] { + width: 100%; +} + +/* We add basic fieldset styling */ +/* line 359, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +fieldset { + border: solid 1px #ddd; + padding: 1.25em; + margin: 1.125em 0; +} +/* line 221, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +fieldset legend { + font-weight: bold; + background: #fff; + padding: 0 0.1875em; + margin: 0; + margin-left: -0.1875em; +} + +/* Error Handling */ +/* line 366, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +[data-abide] .error small.error, [data-abide] span.error, [data-abide] small.error { + display: block; + padding: 0.375em 0.25em; + margin-top: 0; + margin-bottom: 1em; + font-size: 0.75em; + font-weight: bold; + background: #c60f13; + color: #fff; +} +/* line 369, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +[data-abide] span.error, [data-abide] small.error { + display: none; +} + +/* line 371, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +span.error, small.error { + display: block; + padding: 0.375em 0.25em; + margin-top: 0; + margin-bottom: 1em; + font-size: 0.75em; + font-weight: bold; + background: #c60f13; + color: #fff; +} + +/* line 375, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +.error input, +.error textarea, +.error select { + border-color: #c60f13; + background-color: rgba(198, 15, 19, 0.1); + margin-bottom: 0; +} +/* line 236, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +.error input:focus, +.error textarea:focus, +.error select:focus { + background: #fafafa; + border-color: #999999; +} +/* line 382, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +.error label, +.error label.error { + color: #c60f13; +} +/* line 387, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +.error > small, +.error small.error { + display: block; + padding: 0.375em 0.25em; + margin-top: 0; + margin-bottom: 1em; + font-size: 0.75em; + font-weight: bold; + background: #c60f13; + color: #fff; +} +/* line 392, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +.error span.error-message { + display: block; +} + +/* line 397, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +input.error, +textarea.error { + border-color: #c60f13; + background-color: rgba(198, 15, 19, 0.1); + margin-bottom: 0; +} +/* line 236, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +input.error:focus, +textarea.error:focus { + background: #fafafa; + border-color: #999999; +} + +/* line 403, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +.error select { + border-color: #c60f13; + background-color: rgba(198, 15, 19, 0.1); +} +/* line 236, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +.error select:focus { + background: #fafafa; + border-color: #999999; +} + +/* line 407, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +label.error { + color: #c60f13; +} + +/* Button Groups */ +/* line 72, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_button-groups.scss */ +.button-group { + list-style: none; + margin: 0; + *zoom: 1; +} +/* line 121, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss */ +.button-group:before, .button-group:after { + content: " "; + display: table; +} +/* line 122, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss */ +.button-group:after { + clear: both; +} +/* line 74, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_button-groups.scss */ +.button-group > * { + margin: 0 0 0 -1px; + float: left; +} +/* line 35, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_button-groups.scss */ +.button-group > *:first-child { + margin-left: 0; +} +/* line 50, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_button-groups.scss */ +.button-group.radius > *:first-child, .button-group.radius > *:first-child > a, .button-group.radius > *:first-child > button, .button-group.radius > *:first-child > .button { + -moz-border-radius-bottomleft: 3px; + -moz-border-radius-topleft: 3px; + -webkit-border-bottom-left-radius: 3px; + -webkit-border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} +/* line 54, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_button-groups.scss */ +.button-group.radius > *:last-child, .button-group.radius > *:last-child > a, .button-group.radius > *:last-child > button, .button-group.radius > *:last-child > .button { + -moz-border-radius-topright: 3px; + -moz-border-radius-bottomright: 3px; + -webkit-border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} +/* line 50, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_button-groups.scss */ +.button-group.round > *:first-child, .button-group.round > *:first-child > a, .button-group.round > *:first-child > button, .button-group.round > *:first-child > .button { + -moz-border-radius-bottomleft: 1000px; + -moz-border-radius-topleft: 1000px; + -webkit-border-bottom-left-radius: 1000px; + -webkit-border-top-left-radius: 1000px; + border-bottom-left-radius: 1000px; + border-top-left-radius: 1000px; +} +/* line 54, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_button-groups.scss */ +.button-group.round > *:last-child, .button-group.round > *:last-child > a, .button-group.round > *:last-child > button, .button-group.round > *:last-child > .button { + -moz-border-radius-topright: 1000px; + -moz-border-radius-bottomright: 1000px; + -webkit-border-top-right-radius: 1000px; + -webkit-border-bottom-right-radius: 1000px; + border-top-right-radius: 1000px; + border-bottom-right-radius: 1000px; +} +/* line 80, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_button-groups.scss */ +.button-group.even-2 li { + width: 50%; +} +/* line 63, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_button-groups.scss */ +.button-group.even-2 li button, .button-group.even-2 li .button { + width: 100%; +} +/* line 80, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_button-groups.scss */ +.button-group.even-3 li { + width: 33.33333%; +} +/* line 63, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_button-groups.scss */ +.button-group.even-3 li button, .button-group.even-3 li .button { + width: 100%; +} +/* line 80, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_button-groups.scss */ +.button-group.even-4 li { + width: 25%; +} +/* line 63, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_button-groups.scss */ +.button-group.even-4 li button, .button-group.even-4 li .button { + width: 100%; +} +/* line 80, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_button-groups.scss */ +.button-group.even-5 li { + width: 20%; +} +/* line 63, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_button-groups.scss */ +.button-group.even-5 li button, .button-group.even-5 li .button { + width: 100%; +} +/* line 80, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_button-groups.scss */ +.button-group.even-6 li { + width: 16.66667%; +} +/* line 63, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_button-groups.scss */ +.button-group.even-6 li button, .button-group.even-6 li .button { + width: 100%; +} +/* line 80, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_button-groups.scss */ +.button-group.even-7 li { + width: 14.28571%; +} +/* line 63, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_button-groups.scss */ +.button-group.even-7 li button, .button-group.even-7 li .button { + width: 100%; +} +/* line 80, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_button-groups.scss */ +.button-group.even-8 li { + width: 12.5%; +} +/* line 63, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_button-groups.scss */ +.button-group.even-8 li button, .button-group.even-8 li .button { + width: 100%; +} + +/* line 84, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_button-groups.scss */ +.button-bar { + *zoom: 1; +} +/* line 121, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss */ +.button-bar:before, .button-bar:after { + content: " "; + display: table; +} +/* line 122, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss */ +.button-bar:after { + clear: both; +} +/* line 86, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_button-groups.scss */ +.button-bar .button-group { + float: left; + margin-right: 0.625em; +} +/* line 23, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_button-groups.scss */ +.button-bar .button-group div { + overflow: hidden; +} + +/* Dropdown Button */ +/* line 108, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_dropdown-buttons.scss */ +.dropdown.button { + position: relative; + padding-right: 3.1875em; +} +/* line 46, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_dropdown-buttons.scss */ +.dropdown.button:before { + position: absolute; + content: ""; + width: 0; + height: 0; + display: block; + border-style: solid; + border-color: #fff transparent transparent transparent; + top: 50%; +} +/* line 81, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_dropdown-buttons.scss */ +.dropdown.button:before { + border-width: 0.5625em; + right: 1.5em; + margin-top: -0.25em; +} +/* line 100, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_dropdown-buttons.scss */ +.dropdown.button:before { + border-color: #fff transparent transparent transparent; +} +/* line 109, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_dropdown-buttons.scss */ +.dropdown.button.tiny { + padding-right: 2.1875em; +} +/* line 61, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_dropdown-buttons.scss */ +.dropdown.button.tiny:before { + border-width: 0.4375em; + right: 0.875em; + margin-top: -0.15625em; +} +/* line 100, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_dropdown-buttons.scss */ +.dropdown.button.tiny:before { + border-color: #fff transparent transparent transparent; +} +/* line 110, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_dropdown-buttons.scss */ +.dropdown.button.small { + padding-right: 2.8125em; +} +/* line 71, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_dropdown-buttons.scss */ +.dropdown.button.small:before { + border-width: 0.5625em; + right: 1.125em; + margin-top: -0.21875em; +} +/* line 100, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_dropdown-buttons.scss */ +.dropdown.button.small:before { + border-color: #fff transparent transparent transparent; +} +/* line 111, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_dropdown-buttons.scss */ +.dropdown.button.large { + padding-right: 4em; +} +/* line 91, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_dropdown-buttons.scss */ +.dropdown.button.large:before { + border-width: 0.625em; + right: 1.75em; + margin-top: -0.3125em; +} +/* line 100, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_dropdown-buttons.scss */ +.dropdown.button.large:before { + border-color: #fff transparent transparent transparent; +} +/* line 112, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_dropdown-buttons.scss */ +.dropdown.button.secondary:before { + border-color: #333 transparent transparent transparent; +} + +/* Split Buttons */ +/* line 150, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_split-buttons.scss */ +.split.button { + position: relative; + padding-right: 4.8em; +} +/* line 53, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_split-buttons.scss */ +.split.button span { + display: block; + height: 100%; + position: absolute; + right: 0; + top: 0; + border-left: solid 1px; +} +/* line 62, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_split-buttons.scss */ +.split.button span:before { + position: absolute; + content: ""; + width: 0; + height: 0; + display: block; + border-style: inset; + left: 50%; +} +/* line 73, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_split-buttons.scss */ +.split.button span:active { + background-color: rgba(0, 0, 0, 0.1); +} +/* line 79, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_split-buttons.scss */ +.split.button span { + border-left-color: #1e728c; +} +/* line 116, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_split-buttons.scss */ +.split.button span { + width: 3em; +} +/* line 117, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_split-buttons.scss */ +.split.button span:before { + border-top-style: solid; + border-width: 0.5625em; + top: 1.125em; + margin-left: -0.5625em; +} +/* line 142, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_split-buttons.scss */ +.split.button span:before { + border-color: #fff transparent transparent transparent; +} +/* line 79, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_split-buttons.scss */ +.split.button.secondary span { + border-left-color: #c3c3c3; +} +/* line 142, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_split-buttons.scss */ +.split.button.secondary span:before { + border-color: #fff transparent transparent transparent; +} +/* line 79, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_split-buttons.scss */ +.split.button.alert span { + border-left-color: #7f0a0c; +} +/* line 79, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_split-buttons.scss */ +.split.button.success span { + border-left-color: #396516; +} +/* line 156, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_split-buttons.scss */ +.split.button.tiny { + padding-right: 3.9375em; +} +/* line 88, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_split-buttons.scss */ +.split.button.tiny span { + width: 2.84375em; +} +/* line 89, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_split-buttons.scss */ +.split.button.tiny span:before { + border-top-style: solid; + border-width: 0.4375em; + top: 0.875em; + margin-left: -0.3125em; +} +/* line 157, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_split-buttons.scss */ +.split.button.small { + padding-right: 3.9375em; +} +/* line 102, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_split-buttons.scss */ +.split.button.small span { + width: 2.8125em; +} +/* line 103, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_split-buttons.scss */ +.split.button.small span:before { + border-top-style: solid; + border-width: 0.5625em; + top: 0.84375em; + margin-left: -0.5625em; +} +/* line 158, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_split-buttons.scss */ +.split.button.large { + padding-right: 6em; +} +/* line 130, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_split-buttons.scss */ +.split.button.large span { + width: 3.75em; +} +/* line 131, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_split-buttons.scss */ +.split.button.large span:before { + border-top-style: solid; + border-width: 0.625em; + top: 1.3125em; + margin-left: -0.5625em; +} +/* line 159, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_split-buttons.scss */ +.split.button.expand { + padding-left: 2em; +} +/* line 142, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_split-buttons.scss */ +.split.button.secondary span:before { + border-color: #333 transparent transparent transparent; +} +/* line 163, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_split-buttons.scss */ +.split.button.radius span { + -moz-border-radius-topright: 3px; + -moz-border-radius-bottomright: 3px; + -webkit-border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} +/* line 164, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_split-buttons.scss */ +.split.button.round span { + -moz-border-radius-topright: 1000px; + -moz-border-radius-bottomright: 1000px; + -webkit-border-top-right-radius: 1000px; + -webkit-border-bottom-right-radius: 1000px; + border-top-right-radius: 1000px; + border-bottom-right-radius: 1000px; +} + +/* Flex Video */ +/* line 44, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_flex-video.scss */ +.flex-video { + position: relative; + padding-top: 1.5625em; + padding-bottom: 67.5%; + height: 0; + margin-bottom: 1em; + overflow: hidden; +} +/* line 26, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_flex-video.scss */ +.flex-video.widescreen { + padding-bottom: 57.25%; +} +/* line 27, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_flex-video.scss */ +.flex-video.vimeo { + padding-top: 0; +} +/* line 29, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_flex-video.scss */ +.flex-video iframe, +.flex-video object, +.flex-video embed, +.flex-video video { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +/* Sections */ +/* line 281, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +[data-section=''], [data-section='auto'], .section-container.auto, +[data-section='vertical-tabs'], .section-container.vertical-tabs, +[data-section='vertical-nav'], .section-container.vertical-nav, +[data-section='horizontal-nav'], .section-container.horizontal-nav, +[data-section='accordion'], .section-container.accordion { + width: 100%; + position: relative; + display: block; + margin-bottom: 1.25em; +} +/* line 55, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +[data-section=''][data-section-small-style], [data-section='auto'][data-section-small-style], .section-container.auto[data-section-small-style], +[data-section='vertical-tabs'][data-section-small-style], .section-container.vertical-tabs[data-section-small-style], +[data-section='vertical-nav'][data-section-small-style], .section-container.vertical-nav[data-section-small-style], +[data-section='horizontal-nav'][data-section-small-style], .section-container.horizontal-nav[data-section-small-style], +[data-section='accordion'][data-section-small-style], .section-container.accordion[data-section-small-style] { + width: 100% !important; +} +/* line 58, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +[data-section=''][data-section-small-style] > [data-section-region], [data-section=''][data-section-small-style] > section, [data-section=''][data-section-small-style] > .section, [data-section='auto'][data-section-small-style] > [data-section-region], [data-section='auto'][data-section-small-style] > section, [data-section='auto'][data-section-small-style] > .section, .section-container.auto[data-section-small-style] > [data-section-region], .section-container.auto[data-section-small-style] > section, .section-container.auto[data-section-small-style] > .section, +[data-section='vertical-tabs'][data-section-small-style] > [data-section-region], +[data-section='vertical-tabs'][data-section-small-style] > section, +[data-section='vertical-tabs'][data-section-small-style] > .section, .section-container.vertical-tabs[data-section-small-style] > [data-section-region], .section-container.vertical-tabs[data-section-small-style] > section, .section-container.vertical-tabs[data-section-small-style] > .section, +[data-section='vertical-nav'][data-section-small-style] > [data-section-region], +[data-section='vertical-nav'][data-section-small-style] > section, +[data-section='vertical-nav'][data-section-small-style] > .section, .section-container.vertical-nav[data-section-small-style] > [data-section-region], .section-container.vertical-nav[data-section-small-style] > section, .section-container.vertical-nav[data-section-small-style] > .section, +[data-section='horizontal-nav'][data-section-small-style] > [data-section-region], +[data-section='horizontal-nav'][data-section-small-style] > section, +[data-section='horizontal-nav'][data-section-small-style] > .section, .section-container.horizontal-nav[data-section-small-style] > [data-section-region], .section-container.horizontal-nav[data-section-small-style] > section, .section-container.horizontal-nav[data-section-small-style] > .section, +[data-section='accordion'][data-section-small-style] > [data-section-region], +[data-section='accordion'][data-section-small-style] > section, +[data-section='accordion'][data-section-small-style] > .section, .section-container.accordion[data-section-small-style] > [data-section-region], .section-container.accordion[data-section-small-style] > section, .section-container.accordion[data-section-small-style] > .section { + padding: 0 !important; + margin: 0 !important; +} +/* line 61, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +[data-section=''][data-section-small-style] > [data-section-region] > [data-section-title], [data-section=''][data-section-small-style] > [data-section-region] > .title, [data-section=''][data-section-small-style] > section > [data-section-title], [data-section=''][data-section-small-style] > section > .title, [data-section=''][data-section-small-style] > .section > [data-section-title], [data-section=''][data-section-small-style] > .section > .title, [data-section='auto'][data-section-small-style] > [data-section-region] > [data-section-title], [data-section='auto'][data-section-small-style] > [data-section-region] > .title, [data-section='auto'][data-section-small-style] > section > [data-section-title], [data-section='auto'][data-section-small-style] > section > .title, [data-section='auto'][data-section-small-style] > .section > [data-section-title], [data-section='auto'][data-section-small-style] > .section > .title, .section-container.auto[data-section-small-style] > [data-section-region] > [data-section-title], .section-container.auto[data-section-small-style] > [data-section-region] > .title, .section-container.auto[data-section-small-style] > section > [data-section-title], .section-container.auto[data-section-small-style] > section > .title, .section-container.auto[data-section-small-style] > .section > [data-section-title], .section-container.auto[data-section-small-style] > .section > .title, +[data-section='vertical-tabs'][data-section-small-style] > [data-section-region] > [data-section-title], +[data-section='vertical-tabs'][data-section-small-style] > [data-section-region] > .title, +[data-section='vertical-tabs'][data-section-small-style] > section > [data-section-title], +[data-section='vertical-tabs'][data-section-small-style] > section > .title, +[data-section='vertical-tabs'][data-section-small-style] > .section > [data-section-title], +[data-section='vertical-tabs'][data-section-small-style] > .section > .title, .section-container.vertical-tabs[data-section-small-style] > [data-section-region] > [data-section-title], .section-container.vertical-tabs[data-section-small-style] > [data-section-region] > .title, .section-container.vertical-tabs[data-section-small-style] > section > [data-section-title], .section-container.vertical-tabs[data-section-small-style] > section > .title, .section-container.vertical-tabs[data-section-small-style] > .section > [data-section-title], .section-container.vertical-tabs[data-section-small-style] > .section > .title, +[data-section='vertical-nav'][data-section-small-style] > [data-section-region] > [data-section-title], +[data-section='vertical-nav'][data-section-small-style] > [data-section-region] > .title, +[data-section='vertical-nav'][data-section-small-style] > section > [data-section-title], +[data-section='vertical-nav'][data-section-small-style] > section > .title, +[data-section='vertical-nav'][data-section-small-style] > .section > [data-section-title], +[data-section='vertical-nav'][data-section-small-style] > .section > .title, .section-container.vertical-nav[data-section-small-style] > [data-section-region] > [data-section-title], .section-container.vertical-nav[data-section-small-style] > [data-section-region] > .title, .section-container.vertical-nav[data-section-small-style] > section > [data-section-title], .section-container.vertical-nav[data-section-small-style] > section > .title, .section-container.vertical-nav[data-section-small-style] > .section > [data-section-title], .section-container.vertical-nav[data-section-small-style] > .section > .title, +[data-section='horizontal-nav'][data-section-small-style] > [data-section-region] > [data-section-title], +[data-section='horizontal-nav'][data-section-small-style] > [data-section-region] > .title, +[data-section='horizontal-nav'][data-section-small-style] > section > [data-section-title], +[data-section='horizontal-nav'][data-section-small-style] > section > .title, +[data-section='horizontal-nav'][data-section-small-style] > .section > [data-section-title], +[data-section='horizontal-nav'][data-section-small-style] > .section > .title, .section-container.horizontal-nav[data-section-small-style] > [data-section-region] > [data-section-title], .section-container.horizontal-nav[data-section-small-style] > [data-section-region] > .title, .section-container.horizontal-nav[data-section-small-style] > section > [data-section-title], .section-container.horizontal-nav[data-section-small-style] > section > .title, .section-container.horizontal-nav[data-section-small-style] > .section > [data-section-title], .section-container.horizontal-nav[data-section-small-style] > .section > .title, +[data-section='accordion'][data-section-small-style] > [data-section-region] > [data-section-title], +[data-section='accordion'][data-section-small-style] > [data-section-region] > .title, +[data-section='accordion'][data-section-small-style] > section > [data-section-title], +[data-section='accordion'][data-section-small-style] > section > .title, +[data-section='accordion'][data-section-small-style] > .section > [data-section-title], +[data-section='accordion'][data-section-small-style] > .section > .title, .section-container.accordion[data-section-small-style] > [data-section-region] > [data-section-title], .section-container.accordion[data-section-small-style] > [data-section-region] > .title, .section-container.accordion[data-section-small-style] > section > [data-section-title], .section-container.accordion[data-section-small-style] > section > .title, .section-container.accordion[data-section-small-style] > .section > [data-section-title], .section-container.accordion[data-section-small-style] > .section > .title { + width: 100% !important; +} +/* line 287, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +[data-section=''] > section, [data-section=''] > .section, [data-section=''] > [data-section-region], [data-section='auto'] > section, [data-section='auto'] > .section, [data-section='auto'] > [data-section-region], .section-container.auto > section, .section-container.auto > .section, .section-container.auto > [data-section-region], +[data-section='vertical-tabs'] > section, +[data-section='vertical-tabs'] > .section, +[data-section='vertical-tabs'] > [data-section-region], .section-container.vertical-tabs > section, .section-container.vertical-tabs > .section, .section-container.vertical-tabs > [data-section-region], +[data-section='vertical-nav'] > section, +[data-section='vertical-nav'] > .section, +[data-section='vertical-nav'] > [data-section-region], .section-container.vertical-nav > section, .section-container.vertical-nav > .section, .section-container.vertical-nav > [data-section-region], +[data-section='horizontal-nav'] > section, +[data-section='horizontal-nav'] > .section, +[data-section='horizontal-nav'] > [data-section-region], .section-container.horizontal-nav > section, .section-container.horizontal-nav > .section, .section-container.horizontal-nav > [data-section-region], +[data-section='accordion'] > section, +[data-section='accordion'] > .section, +[data-section='accordion'] > [data-section-region], .section-container.accordion > section, .section-container.accordion > .section, .section-container.accordion > [data-section-region] { + margin: 0; +} +/* line 102, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +[data-section=''] > section > [data-section-title], [data-section=''] > section > .title, [data-section=''] > .section > [data-section-title], [data-section=''] > .section > .title, [data-section=''] > [data-section-region] > [data-section-title], [data-section=''] > [data-section-region] > .title, [data-section='auto'] > section > [data-section-title], [data-section='auto'] > section > .title, [data-section='auto'] > .section > [data-section-title], [data-section='auto'] > .section > .title, [data-section='auto'] > [data-section-region] > [data-section-title], [data-section='auto'] > [data-section-region] > .title, .section-container.auto > section > [data-section-title], .section-container.auto > section > .title, .section-container.auto > .section > [data-section-title], .section-container.auto > .section > .title, .section-container.auto > [data-section-region] > [data-section-title], .section-container.auto > [data-section-region] > .title, +[data-section='vertical-tabs'] > section > [data-section-title], +[data-section='vertical-tabs'] > section > .title, +[data-section='vertical-tabs'] > .section > [data-section-title], +[data-section='vertical-tabs'] > .section > .title, +[data-section='vertical-tabs'] > [data-section-region] > [data-section-title], +[data-section='vertical-tabs'] > [data-section-region] > .title, .section-container.vertical-tabs > section > [data-section-title], .section-container.vertical-tabs > section > .title, .section-container.vertical-tabs > .section > [data-section-title], .section-container.vertical-tabs > .section > .title, .section-container.vertical-tabs > [data-section-region] > [data-section-title], .section-container.vertical-tabs > [data-section-region] > .title, +[data-section='vertical-nav'] > section > [data-section-title], +[data-section='vertical-nav'] > section > .title, +[data-section='vertical-nav'] > .section > [data-section-title], +[data-section='vertical-nav'] > .section > .title, +[data-section='vertical-nav'] > [data-section-region] > [data-section-title], +[data-section='vertical-nav'] > [data-section-region] > .title, .section-container.vertical-nav > section > [data-section-title], .section-container.vertical-nav > section > .title, .section-container.vertical-nav > .section > [data-section-title], .section-container.vertical-nav > .section > .title, .section-container.vertical-nav > [data-section-region] > [data-section-title], .section-container.vertical-nav > [data-section-region] > .title, +[data-section='horizontal-nav'] > section > [data-section-title], +[data-section='horizontal-nav'] > section > .title, +[data-section='horizontal-nav'] > .section > [data-section-title], +[data-section='horizontal-nav'] > .section > .title, +[data-section='horizontal-nav'] > [data-section-region] > [data-section-title], +[data-section='horizontal-nav'] > [data-section-region] > .title, .section-container.horizontal-nav > section > [data-section-title], .section-container.horizontal-nav > section > .title, .section-container.horizontal-nav > .section > [data-section-title], .section-container.horizontal-nav > .section > .title, .section-container.horizontal-nav > [data-section-region] > [data-section-title], .section-container.horizontal-nav > [data-section-region] > .title, +[data-section='accordion'] > section > [data-section-title], +[data-section='accordion'] > section > .title, +[data-section='accordion'] > .section > [data-section-title], +[data-section='accordion'] > .section > .title, +[data-section='accordion'] > [data-section-region] > [data-section-title], +[data-section='accordion'] > [data-section-region] > .title, .section-container.accordion > section > [data-section-title], .section-container.accordion > section > .title, .section-container.accordion > .section > [data-section-title], .section-container.accordion > .section > .title, .section-container.accordion > [data-section-region] > [data-section-title], .section-container.accordion > [data-section-region] > .title { + margin-bottom: 0; +} +/* line 104, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +[data-section=''] > section > [data-section-title] a, [data-section=''] > section > .title a, [data-section=''] > .section > [data-section-title] a, [data-section=''] > .section > .title a, [data-section=''] > [data-section-region] > [data-section-title] a, [data-section=''] > [data-section-region] > .title a, [data-section='auto'] > section > [data-section-title] a, [data-section='auto'] > section > .title a, [data-section='auto'] > .section > [data-section-title] a, [data-section='auto'] > .section > .title a, [data-section='auto'] > [data-section-region] > [data-section-title] a, [data-section='auto'] > [data-section-region] > .title a, .section-container.auto > section > [data-section-title] a, .section-container.auto > section > .title a, .section-container.auto > .section > [data-section-title] a, .section-container.auto > .section > .title a, .section-container.auto > [data-section-region] > [data-section-title] a, .section-container.auto > [data-section-region] > .title a, +[data-section='vertical-tabs'] > section > [data-section-title] a, +[data-section='vertical-tabs'] > section > .title a, +[data-section='vertical-tabs'] > .section > [data-section-title] a, +[data-section='vertical-tabs'] > .section > .title a, +[data-section='vertical-tabs'] > [data-section-region] > [data-section-title] a, +[data-section='vertical-tabs'] > [data-section-region] > .title a, .section-container.vertical-tabs > section > [data-section-title] a, .section-container.vertical-tabs > section > .title a, .section-container.vertical-tabs > .section > [data-section-title] a, .section-container.vertical-tabs > .section > .title a, .section-container.vertical-tabs > [data-section-region] > [data-section-title] a, .section-container.vertical-tabs > [data-section-region] > .title a, +[data-section='vertical-nav'] > section > [data-section-title] a, +[data-section='vertical-nav'] > section > .title a, +[data-section='vertical-nav'] > .section > [data-section-title] a, +[data-section='vertical-nav'] > .section > .title a, +[data-section='vertical-nav'] > [data-section-region] > [data-section-title] a, +[data-section='vertical-nav'] > [data-section-region] > .title a, .section-container.vertical-nav > section > [data-section-title] a, .section-container.vertical-nav > section > .title a, .section-container.vertical-nav > .section > [data-section-title] a, .section-container.vertical-nav > .section > .title a, .section-container.vertical-nav > [data-section-region] > [data-section-title] a, .section-container.vertical-nav > [data-section-region] > .title a, +[data-section='horizontal-nav'] > section > [data-section-title] a, +[data-section='horizontal-nav'] > section > .title a, +[data-section='horizontal-nav'] > .section > [data-section-title] a, +[data-section='horizontal-nav'] > .section > .title a, +[data-section='horizontal-nav'] > [data-section-region] > [data-section-title] a, +[data-section='horizontal-nav'] > [data-section-region] > .title a, .section-container.horizontal-nav > section > [data-section-title] a, .section-container.horizontal-nav > section > .title a, .section-container.horizontal-nav > .section > [data-section-title] a, .section-container.horizontal-nav > .section > .title a, .section-container.horizontal-nav > [data-section-region] > [data-section-title] a, .section-container.horizontal-nav > [data-section-region] > .title a, +[data-section='accordion'] > section > [data-section-title] a, +[data-section='accordion'] > section > .title a, +[data-section='accordion'] > .section > [data-section-title] a, +[data-section='accordion'] > .section > .title a, +[data-section='accordion'] > [data-section-region] > [data-section-title] a, +[data-section='accordion'] > [data-section-region] > .title a, .section-container.accordion > section > [data-section-title] a, .section-container.accordion > section > .title a, .section-container.accordion > .section > [data-section-title] a, .section-container.accordion > .section > .title a, .section-container.accordion > [data-section-region] > [data-section-title] a, .section-container.accordion > [data-section-region] > .title a { + width: 100%; + display: inline-block; + white-space: nowrap; +} +/* line 111, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +[data-section=''] > section > [data-section-content], [data-section=''] > section > .content, [data-section=''] > .section > [data-section-content], [data-section=''] > .section > .content, [data-section=''] > [data-section-region] > [data-section-content], [data-section=''] > [data-section-region] > .content, [data-section='auto'] > section > [data-section-content], [data-section='auto'] > section > .content, [data-section='auto'] > .section > [data-section-content], [data-section='auto'] > .section > .content, [data-section='auto'] > [data-section-region] > [data-section-content], [data-section='auto'] > [data-section-region] > .content, .section-container.auto > section > [data-section-content], .section-container.auto > section > .content, .section-container.auto > .section > [data-section-content], .section-container.auto > .section > .content, .section-container.auto > [data-section-region] > [data-section-content], .section-container.auto > [data-section-region] > .content, +[data-section='vertical-tabs'] > section > [data-section-content], +[data-section='vertical-tabs'] > section > .content, +[data-section='vertical-tabs'] > .section > [data-section-content], +[data-section='vertical-tabs'] > .section > .content, +[data-section='vertical-tabs'] > [data-section-region] > [data-section-content], +[data-section='vertical-tabs'] > [data-section-region] > .content, .section-container.vertical-tabs > section > [data-section-content], .section-container.vertical-tabs > section > .content, .section-container.vertical-tabs > .section > [data-section-content], .section-container.vertical-tabs > .section > .content, .section-container.vertical-tabs > [data-section-region] > [data-section-content], .section-container.vertical-tabs > [data-section-region] > .content, +[data-section='vertical-nav'] > section > [data-section-content], +[data-section='vertical-nav'] > section > .content, +[data-section='vertical-nav'] > .section > [data-section-content], +[data-section='vertical-nav'] > .section > .content, +[data-section='vertical-nav'] > [data-section-region] > [data-section-content], +[data-section='vertical-nav'] > [data-section-region] > .content, .section-container.vertical-nav > section > [data-section-content], .section-container.vertical-nav > section > .content, .section-container.vertical-nav > .section > [data-section-content], .section-container.vertical-nav > .section > .content, .section-container.vertical-nav > [data-section-region] > [data-section-content], .section-container.vertical-nav > [data-section-region] > .content, +[data-section='horizontal-nav'] > section > [data-section-content], +[data-section='horizontal-nav'] > section > .content, +[data-section='horizontal-nav'] > .section > [data-section-content], +[data-section='horizontal-nav'] > .section > .content, +[data-section='horizontal-nav'] > [data-section-region] > [data-section-content], +[data-section='horizontal-nav'] > [data-section-region] > .content, .section-container.horizontal-nav > section > [data-section-content], .section-container.horizontal-nav > section > .content, .section-container.horizontal-nav > .section > [data-section-content], .section-container.horizontal-nav > .section > .content, .section-container.horizontal-nav > [data-section-region] > [data-section-content], .section-container.horizontal-nav > [data-section-region] > .content, +[data-section='accordion'] > section > [data-section-content], +[data-section='accordion'] > section > .content, +[data-section='accordion'] > .section > [data-section-content], +[data-section='accordion'] > .section > .content, +[data-section='accordion'] > [data-section-region] > [data-section-content], +[data-section='accordion'] > [data-section-region] > .content, .section-container.accordion > section > [data-section-content], .section-container.accordion > section > .content, .section-container.accordion > .section > [data-section-content], .section-container.accordion > .section > .content, .section-container.accordion > [data-section-region] > [data-section-content], .section-container.accordion > [data-section-region] > .content { + display: none; +} +/* line 116, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +[data-section=''] > section.active > [data-section-content], [data-section=''] > section.active > .content, [data-section=''] > .section.active > [data-section-content], [data-section=''] > .section.active > .content, [data-section=''] > [data-section-region].active > [data-section-content], [data-section=''] > [data-section-region].active > .content, [data-section='auto'] > section.active > [data-section-content], [data-section='auto'] > section.active > .content, [data-section='auto'] > .section.active > [data-section-content], [data-section='auto'] > .section.active > .content, [data-section='auto'] > [data-section-region].active > [data-section-content], [data-section='auto'] > [data-section-region].active > .content, .section-container.auto > section.active > [data-section-content], .section-container.auto > section.active > .content, .section-container.auto > .section.active > [data-section-content], .section-container.auto > .section.active > .content, .section-container.auto > [data-section-region].active > [data-section-content], .section-container.auto > [data-section-region].active > .content, +[data-section='vertical-tabs'] > section.active > [data-section-content], +[data-section='vertical-tabs'] > section.active > .content, +[data-section='vertical-tabs'] > .section.active > [data-section-content], +[data-section='vertical-tabs'] > .section.active > .content, +[data-section='vertical-tabs'] > [data-section-region].active > [data-section-content], +[data-section='vertical-tabs'] > [data-section-region].active > .content, .section-container.vertical-tabs > section.active > [data-section-content], .section-container.vertical-tabs > section.active > .content, .section-container.vertical-tabs > .section.active > [data-section-content], .section-container.vertical-tabs > .section.active > .content, .section-container.vertical-tabs > [data-section-region].active > [data-section-content], .section-container.vertical-tabs > [data-section-region].active > .content, +[data-section='vertical-nav'] > section.active > [data-section-content], +[data-section='vertical-nav'] > section.active > .content, +[data-section='vertical-nav'] > .section.active > [data-section-content], +[data-section='vertical-nav'] > .section.active > .content, +[data-section='vertical-nav'] > [data-section-region].active > [data-section-content], +[data-section='vertical-nav'] > [data-section-region].active > .content, .section-container.vertical-nav > section.active > [data-section-content], .section-container.vertical-nav > section.active > .content, .section-container.vertical-nav > .section.active > [data-section-content], .section-container.vertical-nav > .section.active > .content, .section-container.vertical-nav > [data-section-region].active > [data-section-content], .section-container.vertical-nav > [data-section-region].active > .content, +[data-section='horizontal-nav'] > section.active > [data-section-content], +[data-section='horizontal-nav'] > section.active > .content, +[data-section='horizontal-nav'] > .section.active > [data-section-content], +[data-section='horizontal-nav'] > .section.active > .content, +[data-section='horizontal-nav'] > [data-section-region].active > [data-section-content], +[data-section='horizontal-nav'] > [data-section-region].active > .content, .section-container.horizontal-nav > section.active > [data-section-content], .section-container.horizontal-nav > section.active > .content, .section-container.horizontal-nav > .section.active > [data-section-content], .section-container.horizontal-nav > .section.active > .content, .section-container.horizontal-nav > [data-section-region].active > [data-section-content], .section-container.horizontal-nav > [data-section-region].active > .content, +[data-section='accordion'] > section.active > [data-section-content], +[data-section='accordion'] > section.active > .content, +[data-section='accordion'] > .section.active > [data-section-content], +[data-section='accordion'] > .section.active > .content, +[data-section='accordion'] > [data-section-region].active > [data-section-content], +[data-section='accordion'] > [data-section-region].active > .content, .section-container.accordion > section.active > [data-section-content], .section-container.accordion > section.active > .content, .section-container.accordion > .section.active > [data-section-content], .section-container.accordion > .section.active > .content, .section-container.accordion > [data-section-region].active > [data-section-content], .section-container.accordion > [data-section-region].active > .content { + display: block; +} +/* line 119, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +[data-section=''] > section:not(.active), [data-section=''] > .section:not(.active), [data-section=''] > [data-section-region]:not(.active), [data-section='auto'] > section:not(.active), [data-section='auto'] > .section:not(.active), [data-section='auto'] > [data-section-region]:not(.active), .section-container.auto > section:not(.active), .section-container.auto > .section:not(.active), .section-container.auto > [data-section-region]:not(.active), +[data-section='vertical-tabs'] > section:not(.active), +[data-section='vertical-tabs'] > .section:not(.active), +[data-section='vertical-tabs'] > [data-section-region]:not(.active), .section-container.vertical-tabs > section:not(.active), .section-container.vertical-tabs > .section:not(.active), .section-container.vertical-tabs > [data-section-region]:not(.active), +[data-section='vertical-nav'] > section:not(.active), +[data-section='vertical-nav'] > .section:not(.active), +[data-section='vertical-nav'] > [data-section-region]:not(.active), .section-container.vertical-nav > section:not(.active), .section-container.vertical-nav > .section:not(.active), .section-container.vertical-nav > [data-section-region]:not(.active), +[data-section='horizontal-nav'] > section:not(.active), +[data-section='horizontal-nav'] > .section:not(.active), +[data-section='horizontal-nav'] > [data-section-region]:not(.active), .section-container.horizontal-nav > section:not(.active), .section-container.horizontal-nav > .section:not(.active), .section-container.horizontal-nav > [data-section-region]:not(.active), +[data-section='accordion'] > section:not(.active), +[data-section='accordion'] > .section:not(.active), +[data-section='accordion'] > [data-section-region]:not(.active), .section-container.accordion > section:not(.active), .section-container.accordion > .section:not(.active), .section-container.accordion > [data-section-region]:not(.active) { + padding: 0 !important; +} +/* line 126, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +[data-section=''] > section > [data-section-title], [data-section=''] > section > .title, [data-section=''] > .section > [data-section-title], [data-section=''] > .section > .title, [data-section=''] > [data-section-region] > [data-section-title], [data-section=''] > [data-section-region] > .title, [data-section='auto'] > section > [data-section-title], [data-section='auto'] > section > .title, [data-section='auto'] > .section > [data-section-title], [data-section='auto'] > .section > .title, [data-section='auto'] > [data-section-region] > [data-section-title], [data-section='auto'] > [data-section-region] > .title, .section-container.auto > section > [data-section-title], .section-container.auto > section > .title, .section-container.auto > .section > [data-section-title], .section-container.auto > .section > .title, .section-container.auto > [data-section-region] > [data-section-title], .section-container.auto > [data-section-region] > .title, +[data-section='vertical-tabs'] > section > [data-section-title], +[data-section='vertical-tabs'] > section > .title, +[data-section='vertical-tabs'] > .section > [data-section-title], +[data-section='vertical-tabs'] > .section > .title, +[data-section='vertical-tabs'] > [data-section-region] > [data-section-title], +[data-section='vertical-tabs'] > [data-section-region] > .title, .section-container.vertical-tabs > section > [data-section-title], .section-container.vertical-tabs > section > .title, .section-container.vertical-tabs > .section > [data-section-title], .section-container.vertical-tabs > .section > .title, .section-container.vertical-tabs > [data-section-region] > [data-section-title], .section-container.vertical-tabs > [data-section-region] > .title, +[data-section='vertical-nav'] > section > [data-section-title], +[data-section='vertical-nav'] > section > .title, +[data-section='vertical-nav'] > .section > [data-section-title], +[data-section='vertical-nav'] > .section > .title, +[data-section='vertical-nav'] > [data-section-region] > [data-section-title], +[data-section='vertical-nav'] > [data-section-region] > .title, .section-container.vertical-nav > section > [data-section-title], .section-container.vertical-nav > section > .title, .section-container.vertical-nav > .section > [data-section-title], .section-container.vertical-nav > .section > .title, .section-container.vertical-nav > [data-section-region] > [data-section-title], .section-container.vertical-nav > [data-section-region] > .title, +[data-section='horizontal-nav'] > section > [data-section-title], +[data-section='horizontal-nav'] > section > .title, +[data-section='horizontal-nav'] > .section > [data-section-title], +[data-section='horizontal-nav'] > .section > .title, +[data-section='horizontal-nav'] > [data-section-region] > [data-section-title], +[data-section='horizontal-nav'] > [data-section-region] > .title, .section-container.horizontal-nav > section > [data-section-title], .section-container.horizontal-nav > section > .title, .section-container.horizontal-nav > .section > [data-section-title], .section-container.horizontal-nav > .section > .title, .section-container.horizontal-nav > [data-section-region] > [data-section-title], .section-container.horizontal-nav > [data-section-region] > .title, +[data-section='accordion'] > section > [data-section-title], +[data-section='accordion'] > section > .title, +[data-section='accordion'] > .section > [data-section-title], +[data-section='accordion'] > .section > .title, +[data-section='accordion'] > [data-section-region] > [data-section-title], +[data-section='accordion'] > [data-section-region] > .title, .section-container.accordion > section > [data-section-title], .section-container.accordion > section > .title, .section-container.accordion > .section > [data-section-title], .section-container.accordion > .section > .title, .section-container.accordion > [data-section-region] > [data-section-title], .section-container.accordion > [data-section-region] > .title { + width: 100%; +} + +/* line 292, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.section-container.auto, +.section-container.vertical-tabs, +.section-container.vertical-nav, +.section-container.horizontal-nav, +.section-container.accordion { + border-top: 1px solid #ccc; +} +/* line 207, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.section-container.auto > section > .title, .section-container.auto > .section > .title, +.section-container.vertical-tabs > section > .title, +.section-container.vertical-tabs > .section > .title, +.section-container.vertical-nav > section > .title, +.section-container.vertical-nav > .section > .title, +.section-container.horizontal-nav > section > .title, +.section-container.horizontal-nav > .section > .title, +.section-container.accordion > section > .title, +.section-container.accordion > .section > .title { + background-color: #efefef; + cursor: pointer; + border: solid 1px #ccc; +} +/* line 211, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.section-container.auto > section > .title a, .section-container.auto > .section > .title a, +.section-container.vertical-tabs > section > .title a, +.section-container.vertical-tabs > .section > .title a, +.section-container.vertical-nav > section > .title a, +.section-container.vertical-nav > .section > .title a, +.section-container.horizontal-nav > section > .title a, +.section-container.horizontal-nav > .section > .title a, +.section-container.accordion > section > .title a, +.section-container.accordion > .section > .title a { + padding: 0.9375em; + color: #333; + font-size: 0.875em; + background: none; +} +/* line 217, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.section-container.auto > section > .title:hover, .section-container.auto > .section > .title:hover, +.section-container.vertical-tabs > section > .title:hover, +.section-container.vertical-tabs > .section > .title:hover, +.section-container.vertical-nav > section > .title:hover, +.section-container.vertical-nav > .section > .title:hover, +.section-container.horizontal-nav > section > .title:hover, +.section-container.horizontal-nav > .section > .title:hover, +.section-container.accordion > section > .title:hover, +.section-container.accordion > .section > .title:hover { + background-color: #e2e2e2; +} +/* line 220, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.section-container.auto > section > .content, .section-container.auto > .section > .content, +.section-container.vertical-tabs > section > .content, +.section-container.vertical-tabs > .section > .content, +.section-container.vertical-nav > section > .content, +.section-container.vertical-nav > .section > .content, +.section-container.horizontal-nav > section > .content, +.section-container.horizontal-nav > .section > .content, +.section-container.accordion > section > .content, +.section-container.accordion > .section > .content { + padding: 0.9375em; + background-color: #fff; + border: solid 1px #ccc; +} +/* line 225, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.section-container.auto > section > .content > *:last-child, .section-container.auto > .section > .content > *:last-child, +.section-container.vertical-tabs > section > .content > *:last-child, +.section-container.vertical-tabs > .section > .content > *:last-child, +.section-container.vertical-nav > section > .content > *:last-child, +.section-container.vertical-nav > .section > .content > *:last-child, +.section-container.horizontal-nav > section > .content > *:last-child, +.section-container.horizontal-nav > .section > .content > *:last-child, +.section-container.accordion > section > .content > *:last-child, +.section-container.accordion > .section > .content > *:last-child { + margin-bottom: 0; +} +/* line 226, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.section-container.auto > section > .content > *:first-child, .section-container.auto > .section > .content > *:first-child, +.section-container.vertical-tabs > section > .content > *:first-child, +.section-container.vertical-tabs > .section > .content > *:first-child, +.section-container.vertical-nav > section > .content > *:first-child, +.section-container.vertical-nav > .section > .content > *:first-child, +.section-container.horizontal-nav > section > .content > *:first-child, +.section-container.horizontal-nav > .section > .content > *:first-child, +.section-container.accordion > section > .content > *:first-child, +.section-container.accordion > .section > .content > *:first-child { + padding-top: 0; +} +/* line 227, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.section-container.auto > section > .content > *:last-child:not(.flex-video), .section-container.auto > .section > .content > *:last-child:not(.flex-video), +.section-container.vertical-tabs > section > .content > *:last-child:not(.flex-video), +.section-container.vertical-tabs > .section > .content > *:last-child:not(.flex-video), +.section-container.vertical-nav > section > .content > *:last-child:not(.flex-video), +.section-container.vertical-nav > .section > .content > *:last-child:not(.flex-video), +.section-container.horizontal-nav > section > .content > *:last-child:not(.flex-video), +.section-container.horizontal-nav > .section > .content > *:last-child:not(.flex-video), +.section-container.accordion > section > .content > *:last-child:not(.flex-video), +.section-container.accordion > .section > .content > *:last-child:not(.flex-video) { + padding-bottom: 0; +} +/* line 231, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.section-container.auto > section.active > .title, .section-container.auto > .section.active > .title, +.section-container.vertical-tabs > section.active > .title, +.section-container.vertical-tabs > .section.active > .title, +.section-container.vertical-nav > section.active > .title, +.section-container.vertical-nav > .section.active > .title, +.section-container.horizontal-nav > section.active > .title, +.section-container.horizontal-nav > .section.active > .title, +.section-container.accordion > section.active > .title, +.section-container.accordion > .section.active > .title { + background: #d5d5d5; +} +/* line 233, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.section-container.auto > section.active > .title a, .section-container.auto > .section.active > .title a, +.section-container.vertical-tabs > section.active > .title a, +.section-container.vertical-tabs > .section.active > .title a, +.section-container.vertical-nav > section.active > .title a, +.section-container.vertical-nav > .section.active > .title a, +.section-container.horizontal-nav > section.active > .title a, +.section-container.horizontal-nav > .section.active > .title a, +.section-container.accordion > section.active > .title a, +.section-container.accordion > .section.active > .title a { + color: #333; +} +/* line 237, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.section-container.auto > section:not(.active), .section-container.auto > .section:not(.active), +.section-container.vertical-tabs > section:not(.active), +.section-container.vertical-tabs > .section:not(.active), +.section-container.vertical-nav > section:not(.active), +.section-container.vertical-nav > .section:not(.active), +.section-container.horizontal-nav > section:not(.active), +.section-container.horizontal-nav > .section:not(.active), +.section-container.accordion > section:not(.active), +.section-container.accordion > .section:not(.active) { + padding: 0 !important; +} +/* line 243, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.section-container.auto > section > .title, .section-container.auto > .section > .title, +.section-container.vertical-tabs > section > .title, +.section-container.vertical-tabs > .section > .title, +.section-container.vertical-nav > section > .title, +.section-container.vertical-nav > .section > .title, +.section-container.horizontal-nav > section > .title, +.section-container.horizontal-nav > .section > .title, +.section-container.accordion > section > .title, +.section-container.accordion > .section > .title { + border-top: none; +} + +/* line 303, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +[data-section='tabs'], .section-container.tabs { + width: 100%; + position: relative; + display: block; + margin-bottom: 1.25em; +} +/* line 49, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +[data-section='tabs']:not([data-section-resized]):not([data-section-small-style]), .section-container.tabs:not([data-section-resized]):not([data-section-small-style]) { + visibility: hidden; +} +/* line 102, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +[data-section='tabs'] > section > [data-section-title], [data-section='tabs'] > section > .title, [data-section='tabs'] > .section > [data-section-title], [data-section='tabs'] > .section > .title, [data-section='tabs'] > [data-section-region] > [data-section-title], [data-section='tabs'] > [data-section-region] > .title, .section-container.tabs > section > [data-section-title], .section-container.tabs > section > .title, .section-container.tabs > .section > [data-section-title], .section-container.tabs > .section > .title, .section-container.tabs > [data-section-region] > [data-section-title], .section-container.tabs > [data-section-region] > .title { + margin-bottom: 0; +} +/* line 104, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +[data-section='tabs'] > section > [data-section-title] a, [data-section='tabs'] > section > .title a, [data-section='tabs'] > .section > [data-section-title] a, [data-section='tabs'] > .section > .title a, [data-section='tabs'] > [data-section-region] > [data-section-title] a, [data-section='tabs'] > [data-section-region] > .title a, .section-container.tabs > section > [data-section-title] a, .section-container.tabs > section > .title a, .section-container.tabs > .section > [data-section-title] a, .section-container.tabs > .section > .title a, .section-container.tabs > [data-section-region] > [data-section-title] a, .section-container.tabs > [data-section-region] > .title a { + width: 100%; + display: inline-block; + white-space: nowrap; +} +/* line 111, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +[data-section='tabs'] > section > [data-section-content], [data-section='tabs'] > section > .content, [data-section='tabs'] > .section > [data-section-content], [data-section='tabs'] > .section > .content, [data-section='tabs'] > [data-section-region] > [data-section-content], [data-section='tabs'] > [data-section-region] > .content, .section-container.tabs > section > [data-section-content], .section-container.tabs > section > .content, .section-container.tabs > .section > [data-section-content], .section-container.tabs > .section > .content, .section-container.tabs > [data-section-region] > [data-section-content], .section-container.tabs > [data-section-region] > .content { + display: none; +} +/* line 116, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +[data-section='tabs'] > section.active > [data-section-content], [data-section='tabs'] > section.active > .content, [data-section='tabs'] > .section.active > [data-section-content], [data-section='tabs'] > .section.active > .content, [data-section='tabs'] > [data-section-region].active > [data-section-content], [data-section='tabs'] > [data-section-region].active > .content, .section-container.tabs > section.active > [data-section-content], .section-container.tabs > section.active > .content, .section-container.tabs > .section.active > [data-section-content], .section-container.tabs > .section.active > .content, .section-container.tabs > [data-section-region].active > [data-section-content], .section-container.tabs > [data-section-region].active > .content { + display: block; +} +/* line 119, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +[data-section='tabs'] > section:not(.active), [data-section='tabs'] > .section:not(.active), [data-section='tabs'] > [data-section-region]:not(.active), .section-container.tabs > section:not(.active), .section-container.tabs > .section:not(.active), .section-container.tabs > [data-section-region]:not(.active) { + padding: 0 !important; +} +/* line 132, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +[data-section='tabs'] > section > [data-section-title], [data-section='tabs'] > section > .title, [data-section='tabs'] > .section > [data-section-title], [data-section='tabs'] > .section > .title, [data-section='tabs'] > [data-section-region] > [data-section-title], [data-section='tabs'] > [data-section-region] > .title, .section-container.tabs > section > [data-section-title], .section-container.tabs > section > .title, .section-container.tabs > .section > [data-section-title], .section-container.tabs > .section > .title, .section-container.tabs > [data-section-region] > [data-section-title], .section-container.tabs > [data-section-region] > .title { + width: auto; + position: absolute; + top: 0; + left: 0; +} + +/* line 310, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.section-container.tabs { + border: none; +} +/* line 207, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.section-container.tabs > section > .title, .section-container.tabs > .section > .title { + background-color: #efefef; + cursor: pointer; + border: solid 1px #ccc; +} +/* line 211, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.section-container.tabs > section > .title a, .section-container.tabs > .section > .title a { + padding: 0.9375em; + color: #333; + font-size: 0.875em; + background: none; +} +/* line 217, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.section-container.tabs > section > .title:hover, .section-container.tabs > .section > .title:hover { + background-color: #e2e2e2; +} +/* line 220, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.section-container.tabs > section > .content, .section-container.tabs > .section > .content { + padding: 0.9375em; + background-color: #fff; + border: solid 1px #ccc; +} +/* line 225, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.section-container.tabs > section > .content > *:last-child, .section-container.tabs > .section > .content > *:last-child { + margin-bottom: 0; +} +/* line 226, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.section-container.tabs > section > .content > *:first-child, .section-container.tabs > .section > .content > *:first-child { + padding-top: 0; +} +/* line 227, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.section-container.tabs > section > .content > *:last-child:not(.flex-video), .section-container.tabs > .section > .content > *:last-child:not(.flex-video) { + padding-bottom: 0; +} +/* line 231, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.section-container.tabs > section.active > .title, .section-container.tabs > .section.active > .title { + background: #fff; +} +/* line 233, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.section-container.tabs > section.active > .title a, .section-container.tabs > .section.active > .title a { + color: #333; +} +/* line 237, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.section-container.tabs > section:not(.active), .section-container.tabs > .section:not(.active) { + padding: 0 !important; +} +/* line 249, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.section-container.tabs > section.active > .title, .section-container.tabs > .section.active > .title { + border-bottom: 0; +} + +@media only screen and (min-width: 768px) { + /* line 319, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section=''], [data-section='auto'], .section-container.auto { + width: 100%; + position: relative; + display: block; + margin-bottom: 1.25em; + } + /* line 49, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='']:not([data-section-resized]):not([data-section-small-style]), [data-section='auto']:not([data-section-resized]):not([data-section-small-style]), .section-container.auto:not([data-section-resized]):not([data-section-small-style]) { + visibility: hidden; + } + /* line 102, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section=''] > section > [data-section-title], [data-section=''] > section > .title, [data-section=''] > .section > [data-section-title], [data-section=''] > .section > .title, [data-section=''] > [data-section-region] > [data-section-title], [data-section=''] > [data-section-region] > .title, [data-section='auto'] > section > [data-section-title], [data-section='auto'] > section > .title, [data-section='auto'] > .section > [data-section-title], [data-section='auto'] > .section > .title, [data-section='auto'] > [data-section-region] > [data-section-title], [data-section='auto'] > [data-section-region] > .title, .section-container.auto > section > [data-section-title], .section-container.auto > section > .title, .section-container.auto > .section > [data-section-title], .section-container.auto > .section > .title, .section-container.auto > [data-section-region] > [data-section-title], .section-container.auto > [data-section-region] > .title { + margin-bottom: 0; + } + /* line 104, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section=''] > section > [data-section-title] a, [data-section=''] > section > .title a, [data-section=''] > .section > [data-section-title] a, [data-section=''] > .section > .title a, [data-section=''] > [data-section-region] > [data-section-title] a, [data-section=''] > [data-section-region] > .title a, [data-section='auto'] > section > [data-section-title] a, [data-section='auto'] > section > .title a, [data-section='auto'] > .section > [data-section-title] a, [data-section='auto'] > .section > .title a, [data-section='auto'] > [data-section-region] > [data-section-title] a, [data-section='auto'] > [data-section-region] > .title a, .section-container.auto > section > [data-section-title] a, .section-container.auto > section > .title a, .section-container.auto > .section > [data-section-title] a, .section-container.auto > .section > .title a, .section-container.auto > [data-section-region] > [data-section-title] a, .section-container.auto > [data-section-region] > .title a { + width: 100%; + display: inline-block; + white-space: nowrap; + } + /* line 111, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section=''] > section > [data-section-content], [data-section=''] > section > .content, [data-section=''] > .section > [data-section-content], [data-section=''] > .section > .content, [data-section=''] > [data-section-region] > [data-section-content], [data-section=''] > [data-section-region] > .content, [data-section='auto'] > section > [data-section-content], [data-section='auto'] > section > .content, [data-section='auto'] > .section > [data-section-content], [data-section='auto'] > .section > .content, [data-section='auto'] > [data-section-region] > [data-section-content], [data-section='auto'] > [data-section-region] > .content, .section-container.auto > section > [data-section-content], .section-container.auto > section > .content, .section-container.auto > .section > [data-section-content], .section-container.auto > .section > .content, .section-container.auto > [data-section-region] > [data-section-content], .section-container.auto > [data-section-region] > .content { + display: none; + } + /* line 116, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section=''] > section.active > [data-section-content], [data-section=''] > section.active > .content, [data-section=''] > .section.active > [data-section-content], [data-section=''] > .section.active > .content, [data-section=''] > [data-section-region].active > [data-section-content], [data-section=''] > [data-section-region].active > .content, [data-section='auto'] > section.active > [data-section-content], [data-section='auto'] > section.active > .content, [data-section='auto'] > .section.active > [data-section-content], [data-section='auto'] > .section.active > .content, [data-section='auto'] > [data-section-region].active > [data-section-content], [data-section='auto'] > [data-section-region].active > .content, .section-container.auto > section.active > [data-section-content], .section-container.auto > section.active > .content, .section-container.auto > .section.active > [data-section-content], .section-container.auto > .section.active > .content, .section-container.auto > [data-section-region].active > [data-section-content], .section-container.auto > [data-section-region].active > .content { + display: block; + } + /* line 119, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section=''] > section:not(.active), [data-section=''] > .section:not(.active), [data-section=''] > [data-section-region]:not(.active), [data-section='auto'] > section:not(.active), [data-section='auto'] > .section:not(.active), [data-section='auto'] > [data-section-region]:not(.active), .section-container.auto > section:not(.active), .section-container.auto > .section:not(.active), .section-container.auto > [data-section-region]:not(.active) { + padding: 0 !important; + } + /* line 132, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section=''] > section > [data-section-title], [data-section=''] > section > .title, [data-section=''] > .section > [data-section-title], [data-section=''] > .section > .title, [data-section=''] > [data-section-region] > [data-section-title], [data-section=''] > [data-section-region] > .title, [data-section='auto'] > section > [data-section-title], [data-section='auto'] > section > .title, [data-section='auto'] > .section > [data-section-title], [data-section='auto'] > .section > .title, [data-section='auto'] > [data-section-region] > [data-section-title], [data-section='auto'] > [data-section-region] > .title, .section-container.auto > section > [data-section-title], .section-container.auto > section > .title, .section-container.auto > .section > [data-section-title], .section-container.auto > .section > .title, .section-container.auto > [data-section-region] > [data-section-title], .section-container.auto > [data-section-region] > .title { + width: auto; + position: absolute; + top: 0; + left: 0; + } + + /* line 326, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.auto { + border: none; + } + /* line 207, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.auto > section > .title, .section-container.auto > .section > .title { + background-color: #efefef; + cursor: pointer; + border: solid 1px #ccc; + } + /* line 211, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.auto > section > .title a, .section-container.auto > .section > .title a { + padding: 0.9375em; + color: #333; + font-size: 0.875em; + background: none; + } + /* line 217, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.auto > section > .title:hover, .section-container.auto > .section > .title:hover { + background-color: #e2e2e2; + } + /* line 220, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.auto > section > .content, .section-container.auto > .section > .content { + padding: 0.9375em; + background-color: #fff; + border: solid 1px #ccc; + } + /* line 225, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.auto > section > .content > *:last-child, .section-container.auto > .section > .content > *:last-child { + margin-bottom: 0; + } + /* line 226, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.auto > section > .content > *:first-child, .section-container.auto > .section > .content > *:first-child { + padding-top: 0; + } + /* line 227, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.auto > section > .content > *:last-child:not(.flex-video), .section-container.auto > .section > .content > *:last-child:not(.flex-video) { + padding-bottom: 0; + } + /* line 231, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.auto > section.active > .title, .section-container.auto > .section.active > .title { + background: #fff; + } + /* line 233, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.auto > section.active > .title a, .section-container.auto > .section.active > .title a { + color: #333; + } + /* line 237, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.auto > section:not(.active), .section-container.auto > .section:not(.active) { + padding: 0 !important; + } + /* line 249, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.auto > section.active > .title, .section-container.auto > .section.active > .title { + border-bottom: 0; + } + + /* line 333, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='vertical-tabs'], .section-container.vertical-tabs { + width: 100%; + position: relative; + display: block; + margin-bottom: 1.25em; + } + /* line 49, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='vertical-tabs']:not([data-section-resized]):not([data-section-small-style]), .section-container.vertical-tabs:not([data-section-resized]):not([data-section-small-style]) { + visibility: hidden; + } + /* line 55, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='vertical-tabs'][data-section-small-style], .section-container.vertical-tabs[data-section-small-style] { + width: 100% !important; + } + /* line 58, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='vertical-tabs'][data-section-small-style] > [data-section-region], [data-section='vertical-tabs'][data-section-small-style] > section, [data-section='vertical-tabs'][data-section-small-style] > .section, .section-container.vertical-tabs[data-section-small-style] > [data-section-region], .section-container.vertical-tabs[data-section-small-style] > section, .section-container.vertical-tabs[data-section-small-style] > .section { + padding: 0 !important; + margin: 0 !important; + } + /* line 61, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='vertical-tabs'][data-section-small-style] > [data-section-region] > [data-section-title], [data-section='vertical-tabs'][data-section-small-style] > [data-section-region] > .title, [data-section='vertical-tabs'][data-section-small-style] > section > [data-section-title], [data-section='vertical-tabs'][data-section-small-style] > section > .title, [data-section='vertical-tabs'][data-section-small-style] > .section > [data-section-title], [data-section='vertical-tabs'][data-section-small-style] > .section > .title, .section-container.vertical-tabs[data-section-small-style] > [data-section-region] > [data-section-title], .section-container.vertical-tabs[data-section-small-style] > [data-section-region] > .title, .section-container.vertical-tabs[data-section-small-style] > section > [data-section-title], .section-container.vertical-tabs[data-section-small-style] > section > .title, .section-container.vertical-tabs[data-section-small-style] > .section > [data-section-title], .section-container.vertical-tabs[data-section-small-style] > .section > .title { + width: 100% !important; + } + /* line 102, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='vertical-tabs'] > section > [data-section-title], [data-section='vertical-tabs'] > section > .title, [data-section='vertical-tabs'] > .section > [data-section-title], [data-section='vertical-tabs'] > .section > .title, [data-section='vertical-tabs'] > [data-section-region] > [data-section-title], [data-section='vertical-tabs'] > [data-section-region] > .title, .section-container.vertical-tabs > section > [data-section-title], .section-container.vertical-tabs > section > .title, .section-container.vertical-tabs > .section > [data-section-title], .section-container.vertical-tabs > .section > .title, .section-container.vertical-tabs > [data-section-region] > [data-section-title], .section-container.vertical-tabs > [data-section-region] > .title { + margin-bottom: 0; + } + /* line 104, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='vertical-tabs'] > section > [data-section-title] a, [data-section='vertical-tabs'] > section > .title a, [data-section='vertical-tabs'] > .section > [data-section-title] a, [data-section='vertical-tabs'] > .section > .title a, [data-section='vertical-tabs'] > [data-section-region] > [data-section-title] a, [data-section='vertical-tabs'] > [data-section-region] > .title a, .section-container.vertical-tabs > section > [data-section-title] a, .section-container.vertical-tabs > section > .title a, .section-container.vertical-tabs > .section > [data-section-title] a, .section-container.vertical-tabs > .section > .title a, .section-container.vertical-tabs > [data-section-region] > [data-section-title] a, .section-container.vertical-tabs > [data-section-region] > .title a { + width: 100%; + display: inline-block; + white-space: nowrap; + } + /* line 111, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='vertical-tabs'] > section > [data-section-content], [data-section='vertical-tabs'] > section > .content, [data-section='vertical-tabs'] > .section > [data-section-content], [data-section='vertical-tabs'] > .section > .content, [data-section='vertical-tabs'] > [data-section-region] > [data-section-content], [data-section='vertical-tabs'] > [data-section-region] > .content, .section-container.vertical-tabs > section > [data-section-content], .section-container.vertical-tabs > section > .content, .section-container.vertical-tabs > .section > [data-section-content], .section-container.vertical-tabs > .section > .content, .section-container.vertical-tabs > [data-section-region] > [data-section-content], .section-container.vertical-tabs > [data-section-region] > .content { + display: none; + } + /* line 116, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='vertical-tabs'] > section.active > [data-section-content], [data-section='vertical-tabs'] > section.active > .content, [data-section='vertical-tabs'] > .section.active > [data-section-content], [data-section='vertical-tabs'] > .section.active > .content, [data-section='vertical-tabs'] > [data-section-region].active > [data-section-content], [data-section='vertical-tabs'] > [data-section-region].active > .content, .section-container.vertical-tabs > section.active > [data-section-content], .section-container.vertical-tabs > section.active > .content, .section-container.vertical-tabs > .section.active > [data-section-content], .section-container.vertical-tabs > .section.active > .content, .section-container.vertical-tabs > [data-section-region].active > [data-section-content], .section-container.vertical-tabs > [data-section-region].active > .content { + display: block; + } + /* line 119, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='vertical-tabs'] > section:not(.active), [data-section='vertical-tabs'] > .section:not(.active), [data-section='vertical-tabs'] > [data-section-region]:not(.active), .section-container.vertical-tabs > section:not(.active), .section-container.vertical-tabs > .section:not(.active), .section-container.vertical-tabs > [data-section-region]:not(.active) { + padding: 0 !important; + } + /* line 143, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='vertical-tabs'] > section > [data-section-title], [data-section='vertical-tabs'] > section > .title, [data-section='vertical-tabs'] > .section > [data-section-title], [data-section='vertical-tabs'] > .section > .title, [data-section='vertical-tabs'] > [data-section-region] > [data-section-title], [data-section='vertical-tabs'] > [data-section-region] > .title, .section-container.vertical-tabs > section > [data-section-title], .section-container.vertical-tabs > section > .title, .section-container.vertical-tabs > .section > [data-section-title], .section-container.vertical-tabs > .section > .title, .section-container.vertical-tabs > [data-section-region] > [data-section-title], .section-container.vertical-tabs > [data-section-region] > .title { + position: absolute; + top: 0; + left: 0; + width: 12.5em; + } + /* line 150, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='vertical-tabs'] > section.active, [data-section='vertical-tabs'] > .section.active, [data-section='vertical-tabs'] > [data-section-region].active, .section-container.vertical-tabs > section.active, .section-container.vertical-tabs > .section.active, .section-container.vertical-tabs > [data-section-region].active { + padding-left: 12.5em; + } + /* line 153, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='vertical-tabs'] > section.active > [data-section-title], [data-section='vertical-tabs'] > section.active > .title, [data-section='vertical-tabs'] > .section.active > [data-section-title], [data-section='vertical-tabs'] > .section.active > .title, [data-section='vertical-tabs'] > [data-section-region].active > [data-section-title], [data-section='vertical-tabs'] > [data-section-region].active > .title, .section-container.vertical-tabs > section.active > [data-section-title], .section-container.vertical-tabs > section.active > .title, .section-container.vertical-tabs > .section.active > [data-section-title], .section-container.vertical-tabs > .section.active > .title, .section-container.vertical-tabs > [data-section-region].active > [data-section-title], .section-container.vertical-tabs > [data-section-region].active > .title { + width: 12.5em; + } + + /* line 340, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.vertical-tabs { + border: none; + } + /* line 207, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.vertical-tabs > section > .title, .section-container.vertical-tabs > .section > .title { + background-color: #efefef; + cursor: pointer; + border: solid 1px #ccc; + } + /* line 211, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.vertical-tabs > section > .title a, .section-container.vertical-tabs > .section > .title a { + padding: 0.9375em; + color: #333; + font-size: 0.875em; + background: none; + } + /* line 217, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.vertical-tabs > section > .title:hover, .section-container.vertical-tabs > .section > .title:hover { + background-color: #e2e2e2; + } + /* line 220, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.vertical-tabs > section > .content, .section-container.vertical-tabs > .section > .content { + padding: 0.9375em; + background-color: #fff; + border: solid 1px #ccc; + } + /* line 225, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.vertical-tabs > section > .content > *:last-child, .section-container.vertical-tabs > .section > .content > *:last-child { + margin-bottom: 0; + } + /* line 226, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.vertical-tabs > section > .content > *:first-child, .section-container.vertical-tabs > .section > .content > *:first-child { + padding-top: 0; + } + /* line 227, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.vertical-tabs > section > .content > *:last-child:not(.flex-video), .section-container.vertical-tabs > .section > .content > *:last-child:not(.flex-video) { + padding-bottom: 0; + } + /* line 231, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.vertical-tabs > section.active > .title, .section-container.vertical-tabs > .section.active > .title { + background: #d5d5d5; + } + /* line 233, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.vertical-tabs > section.active > .title a, .section-container.vertical-tabs > .section.active > .title a { + color: #333; + } + /* line 237, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.vertical-tabs > section:not(.active), .section-container.vertical-tabs > .section:not(.active) { + padding: 0 !important; + } + /* line 257, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.vertical-tabs > section.active, .section-container.vertical-tabs > .section.active { + padding-left: 12.4375em; + } + /* line 260, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.vertical-tabs > section.active > .title, .section-container.vertical-tabs > .section.active > .title { + background-color: #d5d5d5; + } + + /* line 347, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='vertical-nav'], .section-container.vertical-nav { + width: 100%; + position: relative; + display: block; + margin-bottom: 1.25em; + } + /* line 49, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='vertical-nav']:not([data-section-resized]):not([data-section-small-style]), .section-container.vertical-nav:not([data-section-resized]):not([data-section-small-style]) { + visibility: hidden; + } + /* line 55, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='vertical-nav'][data-section-small-style], .section-container.vertical-nav[data-section-small-style] { + width: 100% !important; + } + /* line 58, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='vertical-nav'][data-section-small-style] > [data-section-region], [data-section='vertical-nav'][data-section-small-style] > section, [data-section='vertical-nav'][data-section-small-style] > .section, .section-container.vertical-nav[data-section-small-style] > [data-section-region], .section-container.vertical-nav[data-section-small-style] > section, .section-container.vertical-nav[data-section-small-style] > .section { + padding: 0 !important; + margin: 0 !important; + } + /* line 61, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='vertical-nav'][data-section-small-style] > [data-section-region] > [data-section-title], [data-section='vertical-nav'][data-section-small-style] > [data-section-region] > .title, [data-section='vertical-nav'][data-section-small-style] > section > [data-section-title], [data-section='vertical-nav'][data-section-small-style] > section > .title, [data-section='vertical-nav'][data-section-small-style] > .section > [data-section-title], [data-section='vertical-nav'][data-section-small-style] > .section > .title, .section-container.vertical-nav[data-section-small-style] > [data-section-region] > [data-section-title], .section-container.vertical-nav[data-section-small-style] > [data-section-region] > .title, .section-container.vertical-nav[data-section-small-style] > section > [data-section-title], .section-container.vertical-nav[data-section-small-style] > section > .title, .section-container.vertical-nav[data-section-small-style] > .section > [data-section-title], .section-container.vertical-nav[data-section-small-style] > .section > .title { + width: 100% !important; + } + /* line 349, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='vertical-nav'] > section, [data-section='vertical-nav'] > .section, [data-section='vertical-nav'] > [data-section-region], .section-container.vertical-nav > section, .section-container.vertical-nav > .section, .section-container.vertical-nav > [data-section-region] { + position: relative; + display: inline-block; + } + /* line 102, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='vertical-nav'] > section > [data-section-title], [data-section='vertical-nav'] > section > .title, [data-section='vertical-nav'] > .section > [data-section-title], [data-section='vertical-nav'] > .section > .title, [data-section='vertical-nav'] > [data-section-region] > [data-section-title], [data-section='vertical-nav'] > [data-section-region] > .title, .section-container.vertical-nav > section > [data-section-title], .section-container.vertical-nav > section > .title, .section-container.vertical-nav > .section > [data-section-title], .section-container.vertical-nav > .section > .title, .section-container.vertical-nav > [data-section-region] > [data-section-title], .section-container.vertical-nav > [data-section-region] > .title { + margin-bottom: 0; + } + /* line 104, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='vertical-nav'] > section > [data-section-title] a, [data-section='vertical-nav'] > section > .title a, [data-section='vertical-nav'] > .section > [data-section-title] a, [data-section='vertical-nav'] > .section > .title a, [data-section='vertical-nav'] > [data-section-region] > [data-section-title] a, [data-section='vertical-nav'] > [data-section-region] > .title a, .section-container.vertical-nav > section > [data-section-title] a, .section-container.vertical-nav > section > .title a, .section-container.vertical-nav > .section > [data-section-title] a, .section-container.vertical-nav > .section > .title a, .section-container.vertical-nav > [data-section-region] > [data-section-title] a, .section-container.vertical-nav > [data-section-region] > .title a { + width: 100%; + display: inline-block; + white-space: nowrap; + } + /* line 111, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='vertical-nav'] > section > [data-section-content], [data-section='vertical-nav'] > section > .content, [data-section='vertical-nav'] > .section > [data-section-content], [data-section='vertical-nav'] > .section > .content, [data-section='vertical-nav'] > [data-section-region] > [data-section-content], [data-section='vertical-nav'] > [data-section-region] > .content, .section-container.vertical-nav > section > [data-section-content], .section-container.vertical-nav > section > .content, .section-container.vertical-nav > .section > [data-section-content], .section-container.vertical-nav > .section > .content, .section-container.vertical-nav > [data-section-region] > [data-section-content], .section-container.vertical-nav > [data-section-region] > .content { + display: none; + } + /* line 116, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='vertical-nav'] > section.active > [data-section-content], [data-section='vertical-nav'] > section.active > .content, [data-section='vertical-nav'] > .section.active > [data-section-content], [data-section='vertical-nav'] > .section.active > .content, [data-section='vertical-nav'] > [data-section-region].active > [data-section-content], [data-section='vertical-nav'] > [data-section-region].active > .content, .section-container.vertical-nav > section.active > [data-section-content], .section-container.vertical-nav > section.active > .content, .section-container.vertical-nav > .section.active > [data-section-content], .section-container.vertical-nav > .section.active > .content, .section-container.vertical-nav > [data-section-region].active > [data-section-content], .section-container.vertical-nav > [data-section-region].active > .content { + display: block; + } + /* line 119, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='vertical-nav'] > section:not(.active), [data-section='vertical-nav'] > .section:not(.active), [data-section='vertical-nav'] > [data-section-region]:not(.active), .section-container.vertical-nav > section:not(.active), .section-container.vertical-nav > .section:not(.active), .section-container.vertical-nav > [data-section-region]:not(.active) { + padding: 0 !important; + } + /* line 165, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='vertical-nav'] > section > [data-section-title], [data-section='vertical-nav'] > section > .title, [data-section='vertical-nav'] > .section > [data-section-title], [data-section='vertical-nav'] > .section > .title, [data-section='vertical-nav'] > [data-section-region] > [data-section-title], [data-section='vertical-nav'] > [data-section-region] > .title, .section-container.vertical-nav > section > [data-section-title], .section-container.vertical-nav > section > .title, .section-container.vertical-nav > .section > [data-section-title], .section-container.vertical-nav > .section > .title, .section-container.vertical-nav > [data-section-region] > [data-section-title], .section-container.vertical-nav > [data-section-region] > .title { + position: static; + width: auto; + } + /* line 168, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='vertical-nav'] > section > [data-section-title] a, [data-section='vertical-nav'] > section > .title a, [data-section='vertical-nav'] > .section > [data-section-title] a, [data-section='vertical-nav'] > .section > .title a, [data-section='vertical-nav'] > [data-section-region] > [data-section-title] a, [data-section='vertical-nav'] > [data-section-region] > .title a, .section-container.vertical-nav > section > [data-section-title] a, .section-container.vertical-nav > section > .title a, .section-container.vertical-nav > .section > [data-section-title] a, .section-container.vertical-nav > .section > .title a, .section-container.vertical-nav > [data-section-region] > [data-section-title] a, .section-container.vertical-nav > [data-section-region] > .title a { + display: block; + } + /* line 171, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='vertical-nav'] > section > [data-section-content], [data-section='vertical-nav'] > section > .content, [data-section='vertical-nav'] > .section > [data-section-content], [data-section='vertical-nav'] > .section > .content, [data-section='vertical-nav'] > [data-section-region] > [data-section-content], [data-section='vertical-nav'] > [data-section-region] > .content, .section-container.vertical-nav > section > [data-section-content], .section-container.vertical-nav > section > .content, .section-container.vertical-nav > .section > [data-section-content], .section-container.vertical-nav > .section > .content, .section-container.vertical-nav > [data-section-region] > [data-section-content], .section-container.vertical-nav > [data-section-region] > .content { + position: absolute; + top: 0; + left: 0; + z-index: 999; + min-width: 12.5em; + } + + /* line 354, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.vertical-nav { + border: none; + } + /* line 207, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.vertical-nav > section > .title, .section-container.vertical-nav > .section > .title { + background-color: #efefef; + cursor: pointer; + border: solid 1px #ccc; + } + /* line 211, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.vertical-nav > section > .title a, .section-container.vertical-nav > .section > .title a { + padding: 0.9375em; + color: #333; + font-size: 0.875em; + background: none; + } + /* line 217, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.vertical-nav > section > .title:hover, .section-container.vertical-nav > .section > .title:hover { + background-color: #e2e2e2; + } + /* line 220, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.vertical-nav > section > .content, .section-container.vertical-nav > .section > .content { + padding: 0.9375em; + background-color: #fff; + border: solid 1px #ccc; + } + /* line 225, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.vertical-nav > section > .content > *:last-child, .section-container.vertical-nav > .section > .content > *:last-child { + margin-bottom: 0; + } + /* line 226, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.vertical-nav > section > .content > *:first-child, .section-container.vertical-nav > .section > .content > *:first-child { + padding-top: 0; + } + /* line 227, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.vertical-nav > section > .content > *:last-child:not(.flex-video), .section-container.vertical-nav > .section > .content > *:last-child:not(.flex-video) { + padding-bottom: 0; + } + /* line 231, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.vertical-nav > section.active > .title, .section-container.vertical-nav > .section.active > .title { + background: #d5d5d5; + } + /* line 233, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.vertical-nav > section.active > .title a, .section-container.vertical-nav > .section.active > .title a { + color: #333; + } + /* line 237, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.vertical-nav > section:not(.active), .section-container.vertical-nav > .section:not(.active) { + padding: 0 !important; + } + + /* line 361, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='horizontal-nav'], .section-container.horizontal-nav { + width: 100%; + position: relative; + display: block; + margin-bottom: 1.25em; + } + /* line 49, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='horizontal-nav']:not([data-section-resized]):not([data-section-small-style]), .section-container.horizontal-nav:not([data-section-resized]):not([data-section-small-style]) { + visibility: hidden; + } + /* line 55, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='horizontal-nav'][data-section-small-style], .section-container.horizontal-nav[data-section-small-style] { + width: 100% !important; + } + /* line 58, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='horizontal-nav'][data-section-small-style] > [data-section-region], [data-section='horizontal-nav'][data-section-small-style] > section, [data-section='horizontal-nav'][data-section-small-style] > .section, .section-container.horizontal-nav[data-section-small-style] > [data-section-region], .section-container.horizontal-nav[data-section-small-style] > section, .section-container.horizontal-nav[data-section-small-style] > .section { + padding: 0 !important; + margin: 0 !important; + } + /* line 61, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='horizontal-nav'][data-section-small-style] > [data-section-region] > [data-section-title], [data-section='horizontal-nav'][data-section-small-style] > [data-section-region] > .title, [data-section='horizontal-nav'][data-section-small-style] > section > [data-section-title], [data-section='horizontal-nav'][data-section-small-style] > section > .title, [data-section='horizontal-nav'][data-section-small-style] > .section > [data-section-title], [data-section='horizontal-nav'][data-section-small-style] > .section > .title, .section-container.horizontal-nav[data-section-small-style] > [data-section-region] > [data-section-title], .section-container.horizontal-nav[data-section-small-style] > [data-section-region] > .title, .section-container.horizontal-nav[data-section-small-style] > section > [data-section-title], .section-container.horizontal-nav[data-section-small-style] > section > .title, .section-container.horizontal-nav[data-section-small-style] > .section > [data-section-title], .section-container.horizontal-nav[data-section-small-style] > .section > .title { + width: 100% !important; + } + /* line 363, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='horizontal-nav'] > section, [data-section='horizontal-nav'] > .section, [data-section='horizontal-nav'] > [data-section-region], .section-container.horizontal-nav > section, .section-container.horizontal-nav > .section, .section-container.horizontal-nav > [data-section-region] { + position: relative; + float: left; + } + /* line 102, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='horizontal-nav'] > section > [data-section-title], [data-section='horizontal-nav'] > section > .title, [data-section='horizontal-nav'] > .section > [data-section-title], [data-section='horizontal-nav'] > .section > .title, [data-section='horizontal-nav'] > [data-section-region] > [data-section-title], [data-section='horizontal-nav'] > [data-section-region] > .title, .section-container.horizontal-nav > section > [data-section-title], .section-container.horizontal-nav > section > .title, .section-container.horizontal-nav > .section > [data-section-title], .section-container.horizontal-nav > .section > .title, .section-container.horizontal-nav > [data-section-region] > [data-section-title], .section-container.horizontal-nav > [data-section-region] > .title { + margin-bottom: 0; + } + /* line 104, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='horizontal-nav'] > section > [data-section-title] a, [data-section='horizontal-nav'] > section > .title a, [data-section='horizontal-nav'] > .section > [data-section-title] a, [data-section='horizontal-nav'] > .section > .title a, [data-section='horizontal-nav'] > [data-section-region] > [data-section-title] a, [data-section='horizontal-nav'] > [data-section-region] > .title a, .section-container.horizontal-nav > section > [data-section-title] a, .section-container.horizontal-nav > section > .title a, .section-container.horizontal-nav > .section > [data-section-title] a, .section-container.horizontal-nav > .section > .title a, .section-container.horizontal-nav > [data-section-region] > [data-section-title] a, .section-container.horizontal-nav > [data-section-region] > .title a { + width: 100%; + display: inline-block; + white-space: nowrap; + } + /* line 111, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='horizontal-nav'] > section > [data-section-content], [data-section='horizontal-nav'] > section > .content, [data-section='horizontal-nav'] > .section > [data-section-content], [data-section='horizontal-nav'] > .section > .content, [data-section='horizontal-nav'] > [data-section-region] > [data-section-content], [data-section='horizontal-nav'] > [data-section-region] > .content, .section-container.horizontal-nav > section > [data-section-content], .section-container.horizontal-nav > section > .content, .section-container.horizontal-nav > .section > [data-section-content], .section-container.horizontal-nav > .section > .content, .section-container.horizontal-nav > [data-section-region] > [data-section-content], .section-container.horizontal-nav > [data-section-region] > .content { + display: none; + } + /* line 116, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='horizontal-nav'] > section.active > [data-section-content], [data-section='horizontal-nav'] > section.active > .content, [data-section='horizontal-nav'] > .section.active > [data-section-content], [data-section='horizontal-nav'] > .section.active > .content, [data-section='horizontal-nav'] > [data-section-region].active > [data-section-content], [data-section='horizontal-nav'] > [data-section-region].active > .content, .section-container.horizontal-nav > section.active > [data-section-content], .section-container.horizontal-nav > section.active > .content, .section-container.horizontal-nav > .section.active > [data-section-content], .section-container.horizontal-nav > .section.active > .content, .section-container.horizontal-nav > [data-section-region].active > [data-section-content], .section-container.horizontal-nav > [data-section-region].active > .content { + display: block; + } + /* line 119, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='horizontal-nav'] > section:not(.active), [data-section='horizontal-nav'] > .section:not(.active), [data-section='horizontal-nav'] > [data-section-region]:not(.active), .section-container.horizontal-nav > section:not(.active), .section-container.horizontal-nav > .section:not(.active), .section-container.horizontal-nav > [data-section-region]:not(.active) { + padding: 0 !important; + } + /* line 186, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='horizontal-nav'] > section > [data-section-title], [data-section='horizontal-nav'] > section > .title, [data-section='horizontal-nav'] > .section > [data-section-title], [data-section='horizontal-nav'] > .section > .title, [data-section='horizontal-nav'] > [data-section-region] > [data-section-title], [data-section='horizontal-nav'] > [data-section-region] > .title, .section-container.horizontal-nav > section > [data-section-title], .section-container.horizontal-nav > section > .title, .section-container.horizontal-nav > .section > [data-section-title], .section-container.horizontal-nav > .section > .title, .section-container.horizontal-nav > [data-section-region] > [data-section-title], .section-container.horizontal-nav > [data-section-region] > .title { + position: static; + width: auto; + } + /* line 189, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='horizontal-nav'] > section > [data-section-title] a, [data-section='horizontal-nav'] > section > .title a, [data-section='horizontal-nav'] > .section > [data-section-title] a, [data-section='horizontal-nav'] > .section > .title a, [data-section='horizontal-nav'] > [data-section-region] > [data-section-title] a, [data-section='horizontal-nav'] > [data-section-region] > .title a, .section-container.horizontal-nav > section > [data-section-title] a, .section-container.horizontal-nav > section > .title a, .section-container.horizontal-nav > .section > [data-section-title] a, .section-container.horizontal-nav > .section > .title a, .section-container.horizontal-nav > [data-section-region] > [data-section-title] a, .section-container.horizontal-nav > [data-section-region] > .title a { + display: block; + } + /* line 192, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + [data-section='horizontal-nav'] > section > [data-section-content], [data-section='horizontal-nav'] > section > .content, [data-section='horizontal-nav'] > .section > [data-section-content], [data-section='horizontal-nav'] > .section > .content, [data-section='horizontal-nav'] > [data-section-region] > [data-section-content], [data-section='horizontal-nav'] > [data-section-region] > .content, .section-container.horizontal-nav > section > [data-section-content], .section-container.horizontal-nav > section > .content, .section-container.horizontal-nav > .section > [data-section-content], .section-container.horizontal-nav > .section > .content, .section-container.horizontal-nav > [data-section-region] > [data-section-content], .section-container.horizontal-nav > [data-section-region] > .content { + width: auto; + position: absolute; + top: 0; + left: 0; + z-index: 999; + min-width: 12.5em; + } + + /* line 368, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.horizontal-nav { + background: #efefef; + border: 1px solid #ccc; + } + /* line 207, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.horizontal-nav > section > .title, .section-container.horizontal-nav > .section > .title { + background-color: #efefef; + cursor: pointer; + border: solid 1px #ccc; + } + /* line 211, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.horizontal-nav > section > .title a, .section-container.horizontal-nav > .section > .title a { + padding: 0.9375em; + color: #333; + font-size: 0.875em; + background: none; + } + /* line 217, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.horizontal-nav > section > .title:hover, .section-container.horizontal-nav > .section > .title:hover { + background-color: #e2e2e2; + } + /* line 220, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.horizontal-nav > section > .content, .section-container.horizontal-nav > .section > .content { + padding: 0.9375em; + background-color: #fff; + border: solid 1px #ccc; + } + /* line 225, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.horizontal-nav > section > .content > *:last-child, .section-container.horizontal-nav > .section > .content > *:last-child { + margin-bottom: 0; + } + /* line 226, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.horizontal-nav > section > .content > *:first-child, .section-container.horizontal-nav > .section > .content > *:first-child { + padding-top: 0; + } + /* line 227, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.horizontal-nav > section > .content > *:last-child:not(.flex-video), .section-container.horizontal-nav > .section > .content > *:last-child:not(.flex-video) { + padding-bottom: 0; + } + /* line 231, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.horizontal-nav > section.active > .title, .section-container.horizontal-nav > .section.active > .title { + background: #d5d5d5; + } + /* line 233, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.horizontal-nav > section.active > .title a, .section-container.horizontal-nav > .section.active > .title a { + color: #333; + } + /* line 237, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ + .section-container.horizontal-nav > section:not(.active), .section-container.horizontal-nav > .section:not(.active) { + padding: 0 !important; + } +} +/* line 378, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.no-js [data-section], .no-js .section-container { + width: 100%; + position: relative; + display: block; + margin-bottom: 1.25em; +} +/* line 55, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.no-js [data-section][data-section-small-style], .no-js .section-container[data-section-small-style] { + width: 100% !important; +} +/* line 58, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.no-js [data-section][data-section-small-style] > [data-section-region], .no-js [data-section][data-section-small-style] > section, .no-js [data-section][data-section-small-style] > .section, .no-js .section-container[data-section-small-style] > [data-section-region], .no-js .section-container[data-section-small-style] > section, .no-js .section-container[data-section-small-style] > .section { + padding: 0 !important; + margin: 0 !important; +} +/* line 61, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.no-js [data-section][data-section-small-style] > [data-section-region] > [data-section-title], .no-js [data-section][data-section-small-style] > [data-section-region] > .title, .no-js [data-section][data-section-small-style] > section > [data-section-title], .no-js [data-section][data-section-small-style] > section > .title, .no-js [data-section][data-section-small-style] > .section > [data-section-title], .no-js [data-section][data-section-small-style] > .section > .title, .no-js .section-container[data-section-small-style] > [data-section-region] > [data-section-title], .no-js .section-container[data-section-small-style] > [data-section-region] > .title, .no-js .section-container[data-section-small-style] > section > [data-section-title], .no-js .section-container[data-section-small-style] > section > .title, .no-js .section-container[data-section-small-style] > .section > [data-section-title], .no-js .section-container[data-section-small-style] > .section > .title { + width: 100% !important; +} +/* line 380, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.no-js [data-section] > section, .no-js [data-section] > .section, .no-js [data-section] > [data-section-region], .no-js .section-container > section, .no-js .section-container > .section, .no-js .section-container > [data-section-region] { + margin: 0; +} +/* line 102, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.no-js [data-section] > section > [data-section-title], .no-js [data-section] > section > .title, .no-js [data-section] > .section > [data-section-title], .no-js [data-section] > .section > .title, .no-js [data-section] > [data-section-region] > [data-section-title], .no-js [data-section] > [data-section-region] > .title, .no-js .section-container > section > [data-section-title], .no-js .section-container > section > .title, .no-js .section-container > .section > [data-section-title], .no-js .section-container > .section > .title, .no-js .section-container > [data-section-region] > [data-section-title], .no-js .section-container > [data-section-region] > .title { + margin-bottom: 0; +} +/* line 104, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.no-js [data-section] > section > [data-section-title] a, .no-js [data-section] > section > .title a, .no-js [data-section] > .section > [data-section-title] a, .no-js [data-section] > .section > .title a, .no-js [data-section] > [data-section-region] > [data-section-title] a, .no-js [data-section] > [data-section-region] > .title a, .no-js .section-container > section > [data-section-title] a, .no-js .section-container > section > .title a, .no-js .section-container > .section > [data-section-title] a, .no-js .section-container > .section > .title a, .no-js .section-container > [data-section-region] > [data-section-title] a, .no-js .section-container > [data-section-region] > .title a { + width: 100%; + display: inline-block; + white-space: nowrap; +} +/* line 111, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.no-js [data-section] > section > [data-section-content], .no-js [data-section] > section > .content, .no-js [data-section] > .section > [data-section-content], .no-js [data-section] > .section > .content, .no-js [data-section] > [data-section-region] > [data-section-content], .no-js [data-section] > [data-section-region] > .content, .no-js .section-container > section > [data-section-content], .no-js .section-container > section > .content, .no-js .section-container > .section > [data-section-content], .no-js .section-container > .section > .content, .no-js .section-container > [data-section-region] > [data-section-content], .no-js .section-container > [data-section-region] > .content { + display: none; +} +/* line 116, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.no-js [data-section] > section.active > [data-section-content], .no-js [data-section] > section.active > .content, .no-js [data-section] > .section.active > [data-section-content], .no-js [data-section] > .section.active > .content, .no-js [data-section] > [data-section-region].active > [data-section-content], .no-js [data-section] > [data-section-region].active > .content, .no-js .section-container > section.active > [data-section-content], .no-js .section-container > section.active > .content, .no-js .section-container > .section.active > [data-section-content], .no-js .section-container > .section.active > .content, .no-js .section-container > [data-section-region].active > [data-section-content], .no-js .section-container > [data-section-region].active > .content { + display: block; +} +/* line 119, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.no-js [data-section] > section:not(.active), .no-js [data-section] > .section:not(.active), .no-js [data-section] > [data-section-region]:not(.active), .no-js .section-container > section:not(.active), .no-js .section-container > .section:not(.active), .no-js .section-container > [data-section-region]:not(.active) { + padding: 0 !important; +} +/* line 126, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.no-js [data-section] > section > [data-section-title], .no-js [data-section] > section > .title, .no-js [data-section] > .section > [data-section-title], .no-js [data-section] > .section > .title, .no-js [data-section] > [data-section-region] > [data-section-title], .no-js [data-section] > [data-section-region] > .title, .no-js .section-container > section > [data-section-title], .no-js .section-container > section > .title, .no-js .section-container > .section > [data-section-title], .no-js .section-container > .section > .title, .no-js .section-container > [data-section-region] > [data-section-title], .no-js .section-container > [data-section-region] > .title { + width: 100%; +} +/* line 384, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.no-js .section-container { + border-top: 1px solid #ccc; +} +/* line 207, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.no-js .section-container > section > .title, .no-js .section-container > .section > .title { + background-color: #efefef; + cursor: pointer; + border: solid 1px #ccc; +} +/* line 211, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.no-js .section-container > section > .title a, .no-js .section-container > .section > .title a { + padding: 0.9375em; + color: #333; + font-size: 0.875em; + background: none; +} +/* line 217, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.no-js .section-container > section > .title:hover, .no-js .section-container > .section > .title:hover { + background-color: #e2e2e2; +} +/* line 220, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.no-js .section-container > section > .content, .no-js .section-container > .section > .content { + padding: 0.9375em; + background-color: #fff; + border: solid 1px #ccc; +} +/* line 225, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.no-js .section-container > section > .content > *:last-child, .no-js .section-container > .section > .content > *:last-child { + margin-bottom: 0; +} +/* line 226, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.no-js .section-container > section > .content > *:first-child, .no-js .section-container > .section > .content > *:first-child { + padding-top: 0; +} +/* line 227, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.no-js .section-container > section > .content > *:last-child:not(.flex-video), .no-js .section-container > .section > .content > *:last-child:not(.flex-video) { + padding-bottom: 0; +} +/* line 231, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.no-js .section-container > section.active > .title, .no-js .section-container > .section.active > .title { + background: #d5d5d5; +} +/* line 233, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.no-js .section-container > section.active > .title a, .no-js .section-container > .section.active > .title a { + color: #333; +} +/* line 237, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.no-js .section-container > section:not(.active), .no-js .section-container > .section:not(.active) { + padding: 0 !important; +} +/* line 243, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss */ +.no-js .section-container > section > .title, .no-js .section-container > .section > .title { + border-top: none; +} + +/* Wrapped around .top-bar to contain to grid width */ +/* line 72, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.contain-to-grid { + width: 100%; + background: #111; +} +/* line 76, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.contain-to-grid .top-bar { + margin-bottom: 0; +} + +/* line 80, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.fixed { + width: 100%; + left: 0; + position: fixed; + top: 0; + z-index: 99; +} +/* line 87, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.fixed.expanded:not(.top-bar) { + overflow-y: auto; + height: auto; + width: 100%; + max-height: 100%; +} +/* line 93, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.fixed.expanded:not(.top-bar) .title-area { + position: fixed; + width: 100%; + z-index: 99; +} +/* line 99, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.fixed.expanded:not(.top-bar) .top-bar-section { + z-index: 98; + margin-top: 45px; +} + +/* line 106, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar { + overflow: hidden; + height: 45px; + line-height: 45px; + position: relative; + background: #111; + margin-bottom: 0; +} +/* line 115, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar ul { + margin-bottom: 0; + list-style: none; +} +/* line 120, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar .row { + max-width: none; +} +/* line 122, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar form, +.top-bar input { + margin-bottom: 0; +} +/* line 125, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar input { + height: 2.45em; +} +/* line 127, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar .button { + padding-top: .5em; + padding-bottom: .5em; + margin-bottom: 0; +} +/* line 130, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar .title-area { + position: relative; + margin: 0; +} +/* line 135, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar .name { + height: 45px; + margin: 0; + font-size: 16px; +} +/* line 140, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar .name h1 { + line-height: 45px; + font-size: 1.0625em; + margin: 0; +} +/* line 144, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar .name h1 a { + font-weight: bold; + color: #fff; + width: 50%; + display: block; + padding: 0 15px; +} +/* line 155, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar .toggle-topbar { + position: absolute; + right: 0; + top: 0; +} +/* line 160, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar .toggle-topbar a { + color: #fff; + text-transform: uppercase; + font-size: 0.8125em; + font-weight: bold; + position: relative; + display: block; + padding: 0 15px; + height: 45px; + line-height: 45px; +} +/* line 173, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar .toggle-topbar.menu-icon { + right: 15px; + top: 50%; + margin-top: -16px; + padding-left: 40px; +} +/* line 179, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar .toggle-topbar.menu-icon a { + text-indent: -48px; + width: 34px; + height: 34px; + line-height: 33px; + padding: 0; + color: #fff; +} +/* line 187, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar .toggle-topbar.menu-icon a span { + position: absolute; + right: 0; + display: block; + width: 16px; + height: 0; + -webkit-box-shadow: 0 10px 0 1px #fff, 0 16px 0 1px #fff, 0 22px 0 1px #fff; + box-shadow: 0 10px 0 1px #fff, 0 16px 0 1px #fff, 0 22px 0 1px #fff; +} +/* line 208, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar.expanded { + height: auto; + background: transparent; +} +/* line 212, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar.expanded .title-area { + background: #111; +} +/* line 215, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar.expanded .toggle-topbar a { + color: #888; +} +/* line 216, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar.expanded .toggle-topbar a span { + -webkit-box-shadow: 0 10px 0 1px #888, 0 16px 0 1px #888, 0 22px 0 1px #888; + box-shadow: 0 10px 0 1px #888, 0 16px 0 1px #888, 0 22px 0 1px #888; +} + +/* line 234, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar-section { + left: 0; + position: relative; + width: auto; + -webkit-transition: left 300ms ease-out; + -moz-transition: left 300ms ease-out; + transition: left 300ms ease-out; +} +/* line 240, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar-section ul { + width: 100%; + height: auto; + display: block; + background: #222; + font-size: 16px; + margin: 0; +} +/* line 249, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar-section .divider, +.top-bar-section [role="separator"] { + border-bottom: solid 1px #2b2b2b; + border-top: solid 1px black; + clear: both; + height: 1px; + width: 100%; +} +/* line 259, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar-section ul li > a { + display: block; + width: 100%; + color: #fff; + padding: 12px 0 12px 0; + padding-left: 15px; + font-size: 0.8125em; + font-weight: bold; + background: #222; +} +/* line 269, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar-section ul li > a.button { + background: #2ba6cb; + font-size: 0.8125em; + padding-right: 15px; + padding-left: 15px; +} +/* line 274, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar-section ul li > a.button:hover { + background: #2284a1; +} +/* line 278, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar-section ul li > a.button.secondary { + background: #e9e9e9; +} +/* line 280, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar-section ul li > a.button.secondary:hover { + background: #d0d0d0; +} +/* line 284, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar-section ul li > a.button.success { + background: #5da423; +} +/* line 286, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar-section ul li > a.button.success:hover { + background: #457a1a; +} +/* line 290, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar-section ul li > a.button.alert { + background: #c60f13; +} +/* line 292, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar-section ul li > a.button.alert:hover { + background: #970b0e; +} +/* line 300, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar-section ul li:hover > a { + background: black; + color: #fff; +} +/* line 306, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar-section ul li.active > a { + background: #090909; + color: #fff; +} +/* line 313, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar-section .has-form { + padding: 15px; +} +/* line 316, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar-section .has-dropdown { + position: relative; +} +/* line 320, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar-section .has-dropdown > a:after { + content: ""; + display: block; + width: 0; + height: 0; + border: inset 5px; + border-color: transparent transparent transparent rgba(255, 255, 255, 0.5); + border-left-style: solid; + margin-right: 15px; + margin-top: -4.5px; + position: absolute; + top: 50%; + right: 0; +} +/* line 332, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar-section .has-dropdown.moved { + position: static; +} +/* line 333, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar-section .has-dropdown.moved > .dropdown { + display: block; +} +/* line 340, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar-section .dropdown { + position: absolute; + left: 100%; + top: 0; + display: none; + z-index: 99; +} +/* line 347, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar-section .dropdown li { + width: 100%; + height: auto; +} +/* line 351, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar-section .dropdown li a { + font-weight: normal; + padding: 8px 15px; +} +/* line 354, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar-section .dropdown li a.parent-link { + font-weight: bold; +} +/* line 359, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar-section .dropdown li.title h5 { + margin-bottom: 0; +} +/* line 360, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar-section .dropdown li.title h5 a { + color: #fff; + line-height: 22.5px; + display: block; +} +/* line 368, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar-section .dropdown label { + padding: 8px 15px 2px; + margin-bottom: 0; + text-transform: uppercase; + color: #555; + font-weight: bold; + font-size: 0.625em; +} + +/* line 380, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.top-bar-js-breakpoint { + width: 940px !important; + visibility: hidden; +} + +/* line 384, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ +.js-generated { + display: block; +} + +@media only screen and (min-width: 940px) { + /* line 389, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ + .top-bar { + background: #111; + *zoom: 1; + overflow: visible; + } + /* line 121, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss */ + .top-bar:before, .top-bar:after { + content: " "; + display: table; + } + /* line 122, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss */ + .top-bar:after { + clear: both; + } + /* line 394, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ + .top-bar .toggle-topbar { + display: none; + } + /* line 396, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ + .top-bar .title-area { + float: left; + } + /* line 397, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ + .top-bar .name h1 a { + width: auto; + } + /* line 399, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ + .top-bar input, + .top-bar .button { + line-height: 2em; + font-size: 0.875em; + height: 2em; + padding: 0 10px; + position: relative; + top: 8px; + } + /* line 409, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ + .top-bar.expanded { + background: #111; + } + + /* line 412, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ + .contain-to-grid .top-bar { + max-width: 62.5em; + margin: 0 auto; + margin-bottom: 0; + } + + /* line 418, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ + .top-bar-section { + -webkit-transition: none 0 0; + -moz-transition: none 0 0; + transition: none 0 0; + left: 0 !important; + } + /* line 422, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ + .top-bar-section ul { + width: auto; + height: auto !important; + display: inline; + } + /* line 427, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ + .top-bar-section ul li { + float: left; + } + /* line 429, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ + .top-bar-section ul li .js-generated { + display: none; + } + /* line 435, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ + .top-bar-section li.hover > a:not(.button) { + background: black; + color: #fff; + } + /* line 440, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ + .top-bar-section li a:not(.button) { + padding: 0 15px; + line-height: 45px; + background: #111; + } + /* line 444, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ + .top-bar-section li a:not(.button):hover { + background: black; + } + /* line 452, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ + .top-bar-section .has-dropdown > a { + padding-right: 35px !important; + } + /* line 454, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ + .top-bar-section .has-dropdown > a:after { + content: ""; + display: block; + width: 0; + height: 0; + border: inset 5px; + border-color: rgba(255, 255, 255, 0.5) transparent transparent transparent; + border-top-style: solid; + margin-top: -2.5px; + top: 22.5px; + } + /* line 463, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ + .top-bar-section .has-dropdown.moved { + position: relative; + } + /* line 464, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ + .top-bar-section .has-dropdown.moved > .dropdown { + display: none; + } + /* line 468, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ + .top-bar-section .has-dropdown.hover > .dropdown, .top-bar-section .has-dropdown.not-click:hover > .dropdown { + display: block; + } + /* line 475, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ + .top-bar-section .has-dropdown .dropdown li.has-dropdown > a:after { + border: none; + content: "\00bb"; + top: 1em; + margin-top: -7px; + right: 5px; + } + /* line 487, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ + .top-bar-section .dropdown { + left: 0; + top: auto; + background: transparent; + min-width: 100%; + } + /* line 494, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ + .top-bar-section .dropdown li a { + color: #fff; + line-height: 1; + white-space: nowrap; + padding: 7px 15px; + background: #1e1e1e; + } + /* line 502, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ + .top-bar-section .dropdown li label { + white-space: nowrap; + background: #1e1e1e; + } + /* line 508, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ + .top-bar-section .dropdown li .dropdown { + left: 100%; + top: 0; + } + /* line 515, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ + .top-bar-section > ul > .divider, .top-bar-section > ul > [role="separator"] { + border-bottom: none; + border-top: none; + border-right: solid 1px #2b2b2b; + border-left: solid 1px black; + clear: none; + height: 45px; + width: 0; + } + /* line 526, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ + .top-bar-section .has-form { + background: #111; + padding: 0 15px; + height: 45px; + } + /* line 534, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ + .top-bar-section ul.right li .dropdown { + left: auto; + right: 0; + } + /* line 538, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ + .top-bar-section ul.right li .dropdown li .dropdown { + right: 100%; + } + + /* line 548, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ + .no-js .top-bar-section ul li:hover > a { + background: black; + color: #fff; + } + /* line 554, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ + .no-js .top-bar-section ul li:active > a { + background: #090909; + color: #fff; + } + /* line 562, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss */ + .no-js .top-bar-section .has-dropdown:hover > .dropdown { + display: block; + } +} +@-webkit-keyframes rotate { + from { + -webkit-transform: rotate(0deg); + } + to { + -webkit-transform: rotate(360deg); + } +} +@-moz-keyframes rotate { + from { + -moz-transform: rotate(0deg); + } + to { + -moz-transform: rotate(360deg); + } +} +@-o-keyframes rotate { + from { + -o-transform: rotate(0deg); + } + to { + -o-transform: rotate(360deg); + } +} +@keyframes rotate { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} +/* Orbit Graceful Loading */ +/* line 61, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ +.slideshow-wrapper { + position: relative; +} +/* line 64, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ +.slideshow-wrapper ul { + list-style-type: none; + margin: 0; +} +/* line 70, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ +.slideshow-wrapper ul li, +.slideshow-wrapper ul li .orbit-caption { + display: none; +} +/* line 74, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ +.slideshow-wrapper ul li:first-child { + display: block; +} +/* line 77, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ +.slideshow-wrapper .orbit-container { + background-color: transparent; +} +/* line 80, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ +.slideshow-wrapper .orbit-container li { + display: block; +} +/* line 82, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ +.slideshow-wrapper .orbit-container li .orbit-caption { + display: block; +} + +/* line 88, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ +.preloader { + display: block; + width: 40px; + height: 40px; + position: absolute; + top: 50%; + left: 50%; + margin-top: -20px; + margin-left: -20px; + border: solid 3px; + border-color: #555 #fff; + -webkit-border-radius: 1000px; + border-radius: 1000px; + -webkit-animation-name: rotate; + -webkit-animation-duration: 1.5s; + -webkit-animation-iteration-count: infinite; + -webkit-animation-timing-function: linear; + -moz-animation-name: rotate; + -moz-animation-duration: 1.5s; + -moz-animation-iteration-count: infinite; + -moz-animation-timing-function: linear; + -o-animation-name: rotate; + -o-animation-duration: 1.5s; + -o-animation-iteration-count: infinite; + -o-animation-timing-function: linear; + animation-name: rotate; + animation-duration: 1.5s; + animation-iteration-count: infinite; + animation-timing-function: linear; +} + +/* line 120, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ +.orbit-container { + overflow: hidden; + width: 100%; + position: relative; + background: #f5f5f5; +} +/* line 126, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ +.orbit-container .orbit-slides-container { + list-style: none; + margin: 0; + padding: 0; + position: relative; +} +/* line 132, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ +.orbit-container .orbit-slides-container img { + display: block; + max-width: 100%; +} +/* line 134, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ +.orbit-container .orbit-slides-container > * { + position: absolute; + top: 0; + width: 100%; + margin-left: 100%; +} +/* line 145, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ +.orbit-container .orbit-slides-container > *:first-child { + margin-left: 0%; +} +/* line 154, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ +.orbit-container .orbit-slides-container > * .orbit-caption { + position: absolute; + bottom: 0; + background-color: rgba(0, 0, 0, 0.6); + color: #fff; + width: 100%; + padding: 10px 14px; + font-size: 0.875em; +} +/* line 171, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ +.orbit-container .orbit-slide-number { + position: absolute; + top: 10px; + left: 10px; + font-size: 12px; + color: #fff; + background: transparent; + z-index: 10; +} +/* line 176, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ +.orbit-container .orbit-slide-number span { + font-weight: 700; + padding: 0.3125em; +} +/* line 182, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ +.orbit-container .orbit-timer { + position: absolute; + top: 10px; + right: 10px; + height: 6px; + width: 100px; + z-index: 10; +} +/* line 189, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ +.orbit-container .orbit-timer .orbit-progress { + height: 100%; + background-color: rgba(0, 0, 0, 0.6); + display: block; + width: 0%; +} +/* line 199, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ +.orbit-container .orbit-timer > span { + display: none; + position: absolute; + top: 10px; + right: 0; + width: 11px; + height: 14px; + border: solid 4px #000; + border-top: none; + border-bottom: none; +} +/* line 213, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ +.orbit-container .orbit-timer.paused > span { + right: -6px; + top: 9px; + width: 11px; + height: 14px; + border: inset 8px; + border-right-style: solid; + border-color: transparent transparent transparent #000; +} +/* line 225, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ +.orbit-container:hover .orbit-timer > span { + display: block; +} +/* line 228, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ +.orbit-container .orbit-prev, +.orbit-container .orbit-next { + position: absolute; + top: 50%; + margin-top: -25px; + background-color: rgba(0, 0, 0, 0.6); + width: 50px; + height: 60px; + line-height: 50px; + color: white; + text-indent: -9999px !important; + z-index: 10; +} +/* line 241, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ +.orbit-container .orbit-prev:hover, +.orbit-container .orbit-next:hover { + background-color: rgba(0, 0, 0, 0.6); +} +/* line 245, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ +.orbit-container .orbit-prev > span, +.orbit-container .orbit-next > span { + position: absolute; + top: 50%; + margin-top: -16px; + display: block; + width: 0; + height: 0; + border: inset 16px; +} +/* line 255, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ +.orbit-container .orbit-prev { + left: 0; +} +/* line 256, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ +.orbit-container .orbit-prev > span { + border-right-style: solid; + border-color: transparent; + border-right-color: #fff; +} +/* line 261, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ +.orbit-container .orbit-prev:hover > span { + border-right-color: #ccc; +} +/* line 265, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ +.orbit-container .orbit-next { + right: 0; +} +/* line 266, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ +.orbit-container .orbit-next > span { + border-color: transparent; + border-left-style: solid; + border-left-color: #fff; + left: 50%; + margin-left: -8px; +} +/* line 273, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ +.orbit-container .orbit-next:hover > span { + border-left-color: #ccc; +} + +/* line 279, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ +.orbit-bullets { + margin: 0 auto 30px auto; + overflow: hidden; + position: relative; + top: 10px; +} +/* line 285, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ +.orbit-bullets li { + display: block; + width: 0.75em; + height: 0.75em; + background: #999; + float: left; + margin-right: 6px; + border: solid 1px #555; + -webkit-border-radius: 1000px; + border-radius: 1000px; +} +/* line 295, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ +.orbit-bullets li.active { + background: #555; +} +/* line 299, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ +.orbit-bullets li:last-child { + margin-right: 0; +} + +/* line 305, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ +.touch .orbit-container .orbit-prev, +.touch .orbit-container .orbit-next { + display: none; +} +/* line 309, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ +.touch .orbit-bullets { + display: none; +} + +@media only screen and (min-width: 768px) { + /* line 317, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ + .touch .orbit-container .orbit-prev, + .touch .orbit-container .orbit-next { + display: inherit; + } + /* line 321, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ + .touch .orbit-bullets { + display: block; + } +} +@media only screen and (max-width: 768px) { + /* line 328, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ + .orbit-stack-on-small .orbit-slides-container { + height: auto !important; + } + /* line 329, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ + .orbit-stack-on-small .orbit-slides-container > * { + position: relative; + margin-left: 0% !important; + } + /* line 333, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss */ + .orbit-stack-on-small .orbit-timer, + .orbit-stack-on-small .orbit-next, + .orbit-stack-on-small .orbit-prev, + .orbit-stack-on-small .orbit-bullets { + display: none; + } +} +/* line 109, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_reveal.scss */ +.reveal-modal-bg { + position: fixed; + height: 100%; + width: 100%; + background: #000; + background: rgba(0, 0, 0, 0.45); + z-index: 98; + display: none; + top: 0; + left: 0; +} + +/* line 111, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_reveal.scss */ +.reveal-modal { + visibility: hidden; + display: none; + position: absolute; + left: 50%; + z-index: 99; + height: auto; + margin-left: -40%; + width: 80%; + background-color: #fff; + padding: 1.25em; + border: solid 1px #666; + -webkit-box-shadow: 0 0 10px rgba(0, 0, 0, 0.4); + box-shadow: 0 0 10px rgba(0, 0, 0, 0.4); + top: 50px; +} +/* line 61, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_reveal.scss */ +.reveal-modal .column, +.reveal-modal .columns { + min-width: 0; +} +/* line 65, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_reveal.scss */ +.reveal-modal > :first-child { + margin-top: 0; +} +/* line 66, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_reveal.scss */ +.reveal-modal > :last-child { + margin-bottom: 0; +} +/* line 115, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_reveal.scss */ +.reveal-modal .close-reveal-modal { + font-size: 1.375em; + line-height: 1; + position: absolute; + top: 0.5em; + right: 0.6875em; + color: #aaa; + font-weight: bold; + cursor: pointer; +} + +@media only screen and (min-width: 768px) { + /* line 121, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_reveal.scss */ + .reveal-modal { + padding: 1.875em; + top: 6.25em; + } + /* line 124, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_reveal.scss */ + .reveal-modal.tiny { + margin-left: -15%; + width: 30%; + } + /* line 125, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_reveal.scss */ + .reveal-modal.small { + margin-left: -20%; + width: 40%; + } + /* line 126, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_reveal.scss */ + .reveal-modal.medium { + margin-left: -30%; + width: 60%; + } + /* line 127, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_reveal.scss */ + .reveal-modal.large { + margin-left: -35%; + width: 70%; + } + /* line 128, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_reveal.scss */ + .reveal-modal.xlarge { + margin-left: -47.5%; + width: 95%; + } +} +@media print { + /* line 134, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_reveal.scss */ + .reveal-modal { + background: #fff !important; + } +} +/* Foundation Joyride */ +/* line 41, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_joyride.scss */ +.joyride-list { + display: none; +} + +/* Default styles for the container */ +/* line 44, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_joyride.scss */ +.joyride-tip-guide { + display: none; + position: absolute; + background: black; + color: #fff; + z-index: 101; + top: 0; + left: 2.5%; + font-family: inherit; + font-weight: normal; + width: 95%; +} + +/* line 57, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_joyride.scss */ +.lt-ie9 .joyride-tip-guide { + max-width: 800px; + left: 50%; + margin-left: -400px; +} + +/* line 63, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_joyride.scss */ +.joyride-content-wrapper { + width: 100%; + padding: 1.125em 1.25em 1.5em; +} +/* line 68, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_joyride.scss */ +.joyride-content-wrapper .button { + margin-bottom: 0 !important; +} + +/* Add a little css triangle pip, older browser just miss out on the fanciness of it */ +/* line 73, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_joyride.scss */ +.joyride-tip-guide .joyride-nub { + display: block; + position: absolute; + left: 22px; + width: 0; + height: 0; + border: inset 14px; +} +/* line 81, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_joyride.scss */ +.joyride-tip-guide .joyride-nub.top { + border-top-style: solid; + border-color: black; + border-top-color: transparent !important; + border-left-color: transparent !important; + border-right-color: transparent !important; + top: -28px; +} +/* line 89, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_joyride.scss */ +.joyride-tip-guide .joyride-nub.bottom { + border-bottom-style: solid; + border-color: black !important; + border-bottom-color: transparent !important; + border-left-color: transparent !important; + border-right-color: transparent !important; + bottom: -28px; +} +/* line 98, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_joyride.scss */ +.joyride-tip-guide .joyride-nub.right { + right: -28px; +} +/* line 99, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_joyride.scss */ +.joyride-tip-guide .joyride-nub.left { + left: -28px; +} + +/* Typography */ +/* line 104, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_joyride.scss */ +.joyride-tip-guide h1, +.joyride-tip-guide h2, +.joyride-tip-guide h3, +.joyride-tip-guide h4, +.joyride-tip-guide h5, +.joyride-tip-guide h6 { + line-height: 1.25; + margin: 0; + font-weight: bold; + color: #fff; +} + +/* line 115, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_joyride.scss */ +.joyride-tip-guide p { + margin: 0 0 1.125em 0; + font-size: 0.875em; + line-height: 1.3; +} + +/* line 121, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_joyride.scss */ +.joyride-timer-indicator-wrap { + width: 50px; + height: 3px; + border: solid 1px #555; + position: absolute; + right: 1.0625em; + bottom: 1em; +} + +/* line 129, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_joyride.scss */ +.joyride-timer-indicator { + display: block; + width: 0; + height: inherit; + background: #666; +} + +/* line 136, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_joyride.scss */ +.joyride-close-tip { + position: absolute; + right: 12px; + top: 10px; + color: #777 !important; + text-decoration: none; + font-size: 30px; + font-weight: normal; + line-height: .5 !important; +} +/* line 146, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_joyride.scss */ +.joyride-close-tip:hover, .joyride-close-tip:focus { + color: #eee !important; +} + +/* line 150, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_joyride.scss */ +.joyride-modal-bg { + position: fixed; + height: 100%; + width: 100%; + background: transparent; + background: rgba(0, 0, 0, 0.5); + z-index: 100; + display: none; + top: 0; + left: 0; + cursor: pointer; +} + +/* line 163, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_joyride.scss */ +.joyride-expose-wrapper { + background-color: #ffffff; + position: absolute; + border-radius: 3px; + z-index: 102; + -moz-box-shadow: 0 0 30px #ffffff; + -webkit-box-shadow: 0 0 15px #ffffff; + box-shadow: 0 0 15px #ffffff; +} + +/* line 175, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_joyride.scss */ +.joyride-expose-cover { + background: transparent; + border-radius: 3px; + position: absolute; + z-index: 9999; + top: 0; + left: 0; +} + +/* Styles for screens that are atleast 768px; */ +@media only screen and (min-width: 768px) { + /* line 187, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_joyride.scss */ + .joyride-tip-guide { + width: 300px; + left: inherit; + } + /* line 189, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_joyride.scss */ + .joyride-tip-guide .joyride-nub.bottom { + border-color: black !important; + border-bottom-color: transparent !important; + border-left-color: transparent !important; + border-right-color: transparent !important; + bottom: -28px; + } + /* line 196, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_joyride.scss */ + .joyride-tip-guide .joyride-nub.right { + border-color: black !important; + border-top-color: transparent !important; + border-right-color: transparent !important; + border-bottom-color: transparent !important; + top: 22px; + left: auto; + right: -28px; + } + /* line 204, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_joyride.scss */ + .joyride-tip-guide .joyride-nub.left { + border-color: black !important; + border-top-color: transparent !important; + border-left-color: transparent !important; + border-bottom-color: transparent !important; + top: 22px; + left: -28px; + right: auto; + } +} +/* Clearing Styles */ +/* line 36, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_clearing.scss */ +[data-clearing] { + *zoom: 1; + margin-bottom: 0; + margin-left: 0; + list-style: none; +} +/* line 121, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss */ +[data-clearing]:before, [data-clearing]:after { + content: " "; + display: table; +} +/* line 122, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss */ +[data-clearing]:after { + clear: both; +} +/* line 42, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_clearing.scss */ +[data-clearing] li { + float: left; + margin-right: 10px; +} + +/* line 48, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_clearing.scss */ +.clearing-blackout { + background: #111; + position: fixed; + width: 100%; + height: 100%; + top: 0; + left: 0; + z-index: 998; +} +/* line 57, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_clearing.scss */ +.clearing-blackout .clearing-close { + display: block; +} + +/* line 60, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_clearing.scss */ +.clearing-container { + position: relative; + z-index: 998; + height: 100%; + overflow: hidden; + margin: 0; +} + +/* line 68, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_clearing.scss */ +.visible-img { + height: 95%; + position: relative; +} +/* line 72, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_clearing.scss */ +.visible-img img { + position: absolute; + left: 50%; + top: 50%; + margin-left: -50%; + max-height: 100%; + max-width: 100%; +} + +/* line 82, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_clearing.scss */ +.clearing-caption { + color: #fff; + line-height: 1.3; + margin-bottom: 0; + text-align: center; + bottom: 0; + background: #111; + width: 100%; + padding: 10px 30px; + position: absolute; + left: 0; +} + +/* line 95, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_clearing.scss */ +.clearing-close { + z-index: 999; + padding-left: 20px; + padding-top: 10px; + font-size: 40px; + line-height: 1; + color: #fff; + display: none; +} +/* line 104, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_clearing.scss */ +.clearing-close:hover, .clearing-close:focus { + color: #ccc; +} + +/* line 108, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_clearing.scss */ +.clearing-assembled .clearing-container { + height: 100%; +} +/* line 109, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_clearing.scss */ +.clearing-assembled .clearing-container .carousel > ul { + display: none; +} + +/* line 113, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_clearing.scss */ +.clearing-feature li { + display: none; +} +/* line 115, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_clearing.scss */ +.clearing-feature li.clearing-featured-img { + display: block; +} + +@media only screen and (min-width: 768px) { + /* line 122, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_clearing.scss */ + .clearing-main-prev, + .clearing-main-next { + position: absolute; + height: 100%; + width: 40px; + top: 0; + } + /* line 128, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_clearing.scss */ + .clearing-main-prev > span, + .clearing-main-next > span { + position: absolute; + top: 50%; + display: block; + width: 0; + height: 0; + border: solid 16px; + } + + /* line 137, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_clearing.scss */ + .clearing-main-prev { + left: 0; + } + /* line 139, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_clearing.scss */ + .clearing-main-prev > span { + left: 5px; + border-color: transparent; + border-right-color: #fff; + } + + /* line 145, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_clearing.scss */ + .clearing-main-next { + right: 0; + } + /* line 147, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_clearing.scss */ + .clearing-main-next > span { + border-color: transparent; + border-left-color: #fff; + } + + /* line 153, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_clearing.scss */ + .clearing-main-prev.disabled, + .clearing-main-next.disabled { + opacity: 0.5; + } + + /* line 158, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_clearing.scss */ + .clearing-assembled .clearing-container .carousel { + background: #111; + height: 150px; + margin-top: 5px; + } + /* line 163, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_clearing.scss */ + .clearing-assembled .clearing-container .carousel > ul { + display: block; + z-index: 999; + width: 200%; + height: 100%; + margin-left: 0; + position: relative; + left: 0; + } + /* line 172, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_clearing.scss */ + .clearing-assembled .clearing-container .carousel > ul li { + display: block; + width: 175px; + height: inherit; + padding: 0; + float: left; + overflow: hidden; + margin-right: 1px; + position: relative; + cursor: pointer; + opacity: 0.4; + } + /* line 185, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_clearing.scss */ + .clearing-assembled .clearing-container .carousel > ul li.fix-height img { + min-height: 100%; + height: 100%; + max-width: none; + } + /* line 192, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_clearing.scss */ + .clearing-assembled .clearing-container .carousel > ul li a.th { + border: none; + -webkit-box-shadow: none; + box-shadow: none; + display: block; + } + /* line 201, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_clearing.scss */ + .clearing-assembled .clearing-container .carousel > ul li img { + cursor: pointer !important; + min-width: 100% !important; + } + /* line 206, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_clearing.scss */ + .clearing-assembled .clearing-container .carousel > ul li.visible { + opacity: 1; + } + /* line 211, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_clearing.scss */ + .clearing-assembled .clearing-container .visible-img { + background: #111; + overflow: hidden; + height: 75%; + } + + /* line 218, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_clearing.scss */ + .clearing-close { + position: absolute; + top: 10px; + right: 20px; + padding-left: 0; + padding-top: 0; + } +} +/* Foundation Alerts */ +/* line 94, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_alert-boxes.scss */ +.alert-box { + border-style: solid; + border-width: 1px; + display: block; + font-weight: bold; + margin-bottom: 1.25em; + position: relative; + padding: 0.6875em 1.3125em 0.75em 0.6875em; + font-size: 0.875em; + background-color: #2ba6cb; + border-color: #2284a1; + color: #fff; +} +/* line 97, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_alert-boxes.scss */ +.alert-box .close { + font-size: 1.375em; + padding: 5px 4px 4px; + line-height: 0; + position: absolute; + top: 0.4375em; + right: 0.3125em; + color: #333; + opacity: 0.3; +} +/* line 80, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_alert-boxes.scss */ +.alert-box .close:hover, .alert-box .close:focus { + opacity: 0.5; +} +/* line 99, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_alert-boxes.scss */ +.alert-box.radius { + -webkit-border-radius: 3px; + border-radius: 3px; +} +/* line 100, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_alert-boxes.scss */ +.alert-box.round { + -webkit-border-radius: 1000px; + border-radius: 1000px; +} +/* line 102, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_alert-boxes.scss */ +.alert-box.success { + background-color: #5da423; + border-color: #457a1a; + color: #fff; +} +/* line 103, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_alert-boxes.scss */ +.alert-box.alert { + background-color: #c60f13; + border-color: #970b0e; + color: #fff; +} +/* line 104, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_alert-boxes.scss */ +.alert-box.secondary { + background-color: #e9e9e9; + border-color: #d0d0d0; + color: #505050; +} + +/* Breadcrumbs */ +/* line 115, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_breadcrumbs.scss */ +.breadcrumbs { + display: block; + padding: 0.5625em 0.875em 0.5625em; + overflow: hidden; + margin-left: 0; + list-style: none; + border-style: solid; + border-width: 1px; + background-color: #f6f6f6; + border-color: gainsboro; + -webkit-border-radius: 3px; + border-radius: 3px; +} +/* line 119, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_breadcrumbs.scss */ +.breadcrumbs > * { + margin: 0; + float: left; + font-size: 0.6875em; + text-transform: uppercase; +} +/* line 60, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_breadcrumbs.scss */ +.breadcrumbs > *:hover a, .breadcrumbs > *:focus a { + text-decoration: underline; +} +/* line 62, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_breadcrumbs.scss */ +.breadcrumbs > * a, +.breadcrumbs > * span { + text-transform: uppercase; + color: #2ba6cb; +} +/* line 69, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_breadcrumbs.scss */ +.breadcrumbs > *.current { + cursor: default; + color: #333; +} +/* line 72, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_breadcrumbs.scss */ +.breadcrumbs > *.current a { + cursor: default; + color: #333; +} +/* line 77, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_breadcrumbs.scss */ +.breadcrumbs > *.current:hover, .breadcrumbs > *.current:hover a, .breadcrumbs > *.current:focus, .breadcrumbs > *.current:focus a { + text-decoration: none; +} +/* line 82, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_breadcrumbs.scss */ +.breadcrumbs > *.unavailable { + color: #999; +} +/* line 84, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_breadcrumbs.scss */ +.breadcrumbs > *.unavailable a { + color: #999; +} +/* line 86, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_breadcrumbs.scss */ +.breadcrumbs > *.unavailable:hover, .breadcrumbs > *.unavailable:hover a, .breadcrumbs > *.unavailable:focus, +.breadcrumbs > *.unavailable a:focus { + text-decoration: none; + color: #999; + cursor: default; +} +/* line 96, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_breadcrumbs.scss */ +.breadcrumbs > *:before { + content: "/"; + color: #aaa; + margin: 0 0.75em; + position: relative; + top: 1px; +} +/* line 104, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_breadcrumbs.scss */ +.breadcrumbs > *:first-child:before { + content: " "; + margin: 0; +} + +/* Custom Checkbox and Radio Inputs */ +/* line 67, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_custom-forms.scss */ +form.custom .hidden-field { + margin-left: -99999px; + position: absolute; + visibility: hidden; +} +/* line 73, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_custom-forms.scss */ +form.custom .custom { + display: inline-block; + width: 16px; + height: 16px; + position: relative; + top: -1px; + /* fix centering issue */ + vertical-align: middle; + border: solid 1px #ccc; + background: #fff; +} +/* line 83, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_custom-forms.scss */ +form.custom .custom.checkbox { + -webkit-border-radius: 0; + border-radius: 0; + padding: 0; +} +/* line 87, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_custom-forms.scss */ +form.custom .custom.radio { + -webkit-border-radius: 1000px; + border-radius: 1000px; + padding: 3px; +} +/* line 92, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_custom-forms.scss */ +form.custom .custom.checkbox:before { + content: ""; + display: block; + font-size: 16px; + color: #fff; +} +/* line 101, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_custom-forms.scss */ +form.custom .custom.radio.checked:before { + content: ""; + display: block; + width: 8px; + height: 8px; + -webkit-border-radius: 1000px; + border-radius: 1000px; + background: #222; + position: relative; +} +/* line 113, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_custom-forms.scss */ +form.custom .custom.checkbox.checked:before { + content: "\00d7"; + color: #222; + position: absolute; + top: -50%; + left: 50%; + margin-top: 4px; + margin-left: -5px; +} + +/* Custom Select Options and Dropdowns */ +/* line 127, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_custom-forms.scss */ +form.custom { + /* Custom input, disabled */ +} +/* line 128, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_custom-forms.scss */ +form.custom .custom.dropdown { + display: block; + position: relative; + top: 0; + height: 2.3125em; + margin-bottom: 1.25em; + margin-top: 0; + padding: 0; + width: 100%; + background: #fff; + background: -moz-linear-gradient(top, #fff 0%, #f3f3f3 100%); + background: -webkit-linear-gradient(top, #fff 0%, #f3f3f3 100%); + -webkit-box-shadow: none; + background: linear-gradient(to bottom, #fff 0%, #f3f3f3 100%); + box-shadow: none; + font-size: 0.875em; + vertical-align: top; +} +/* line 148, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_custom-forms.scss */ +form.custom .custom.dropdown ul { + overflow-y: auto; + max-height: 200px; +} +/* line 153, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_custom-forms.scss */ +form.custom .custom.dropdown .current { + cursor: default; + white-space: nowrap; + line-height: 2.25em; + color: rgba(0, 0, 0, 0.75); + text-decoration: none; + overflow: hidden; + display: block; + margin-left: 0.5em; + margin-right: 2.3125em; +} +/* line 165, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_custom-forms.scss */ +form.custom .custom.dropdown .selector { + cursor: default; + position: absolute; + width: 2.5em; + height: 2.3125em; + display: block; + right: 0; + top: 0; +} +/* line 173, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_custom-forms.scss */ +form.custom .custom.dropdown .selector:after { + content: ""; + display: block; + content: ""; + display: block; + width: 0; + height: 0; + border: inset 5px; + border-color: #aaa transparent transparent transparent; + border-top-style: solid; + position: absolute; + left: 0.9375em; + top: 50%; + margin-top: -3px; +} +/* line 186, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_custom-forms.scss */ +form.custom .custom.dropdown:hover a.selector:after, form.custom .custom.dropdown.open a.selector:after { + content: ""; + display: block; + width: 0; + height: 0; + border: inset 5px; + border-color: #222 transparent transparent transparent; + border-top-style: solid; +} +/* line 190, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_custom-forms.scss */ +form.custom .custom.dropdown .disabled { + color: #888; +} +/* line 192, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_custom-forms.scss */ +form.custom .custom.dropdown .disabled:hover { + background: transparent; + color: #888; +} +/* line 195, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_custom-forms.scss */ +form.custom .custom.dropdown .disabled:hover:after { + display: none; +} +/* line 199, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_custom-forms.scss */ +form.custom .custom.dropdown.open ul { + display: block; + z-index: 10; + min-width: 100%; + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box; +} +/* line 206, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_custom-forms.scss */ +form.custom .custom.dropdown.small { + max-width: 134px; +} +/* line 207, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_custom-forms.scss */ +form.custom .custom.dropdown.medium { + max-width: 254px; +} +/* line 208, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_custom-forms.scss */ +form.custom .custom.dropdown.large { + max-width: 434px; +} +/* line 209, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_custom-forms.scss */ +form.custom .custom.dropdown.expand { + width: 100% !important; +} +/* line 211, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_custom-forms.scss */ +form.custom .custom.dropdown.open.small ul { + min-width: 134px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +/* line 212, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_custom-forms.scss */ +form.custom .custom.dropdown.open.medium ul { + min-width: 254px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +/* line 213, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_custom-forms.scss */ +form.custom .custom.dropdown.open.large ul { + min-width: 434px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +/* line 216, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_custom-forms.scss */ +form.custom .error .custom.dropdown { + border-color: #c60f13; + background-color: rgba(198, 15, 19, 0.1); + background: rgba(198, 15, 19, 0.1); + margin-bottom: 0; +} +/* line 236, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss */ +form.custom .error .custom.dropdown:focus { + background: #fafafa; + border-color: #999999; +} +/* line 222, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_custom-forms.scss */ +form.custom .error .custom.dropdown + small.error { + margin-top: 0; +} +/* line 226, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_custom-forms.scss */ +form.custom .custom.dropdown ul { + position: absolute; + width: auto; + display: none; + margin: 0; + left: -1px; + top: auto; + -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.1); + margin: 0; + padding: 0; + background: #fff; + border: solid 1px #cccccc; + font-size: 16px; +} +/* line 243, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_custom-forms.scss */ +form.custom .custom.dropdown ul li { + color: #555; + font-size: 0.875em; + cursor: default; + padding-top: 0.25em; + padding-bottom: 0.25em; + padding-left: 0.375em; + padding-right: 2.375em; + min-height: 1.5em; + line-height: 1.5em; + margin: 0; + white-space: nowrap; + list-style: none; +} +/* line 257, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_custom-forms.scss */ +form.custom .custom.dropdown ul li.selected { + background: #eeeeee; + color: #000; +} +/* line 261, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_custom-forms.scss */ +form.custom .custom.dropdown ul li:hover { + background-color: #e4e4e4; + color: #000; +} +/* line 265, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_custom-forms.scss */ +form.custom .custom.dropdown ul li.selected:hover { + background: #eeeeee; + cursor: default; + color: #000; +} +/* line 272, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_custom-forms.scss */ +form.custom .custom.dropdown ul.show { + display: block; +} +/* line 276, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_custom-forms.scss */ +form.custom .custom.disabled { + background: #ddd; +} + +/* Keystroke Characters */ +/* line 51, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_keystrokes.scss */ +.keystroke, +kbd { + background-color: #ededed; + border-color: #dbdbdb; + color: #222; + border-style: solid; + border-width: 1px; + margin: 0; + font-family: "Consolas", "Menlo", "Courier", monospace; + font-size: 0.875em; + padding: 0.125em 0.25em 0; + -webkit-border-radius: 3px; + border-radius: 3px; +} + +/* Labels */ +/* line 71, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_labels.scss */ +.label { + font-weight: bold; + text-align: center; + text-decoration: none; + line-height: 1; + white-space: nowrap; + display: inline-block; + position: relative; + padding: 0.1875em 0.625em 0.25em; + font-size: 0.875em; + background-color: #2ba6cb; + color: #fff; +} +/* line 77, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_labels.scss */ +.label.radius { + -webkit-border-radius: 3px; + border-radius: 3px; +} +/* line 78, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_labels.scss */ +.label.round { + -webkit-border-radius: 1000px; + border-radius: 1000px; +} +/* line 80, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_labels.scss */ +.label.alert { + background-color: #c60f13; + color: #fff; +} +/* line 81, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_labels.scss */ +.label.success { + background-color: #5da423; + color: #fff; +} +/* line 82, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_labels.scss */ +.label.secondary { + background-color: #e9e9e9; + color: #333; +} + +/* Inline Lists */ +/* line 49, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_inline-lists.scss */ +.inline-list { + margin: 0 auto 1.0625em auto; + margin-left: -1.375em; + margin-right: 0; + padding: 0; + list-style: none; + overflow: hidden; +} +/* line 36, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_inline-lists.scss */ +.inline-list > li { + list-style: none; + float: left; + margin-left: 1.375em; + display: block; +} +/* line 41, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_inline-lists.scss */ +.inline-list > li > * { + display: block; +} + +/* Default Pagination */ +/* line 128, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_pagination.scss */ +ul.pagination { + display: block; + height: 1.5em; + margin-left: -0.3125em; +} +/* line 87, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_pagination.scss */ +ul.pagination li { + height: 1.5em; + color: #222; + font-size: 0.875em; + margin-left: 0.3125em; +} +/* line 93, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_pagination.scss */ +ul.pagination li a { + display: block; + padding: 0.0625em 0.4375em 0.0625em; + color: #999; +} +/* line 99, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_pagination.scss */ +ul.pagination li:hover a, +ul.pagination li a:focus { + background: #e6e6e6; +} +/* line 45, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_pagination.scss */ +ul.pagination li.unavailable a { + cursor: default; + color: #999; +} +/* line 49, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_pagination.scss */ +ul.pagination li.unavailable:hover a, ul.pagination li.unavailable a:focus { + background: transparent; +} +/* line 57, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_pagination.scss */ +ul.pagination li.current a { + background: #2ba6cb; + color: #fff; + font-weight: bold; + cursor: default; +} +/* line 63, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_pagination.scss */ +ul.pagination li.current a:hover, ul.pagination li.current a:focus { + background: #2ba6cb; +} +/* line 110, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_pagination.scss */ +ul.pagination li { + float: left; + display: block; +} + +/* Pagination centred wrapper */ +/* line 133, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_pagination.scss */ +.pagination-centered { + text-align: center; +} +/* line 110, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_pagination.scss */ +.pagination-centered ul.pagination li { + float: none; + display: inline-block; +} + +/* Panels */ +/* line 66, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_panels.scss */ +.panel { + border-style: solid; + border-width: 1px; + border-color: #d9d9d9; + margin-bottom: 1.25em; + padding: 1.25em; + background: #f2f2f2; +} +/* line 44, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_panels.scss */ +.panel > :first-child { + margin-top: 0; +} +/* line 45, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_panels.scss */ +.panel > :last-child { + margin-bottom: 0; +} +/* line 50, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_panels.scss */ +.panel h1, .panel h2, .panel h3, .panel h4, .panel h5, .panel h6, .panel p { + color: #333; +} +/* line 54, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_panels.scss */ +.panel h1, .panel h2, .panel h3, .panel h4, .panel h5, .panel h6 { + line-height: 1; + margin-bottom: 0.625em; +} +/* line 56, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_panels.scss */ +.panel h1.subheader, .panel h2.subheader, .panel h3.subheader, .panel h4.subheader, .panel h5.subheader, .panel h6.subheader { + line-height: 1.4; +} +/* line 68, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_panels.scss */ +.panel.callout { + border-style: solid; + border-width: 1px; + border-color: #2284a1; + margin-bottom: 1.25em; + padding: 1.25em; + background: #2ba6cb; + -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5) inset; + box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5) inset; +} +/* line 44, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_panels.scss */ +.panel.callout > :first-child { + margin-top: 0; +} +/* line 45, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_panels.scss */ +.panel.callout > :last-child { + margin-bottom: 0; +} +/* line 51, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_panels.scss */ +.panel.callout h1, .panel.callout h2, .panel.callout h3, .panel.callout h4, .panel.callout h5, .panel.callout h6, .panel.callout p { + color: #fff; +} +/* line 54, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_panels.scss */ +.panel.callout h1, .panel.callout h2, .panel.callout h3, .panel.callout h4, .panel.callout h5, .panel.callout h6 { + line-height: 1; + margin-bottom: 0.625em; +} +/* line 56, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_panels.scss */ +.panel.callout h1.subheader, .panel.callout h2.subheader, .panel.callout h3.subheader, .panel.callout h4.subheader, .panel.callout h5.subheader, .panel.callout h6.subheader { + line-height: 1.4; +} +/* line 71, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_panels.scss */ +.panel.callout a { + color: #fff; +} +/* line 76, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_panels.scss */ +.panel.radius { + -webkit-border-radius: 3px; + border-radius: 3px; +} + +/* Pricing Tables */ +/* line 121, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_pricing-tables.scss */ +.pricing-table { + border: solid 1px #ddd; + margin-left: 0; + margin-bottom: 1.25em; +} +/* line 61, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_pricing-tables.scss */ +.pricing-table * { + list-style: none; + line-height: 1; +} +/* line 124, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_pricing-tables.scss */ +.pricing-table .title { + background-color: #ddd; + padding: 0.9375em 1.25em; + text-align: center; + color: #333; + font-weight: bold; + font-size: 1em; +} +/* line 125, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_pricing-tables.scss */ +.pricing-table .price { + background-color: #eee; + padding: 0.9375em 1.25em; + text-align: center; + color: #333; + font-weight: normal; + font-size: 1.25em; +} +/* line 126, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_pricing-tables.scss */ +.pricing-table .description { + background-color: #fff; + padding: 0.9375em; + text-align: center; + color: #777; + font-size: 0.75em; + font-weight: normal; + line-height: 1.4; + border-bottom: dotted 1px #ddd; +} +/* line 127, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_pricing-tables.scss */ +.pricing-table .bullet-item { + background-color: #fff; + padding: 0.9375em; + text-align: center; + color: #333; + font-size: 0.875em; + font-weight: normal; + border-bottom: dotted 1px #ddd; +} +/* line 128, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_pricing-tables.scss */ +.pricing-table .cta-button { + background-color: #f5f5f5; + text-align: center; + padding: 1.25em 1.25em 0; +} + +/* Progress Bar */ +/* line 50, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_progress-bars.scss */ +.progress { + background-color: transparent; + height: 1.5625em; + border: 1px solid #cccccc; + padding: 0.125em; + margin-bottom: 0.625em; +} +/* line 54, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_progress-bars.scss */ +.progress .meter { + background: #2ba6cb; + height: 100%; + display: block; +} +/* line 57, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_progress-bars.scss */ +.progress.secondary .meter { + background: #e9e9e9; + height: 100%; + display: block; +} +/* line 58, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_progress-bars.scss */ +.progress.success .meter { + background: #5da423; + height: 100%; + display: block; +} +/* line 59, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_progress-bars.scss */ +.progress.alert .meter { + background: #c60f13; + height: 100%; + display: block; +} +/* line 61, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_progress-bars.scss */ +.progress.radius { + -webkit-border-radius: 3px; + border-radius: 3px; +} +/* line 62, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_progress-bars.scss */ +.progress.radius .meter { + -webkit-border-radius: 2px; + border-radius: 2px; +} +/* line 65, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_progress-bars.scss */ +.progress.round { + -webkit-border-radius: 1000px; + border-radius: 1000px; +} +/* line 66, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_progress-bars.scss */ +.progress.round .meter { + -webkit-border-radius: 999px; + border-radius: 999px; +} + +/* Side Nav */ +/* line 67, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_side-nav.scss */ +.side-nav { + display: block; + margin: 0; + padding: 0.875em 0; + list-style-type: none; + list-style-position: inside; +} +/* line 39, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_side-nav.scss */ +.side-nav li { + margin: 0 0 0.4375em 0; + font-size: 0.875em; +} +/* line 43, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_side-nav.scss */ +.side-nav li a { + display: block; + color: #2ba6cb; +} +/* line 48, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_side-nav.scss */ +.side-nav li.active > a:first-child { + color: #4d4d4d; + font-weight: bold; +} +/* line 53, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_side-nav.scss */ +.side-nav li.divider { + border-top: 1px solid; + height: 0; + padding: 0; + list-style: none; + border-top-color: #e6e6e6; +} + +/* Side Nav */ +/* line 82, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_sub-nav.scss */ +.sub-nav { + display: block; + width: auto; + overflow: hidden; + margin: -0.25em 0 1.125em; + padding-top: 0.25em; + margin-right: 0; + margin-left: -0.5625em; +} +/* line 40, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_sub-nav.scss */ +.sub-nav dt, +.sub-nav dd, +.sub-nav li { + float: left; + display: inline; + margin-left: 0.5625em; + margin-bottom: 0.625em; + font-weight: normal; + font-size: 0.875em; +} +/* line 50, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_sub-nav.scss */ +.sub-nav dt a, +.sub-nav dd a, +.sub-nav li a { + color: #999; + text-decoration: none; +} +/* line 54, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_sub-nav.scss */ +.sub-nav dt.active a, +.sub-nav dd.active a, +.sub-nav li.active a { + -webkit-border-radius: 1000px; + border-radius: 1000px; + font-weight: bold; + background: #2ba6cb; + padding: 0.1875em 0.5625em; + cursor: default; + color: #fff; +} + +/* Foundation Switches */ +@media only screen { + /* line 239, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss */ + div.switch { + position: relative; + padding: 0; + display: block; + overflow: hidden; + border-style: solid; + border-width: 1px; + margin-bottom: 1.25em; + height: 2.25em; + background: #fff; + border-color: #cccccc; + } + /* line 58, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss */ + div.switch label { + position: relative; + left: 0; + z-index: 2; + float: left; + width: 50%; + height: 100%; + margin: 0; + font-weight: bold; + text-align: left; + -webkit-transition: all 0.1s ease-out; + -moz-transition: all 0.1s ease-out; + transition: all 0.1s ease-out; + } + /* line 75, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss */ + div.switch input { + position: absolute; + z-index: 3; + opacity: 0; + width: 100%; + height: 100%; + -moz-appearance: none; + } + /* line 84, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss */ + div.switch input:hover, div.switch input:focus { + cursor: pointer; + } + /* line 91, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss */ + div.switch span:last-child { + position: absolute; + top: -1px; + left: -1px; + z-index: 1; + display: block; + padding: 0; + border-width: 1px; + border-style: solid; + -webkit-transition: all 0.1s ease-out; + -moz-transition: all 0.1s ease-out; + transition: all 0.1s ease-out; + } + /* line 106, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss */ + div.switch input:not(:checked) + label { + opacity: 0; + } + /* line 109, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss */ + div.switch input:checked { + display: none !important; + } + /* line 110, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss */ + div.switch input { + left: 0; + display: block !important; + } + /* line 113, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss */ + div.switch input:first-of-type + label, + div.switch input:first-of-type + span + label { + left: -50%; + } + /* line 115, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss */ + div.switch input:first-of-type:checked + label, + div.switch input:first-of-type:checked + span + label { + left: 0%; + } + /* line 119, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss */ + div.switch input:last-of-type + label, + div.switch input:last-of-type + span + label { + right: -50%; + left: auto; + text-align: right; + } + /* line 121, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss */ + div.switch input:last-of-type:checked + label, + div.switch input:last-of-type:checked + span + label { + right: 0%; + left: auto; + } + /* line 125, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss */ + div.switch span.custom { + display: none !important; + } +} +@media only screen and (-webkit-min-device-pixel-ratio: 0) and (max-device-width: 480px) { + /* line 239, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss */ + div.switch { + -webkit-animation: webkitSiblingBugfix infinite 1s; + } +} +@media only screen and (-webkit-min-device-pixel-ratio: 1.5) { + /* line 239, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss */ + div.switch { + -webkit-animation: none 0; + } +} +@media only screen { + /* line 137, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss */ + form.custom div.switch .hidden-field { + margin-left: auto; + position: absolute; + visibility: visible; + } + /* line 149, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss */ + div.switch label { + padding: 0; + line-height: 2.3em; + font-size: 0.875em; + } + /* line 157, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss */ + div.switch input:first-of-type:checked ~ span:last-child { + left: 100%; + margin-left: -2.1875em; + } + /* line 163, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss */ + div.switch span:last-child { + width: 2.25em; + height: 2.25em; + } + /* line 177, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss */ + div.switch span:last-child { + border-color: #b3b3b3; + background: #fff; + background: -moz-linear-gradient(top, #fff 0%, #f2f2f2 100%); + background: -webkit-linear-gradient(top, #fff 0%, #f2f2f2 100%); + background: linear-gradient(to bottom, #fff 0%, #f2f2f2 100%); + -webkit-box-shadow: 2px 0 10px 0 rgba(0, 0, 0, 0.07), 1000px 0 0 1000px #e1f5d1, -2px 0 10px 0 rgba(0, 0, 0, 0.07), -1000px 0 0 1000px #f5f5f5; + box-shadow: 2px 0 10px 0 rgba(0, 0, 0, 0.07), 1000px 0 0 980px #e1f5d1, -2px 0 10px 0 rgba(0, 0, 0, 0.07), -1000px 0 0 1000px #f5f5f5; + } + /* line 201, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss */ + div.switch:hover span:last-child, div.switch:focus span:last-child { + background: #fff; + background: -moz-linear-gradient(top, #fff 0%, #e6e6e6 100%); + background: -webkit-linear-gradient(top, #fff 0%, #e6e6e6 100%); + background: linear-gradient(to bottom, #fff 0%, #e6e6e6 100%); + } + /* line 211, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss */ + div.switch:active { + background: transparent; + } + /* line 243, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss */ + div.switch.large { + height: 2.75em; + } + /* line 149, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss */ + div.switch.large label { + padding: 0; + line-height: 2.3em; + font-size: 1.0625em; + } + /* line 157, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss */ + div.switch.large input:first-of-type:checked ~ span:last-child { + left: 100%; + margin-left: -2.6875em; + } + /* line 163, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss */ + div.switch.large span:last-child { + width: 2.75em; + height: 2.75em; + } + /* line 246, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss */ + div.switch.small { + height: 1.75em; + } + /* line 149, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss */ + div.switch.small label { + padding: 0; + line-height: 2.1em; + font-size: 0.75em; + } + /* line 157, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss */ + div.switch.small input:first-of-type:checked ~ span:last-child { + left: 100%; + margin-left: -1.6875em; + } + /* line 163, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss */ + div.switch.small span:last-child { + width: 1.75em; + height: 1.75em; + } + /* line 249, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss */ + div.switch.tiny { + height: 1.375em; + } + /* line 149, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss */ + div.switch.tiny label { + padding: 0; + line-height: 1.9em; + font-size: 0.6875em; + } + /* line 157, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss */ + div.switch.tiny input:first-of-type:checked ~ span:last-child { + left: 100%; + margin-left: -1.3125em; + } + /* line 163, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss */ + div.switch.tiny span:last-child { + width: 1.375em; + height: 1.375em; + } + /* line 252, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss */ + div.switch.radius { + -webkit-border-radius: 4px; + border-radius: 4px; + } + /* line 253, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss */ + div.switch.radius span:last-child { + -webkit-border-radius: 3px; + border-radius: 3px; + } + /* line 257, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss */ + div.switch.round { + -webkit-border-radius: 1000px; + border-radius: 1000px; + } + /* line 258, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss */ + div.switch.round span:last-child { + -webkit-border-radius: 999px; + border-radius: 999px; + } + /* line 259, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss */ + div.switch.round label { + padding: 0 0.5625em; + } + + @-webkit-keyframes webkitSiblingBugfix { + from { + position: relative; + } + to { + position: relative; + } + } +} +/* line 11, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_magellan.scss */ +[data-magellan-expedition] { + background: #fff; + z-index: 50; + min-width: 100%; + padding: 10px; +} +/* line 17, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_magellan.scss */ +[data-magellan-expedition] .sub-nav { + margin-bottom: 0; +} +/* line 19, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_magellan.scss */ +[data-magellan-expedition] .sub-nav dd { + margin-bottom: 0; +} + +/* Tables */ +/* line 80, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_tables.scss */ +table { + background: #fff; + margin-bottom: 1.25em; + border: solid 1px #ddd; +} +/* line 41, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_tables.scss */ +table thead, +table tfoot { + background: #f5f5f5; + font-weight: bold; +} +/* line 47, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_tables.scss */ +table thead tr th, +table thead tr td, +table tfoot tr th, +table tfoot tr td { + padding: 0.5em 0.625em 0.625em; + font-size: 0.875em; + color: #222; + text-align: left; +} +/* line 58, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_tables.scss */ +table tr th, +table tr td { + padding: 0.5625em 0.625em; + font-size: 0.875em; + color: #222; +} +/* line 65, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_tables.scss */ +table tr.even, table tr.alt, table tr:nth-of-type(even) { + background: #f9f9f9; +} +/* line 70, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_tables.scss */ +table thead tr th, +table tfoot tr th, +table tbody tr td, +table tr td, +table tfoot tr td { + display: table-cell; + line-height: 1.125em; +} + +/* Image Thumbnails */ +/* line 45, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_thumbs.scss */ +.th { + line-height: 0; + display: inline-block; + border: solid 4px #fff; + -webkit-box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.2); + box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.2); + -webkit-transition: all 200ms ease-out; + -moz-transition: all 200ms ease-out; + transition: all 200ms ease-out; +} +/* line 31, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_thumbs.scss */ +.th:hover, .th:focus { + -webkit-box-shadow: 0 0 6px 1px rgba(43, 166, 203, 0.5); + box-shadow: 0 0 6px 1px rgba(43, 166, 203, 0.5); +} +/* line 49, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_thumbs.scss */ +.th.radius { + -webkit-border-radius: 3px; + border-radius: 3px; +} + +/* line 51, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_thumbs.scss */ +a.th { + display: inline-block; + max-width: 100%; +} + +/* Tooltips */ +/* line 29, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_tooltips.scss */ +.has-tip { + border-bottom: dotted 1px #ccc; + cursor: help; + font-weight: bold; + color: #333; +} +/* line 35, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_tooltips.scss */ +.has-tip:hover, .has-tip:focus { + border-bottom: dotted 1px #196177; + color: #2ba6cb; +} +/* line 41, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_tooltips.scss */ +.has-tip.tip-left, .has-tip.tip-right { + float: none !important; +} + +/* line 45, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_tooltips.scss */ +.tooltip { + display: none; + position: absolute; + z-index: 999; + font-weight: bold; + font-size: 0.9375em; + line-height: 1.3; + padding: 0.5em; + max-width: 85%; + left: 50%; + width: 100%; + color: #fff; + background: #000; + -webkit-border-radius: 3px; + border-radius: 3px; +} +/* line 60, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_tooltips.scss */ +.tooltip > .nub { + display: block; + left: 5px; + position: absolute; + width: 0; + height: 0; + border: solid 5px; + border-color: transparent transparent #000 transparent; + top: -10px; +} +/* line 71, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_tooltips.scss */ +.tooltip.opened { + color: #2ba6cb !important; + border-bottom: dotted 1px #196177 !important; +} + +/* line 77, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_tooltips.scss */ +.tap-to-close { + display: block; + font-size: 0.625em; + color: #888; + font-weight: normal; +} + +@media only screen and (min-width: 768px) { + /* line 86, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_tooltips.scss */ + .tooltip > .nub { + border-color: transparent transparent #000 transparent; + top: -10px; + } + /* line 90, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_tooltips.scss */ + .tooltip.tip-top > .nub { + border-color: #000 transparent transparent transparent; + top: auto; + bottom: -10px; + } + /* line 96, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_tooltips.scss */ + .tooltip.tip-left, .tooltip.tip-right { + float: none !important; + } + /* line 99, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_tooltips.scss */ + .tooltip.tip-left > .nub { + border-color: transparent transparent transparent #000; + right: -10px; + left: auto; + top: 50%; + margin-top: -5px; + } + /* line 106, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_tooltips.scss */ + .tooltip.tip-right > .nub { + border-color: transparent #000 transparent transparent; + right: auto; + left: -10px; + top: 50%; + margin-top: -5px; + } +} +@media only screen and (max-width: 767px) { + /* line 128, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_dropdown.scss */ + .f-dropdown { + max-width: 100%; + left: 0; + } +} +/* Foundation Dropdowns */ +/* line 135, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_dropdown.scss */ +.f-dropdown { + position: absolute; + top: -9999px; + list-style: none; + margin-left: 0; + width: 100%; + max-height: none; + height: auto; + background: #fff; + border: solid 1px #cccccc; + font-size: 16px; + z-index: 99; + margin-top: 2px; + max-width: 200px; +} +/* line 50, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_dropdown.scss */ +.f-dropdown > *:first-child { + margin-top: 0; +} +/* line 51, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_dropdown.scss */ +.f-dropdown > *:last-child { + margin-bottom: 0; +} +/* line 76, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_dropdown.scss */ +.f-dropdown:before { + content: ""; + display: block; + width: 0; + height: 0; + border: inset 6px; + border-color: transparent transparent #fff transparent; + border-bottom-style: solid; + position: absolute; + top: -12px; + left: 10px; + z-index: 99; +} +/* line 83, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_dropdown.scss */ +.f-dropdown:after { + content: ""; + display: block; + width: 0; + height: 0; + border: inset 7px; + border-color: transparent transparent #cccccc transparent; + border-bottom-style: solid; + position: absolute; + top: -14px; + left: 9px; + z-index: 98; +} +/* line 91, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_dropdown.scss */ +.f-dropdown.right:before { + left: auto; + right: 10px; +} +/* line 95, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_dropdown.scss */ +.f-dropdown.right:after { + left: auto; + right: 9px; +} +/* line 139, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_dropdown.scss */ +.f-dropdown li { + font-size: 0.875em; + cursor: pointer; + line-height: 1.125em; + margin: 0; +} +/* line 114, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_dropdown.scss */ +.f-dropdown li:hover, .f-dropdown li:focus { + background: #eeeeee; +} +/* line 117, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_dropdown.scss */ +.f-dropdown li a { + display: block; + padding: 0.5em; + color: #555; +} +/* line 142, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_dropdown.scss */ +.f-dropdown.content { + position: absolute; + top: -9999px; + list-style: none; + margin-left: 0; + padding: 1.25em; + width: 100%; + height: auto; + max-height: none; + background: #fff; + border: solid 1px #cccccc; + font-size: 16px; + z-index: 99; + max-width: 200px; +} +/* line 50, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_dropdown.scss */ +.f-dropdown.content > *:first-child { + margin-top: 0; +} +/* line 51, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_dropdown.scss */ +.f-dropdown.content > *:last-child { + margin-bottom: 0; +} +/* line 145, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_dropdown.scss */ +.f-dropdown.tiny { + max-width: 200px; +} +/* line 146, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_dropdown.scss */ +.f-dropdown.small { + max-width: 300px; +} +/* line 147, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_dropdown.scss */ +.f-dropdown.medium { + max-width: 500px; +} +/* line 148, ../../../../../../../../../../../../usr/local/rvm/gems/ruby-2.1.2/gems/zurb-foundation-4.3.2/scss/foundation/components/_dropdown.scss */ +.f-dropdown.large { + max-width: 800px; +} + +/* Each individual part that can be added in */ +/* line 4, ../scss/base/_drupal.scss */ +.admin-menu .fixed { + top: 1.8125em; +} + +/* line 11, ../scss/base/_drupal.scss */ +#status-messages.reveal-modal .alert-box { + margin-bottom: 0; +} + +/* line 18, ../scss/base/_drupal.scss */ +.reveal-modal { + z-index: 999; +} + +/* line 25, ../scss/base/_drupal.scss */ +.item-list .pager { + clear: none; +} + +/* line 29, ../scss/base/_drupal.scss */ +.item-list .pager li { + padding: 0; + margin: 0; + display: inline-block; +} diff --git a/docroot/sites/all/themes/libraryzurb_teen/css/custom.css b/docroot/sites/all/themes/libraryzurb_teen/css/custom.css new file mode 100644 index 00000000..efb1906c --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/css/custom.css @@ -0,0 +1,14836 @@ +@charset "UTF-8"; +/* @file + * This file is a custom file that loads all files. Each non-base layer + * can be disabled. + * + * Do not name this file, "app.scss". If you run a compass update this file can + * be wiped out with a compass update. By default, when a compass project is + * created the file will be named app.scss. Thus this file is named, + * THEMENAME.scss. + * + * This application file (THEMENAME.scss) is where all the partials are + * imported. + * + * Theme styles are categorized using SMACSS standards. They utilize + * categorization of styles into various categories. Those categories are the + * following: + * + * - Base: CSS reset/normalize plus HTML element styling. + * - Layout: Macro arrangement of a web page, including any grid systems. + * - Component: Dictate minor layout modules or reusable elements. + * - State: Describe the appearance of a module in various states. + * - Theme: Purely visual optional styling (“look-and-feel”) for a component. + * + * * Contains Sass customizations for the Klamath County Library sub-theme. + * + * Compile Sass into CSS with `compass clean && compass watch` for development + * environments or `compass clean && compass compile -e production --force` for + * production environments. + * + * @see config.rb + * + * For more information about this new Drupal css file standard, please review + * the following: + * - https://drupal.org/node/1887922 + * - http://smacss.com/ + */ +/* + * Theme specific variables. This takes the place of the normal _settings.scss. + * See the STARTER/README.txt file regarding "CHANGING FOUNDATION DEFAULT + * SETTINGS" for documentation. + */ +/* +* +* Font families will not be defined in Library Sites core theme and should be used in the admin interface +* of each libary site using the font-your-face module. +* +*/ +@font-face { + font-family: "McLaren-Regular"; + src: url("../fonts/libraryzurb-fonts/McLaren-Regular.ttf"); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: "Pt-seriefbold"; + src: url("../fonts/libraryzurb-fonts/PTF75F.ttf"); +} +@font-face { + font-family: "Pt-seriefregular"; + src: url("../fonts/libraryzurb-fonts/PTF55F.ttf"); +} +@font-face { + font-family: "Arialbold"; + src: url("../fonts/libraryzurb-fonts/arialbd.ttf"); +} +@font-face { + font-family: "Arialregular"; + src: url("../fonts/libraryzurb-fonts/Chn_Prop_Arial_Normal.ttf"); +} +/*! normalize.css v2.1.2 | MIT License | git.io/normalize */ +/* ========================================================================== + HTML5 display definitions + ========================================================================== */ +/** + * Correct `block` display not defined in IE 8/9. + */ +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section, +summary { + display: block; +} + +/** + * Correct `inline-block` display not defined in IE 8/9. + */ +audio, +canvas, +video { + display: inline-block; +} + +/** + * Prevent modern browsers from displaying `audio` without controls. + * Remove excess height in iOS 5 devices. + */ +audio:not([controls]) { + display: none; + height: 0; +} + +/** + * Address `[hidden]` styling not present in IE 8/9. + * Hide the `template` element in IE, Safari, and Firefox < 22. + */ +[hidden], +template { + display: none; +} + +script { + display: none !important; +} + +/* ========================================================================== + Base + ========================================================================== */ +/** + * 1. Set default font family to sans-serif. + * 2. Prevent iOS text size adjust after orientation change, without disabling + * user zoom. + */ +html { + font-family: sans-serif; + /* 1 */ + -ms-text-size-adjust: 100%; + /* 2 */ + -webkit-text-size-adjust: 100%; + /* 2 */ +} + +/** + * Remove default margin. + */ +body { + margin: 0; +} + +/* ========================================================================== + Links + ========================================================================== */ +/** + * Remove the gray background color from active links in IE 10. + */ +a { + background: transparent; +} + +/** + * Address `outline` inconsistency between Chrome and other browsers. + */ +a:focus { + outline: thin dotted; +} + +/** + * Improve readability when focused and also mouse hovered in all browsers. + */ +a:active, +a:hover { + outline: 0; +} + +/* ========================================================================== + Typography + ========================================================================== */ +/** + * Address variable `h1` font-size and margin within `section` and `article` + * contexts in Firefox 4+, Safari 5, and Chrome. + */ +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/** + * Address styling not present in IE 8/9, Safari 5, and Chrome. + */ +abbr[title] { + border-bottom: 1px dotted; +} + +/** + * Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. + */ +b, +strong { + font-weight: bold; +} + +/** + * Address styling not present in Safari 5 and Chrome. + */ +dfn { + font-style: italic; +} + +/** + * Address differences between Firefox and other browsers. + */ +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} + +/** + * Address styling not present in IE 8/9. + */ +mark { + background: #ff0; + color: #000; +} + +/** + * Correct font family set oddly in Safari 5 and Chrome. + */ +code, +kbd, +pre, +samp { + font-family: monospace, serif; + font-size: 1em; +} + +/** + * Improve readability of pre-formatted text in all browsers. + */ +pre { + white-space: pre-wrap; +} + +/** + * Set consistent quote types. + */ +q { + quotes: "\201C" "\201D" "\2018" "\2019"; +} + +/** + * Address inconsistent and variable font size in all browsers. + */ +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` affecting `line-height` in all browsers. + */ +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +/* ========================================================================== + Embedded content + ========================================================================== */ +/** + * Remove border when inside `a` element in IE 8/9. + */ +img { + border: 0; +} + +/** + * Correct overflow displayed oddly in IE 9. + */ +svg:not(:root) { + overflow: hidden; +} + +/* ========================================================================== + Figures + ========================================================================== */ +/** + * Address margin not present in IE 8/9 and Safari 5. + */ +figure { + margin: 0; +} + +/* ========================================================================== + Forms + ========================================================================== */ +/** + * Define consistent border, margin, and padding. + */ +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +/** + * 1. Correct `color` not being inherited in IE 8/9. + * 2. Remove padding so people aren't caught out if they zero out fieldsets. + */ +legend { + border: 0; + /* 1 */ + padding: 0; + /* 2 */ +} + +/** + * 1. Correct font family not being inherited in all browsers. + * 2. Correct font size not being inherited in all browsers. + * 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. + */ +button, +input, +select, +textarea { + font-family: inherit; + /* 1 */ + font-size: 100%; + /* 2 */ + margin: 0; + /* 3 */ +} + +/** + * Address Firefox 4+ setting `line-height` on `input` using `!important` in + * the UA stylesheet. + */ +button, +input { + line-height: normal; +} + +/** + * Address inconsistent `text-transform` inheritance for `button` and `select`. + * All other form control elements do not inherit `text-transform` values. + * Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. + * Correct `select` style inheritance in Firefox 4+ and Opera. + */ +button, +select { + text-transform: none; +} + +/** + * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` + * and `video` controls. + * 2. Correct inability to style clickable `input` types in iOS. + * 3. Improve usability and consistency of cursor style between image-type + * `input` and others. + */ +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + /* 2 */ + cursor: pointer; + /* 3 */ +} + +/** + * Re-set default cursor for disabled elements. + */ +button[disabled], +html input[disabled] { + cursor: default; +} + +/** + * 1. Address box sizing set to `content-box` in IE 8/9. + * 2. Remove excess padding in IE 8/9. + */ +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + /* 1 */ + padding: 0; + /* 2 */ +} + +/** + * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. + * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome + * (include `-moz` to future-proof). + */ +input[type="search"] { + -webkit-appearance: textfield; + /* 1 */ + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + /* 2 */ + box-sizing: content-box; +} + +/** + * Remove inner padding and search cancel button in Safari 5 and Chrome + * on OS X. + */ +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * Remove inner padding and border in Firefox 4+. + */ +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/** + * 1. Remove default vertical scrollbar in IE 8/9. + * 2. Improve readability and alignment in all browsers. + */ +textarea { + overflow: auto; + /* 1 */ + vertical-align: top; + /* 2 */ +} + +/* ========================================================================== + Tables + ========================================================================== */ +/** + * Remove most spacing between table cells. + */ +table { + border-collapse: collapse; + border-spacing: 0; +} + +meta.foundation-mq-small { + font-family: "only screen and (min-width: 730px)"; + width: 730px; +} + +meta.foundation-mq-medium { + font-family: "only screen and (min-width:960px)"; + width: 960px; +} + +meta.foundation-mq-large { + font-family: "only screen and (min-width:1440px)"; + width: 1440px; +} + +*, +*:before, +*:after { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +html, +body { + font-size: 100%; +} + +body { + background: #fff; + color: #333333; + padding: 0; + margin: 0; + font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; + font-weight: normal; + font-style: normal; + line-height: 1; + position: relative; + cursor: default; +} + +a:hover { + cursor: pointer; +} + +img, +object, +embed { + max-width: 100%; + height: auto; +} + +object, +embed { + height: 100%; +} + +img { + -ms-interpolation-mode: bicubic; +} + +#map_canvas img, +#map_canvas embed, +#map_canvas object, +.map_canvas img, +.map_canvas embed, +.map_canvas object { + max-width: none !important; +} + +.left { + float: left !important; +} + +.right { + float: right !important; +} + +.text-left { + text-align: left !important; +} + +.text-right { + text-align: right !important; +} + +.text-center { + text-align: center !important; +} + +.text-justify { + text-align: justify !important; +} + +.hide { + display: none; +} + +.antialiased { + -webkit-font-smoothing: antialiased; +} + +img { + display: inline-block; + vertical-align: middle; +} + +textarea { + height: auto; + min-height: 50px; +} + +select { + width: 100%; +} + +/* Grid HTML Classes */ +.row { + width: 100%; + margin-left: auto; + margin-right: auto; + margin-top: 0; + margin-bottom: 0; + max-width: 62.5em; + *zoom: 1; +} +.row:before, .row:after { + content: " "; + display: table; +} +.row:after { + clear: both; +} +.row.collapse > .column, +.row.collapse > .columns { + position: relative; + padding-left: 0; + padding-right: 0; + float: left; +} +.row.collapse .row { + margin-left: 0; + margin-right: 0; +} +.row .row { + width: auto; + margin-left: -0.9375em; + margin-right: -0.9375em; + margin-top: 0; + margin-bottom: 0; + max-width: none; + *zoom: 1; +} +.row .row:before, .row .row:after { + content: " "; + display: table; +} +.row .row:after { + clear: both; +} +.row .row.collapse { + width: auto; + margin: 0; + max-width: none; + *zoom: 1; +} +.row .row.collapse:before, .row .row.collapse:after { + content: " "; + display: table; +} +.row .row.collapse:after { + clear: both; +} + +.column, +.columns { + position: relative; + padding-left: 0.9375em; + padding-right: 0.9375em; + width: 100%; + float: left; +} + +@media only screen { + .column, + .columns { + position: relative; + padding-left: 0.9375em; + padding-right: 0.9375em; + float: left; + } + + .small-1 { + position: relative; + width: 8.33333%; + } + + .small-2 { + position: relative; + width: 16.66667%; + } + + .small-3 { + position: relative; + width: 25%; + } + + .small-4 { + position: relative; + width: 33.33333%; + } + + .small-5 { + position: relative; + width: 41.66667%; + } + + .small-6 { + position: relative; + width: 50%; + } + + .small-7 { + position: relative; + width: 58.33333%; + } + + .small-8 { + position: relative; + width: 66.66667%; + } + + .small-9 { + position: relative; + width: 75%; + } + + .small-10 { + position: relative; + width: 83.33333%; + } + + .small-11 { + position: relative; + width: 91.66667%; + } + + .small-12 { + position: relative; + width: 100%; + } + + .small-offset-0 { + position: relative; + margin-left: 0%; + } + + .small-offset-1 { + position: relative; + margin-left: 8.33333%; + } + + .small-offset-2 { + position: relative; + margin-left: 16.66667%; + } + + .small-offset-3 { + position: relative; + margin-left: 25%; + } + + .small-offset-4 { + position: relative; + margin-left: 33.33333%; + } + + .small-offset-5 { + position: relative; + margin-left: 41.66667%; + } + + .small-offset-6 { + position: relative; + margin-left: 50%; + } + + .small-offset-7 { + position: relative; + margin-left: 58.33333%; + } + + .small-offset-8 { + position: relative; + margin-left: 66.66667%; + } + + .small-offset-9 { + position: relative; + margin-left: 75%; + } + + .small-offset-10 { + position: relative; + margin-left: 83.33333%; + } + + [class*="column"] + [class*="column"]:last-child { + float: right; + } + + [class*="column"] + [class*="column"].end { + float: left; + } + + .column.small-centered, + .columns.small-centered { + position: relative; + margin-left: auto; + margin-right: auto; + float: none !important; + } +} +/* Styles for screens that are atleast 768px; */ +@media only screen and (min-width: 730px) { + .large-1 { + position: relative; + width: 8.33333%; + } + + .large-2 { + position: relative; + width: 16.66667%; + } + + .large-3 { + position: relative; + width: 25%; + } + + .large-4 { + position: relative; + width: 33.33333%; + } + + .large-5 { + position: relative; + width: 41.66667%; + } + + .large-6 { + position: relative; + width: 50%; + } + + .large-7 { + position: relative; + width: 58.33333%; + } + + .large-8 { + position: relative; + width: 66.66667%; + } + + .large-9 { + position: relative; + width: 75%; + } + + .large-10 { + position: relative; + width: 83.33333%; + } + + .large-11 { + position: relative; + width: 91.66667%; + } + + .large-12 { + position: relative; + width: 100%; + } + + .row .large-offset-0 { + position: relative; + margin-left: 0%; + } + + .row .large-offset-1 { + position: relative; + margin-left: 8.33333%; + } + + .row .large-offset-2 { + position: relative; + margin-left: 16.66667%; + } + + .row .large-offset-3 { + position: relative; + margin-left: 25%; + } + + .row .large-offset-4 { + position: relative; + margin-left: 33.33333%; + } + + .row .large-offset-5 { + position: relative; + margin-left: 41.66667%; + } + + .row .large-offset-6 { + position: relative; + margin-left: 50%; + } + + .row .large-offset-7 { + position: relative; + margin-left: 58.33333%; + } + + .row .large-offset-8 { + position: relative; + margin-left: 66.66667%; + } + + .row .large-offset-9 { + position: relative; + margin-left: 75%; + } + + .row .large-offset-10 { + position: relative; + margin-left: 83.33333%; + } + + .row .large-offset-11 { + position: relative; + margin-left: 91.66667%; + } + + .push-1 { + position: relative; + left: 8.33333%; + right: auto; + } + + .pull-1 { + position: relative; + right: 8.33333%; + left: auto; + } + + .push-2 { + position: relative; + left: 16.66667%; + right: auto; + } + + .pull-2 { + position: relative; + right: 16.66667%; + left: auto; + } + + .push-3 { + position: relative; + left: 25%; + right: auto; + } + + .pull-3 { + position: relative; + right: 25%; + left: auto; + } + + .push-4 { + position: relative; + left: 33.33333%; + right: auto; + } + + .pull-4 { + position: relative; + right: 33.33333%; + left: auto; + } + + .push-5 { + position: relative; + left: 41.66667%; + right: auto; + } + + .pull-5 { + position: relative; + right: 41.66667%; + left: auto; + } + + .push-6 { + position: relative; + left: 50%; + right: auto; + } + + .pull-6 { + position: relative; + right: 50%; + left: auto; + } + + .push-7 { + position: relative; + left: 58.33333%; + right: auto; + } + + .pull-7 { + position: relative; + right: 58.33333%; + left: auto; + } + + .push-8 { + position: relative; + left: 66.66667%; + right: auto; + } + + .pull-8 { + position: relative; + right: 66.66667%; + left: auto; + } + + .push-9 { + position: relative; + left: 75%; + right: auto; + } + + .pull-9 { + position: relative; + right: 75%; + left: auto; + } + + .push-10 { + position: relative; + left: 83.33333%; + right: auto; + } + + .pull-10 { + position: relative; + right: 83.33333%; + left: auto; + } + + .push-11 { + position: relative; + left: 91.66667%; + right: auto; + } + + .pull-11 { + position: relative; + right: 91.66667%; + left: auto; + } + + .column.large-centered, + .columns.large-centered { + position: relative; + margin-left: auto; + margin-right: auto; + float: none !important; + } + + .column.large-uncentered, + .columns.large-uncentered { + margin-left: 0; + margin-right: 0; + float: left !important; + } + + .column.large-uncentered.opposite, + .columns.large-uncentered.opposite { + float: right !important; + } +} +/* Foundation Visibility HTML Classes */ +.show-for-small, +.show-for-medium-down, +.show-for-large-down { + display: inherit !important; +} + +.show-for-medium, +.show-for-medium-up, +.show-for-large, +.show-for-large-up, +.show-for-xlarge { + display: none !important; +} + +.hide-for-medium, +.hide-for-medium-up, +.hide-for-large, +.hide-for-large-up, +.hide-for-xlarge { + display: inherit !important; +} + +.hide-for-small, +.hide-for-medium-down, +.hide-for-large-down { + display: none !important; +} + +/* Specific visilbity for tables */ +table.show-for-small, table.show-for-medium-down, table.show-for-large-down, table.hide-for-medium, table.hide-for-medium-up, table.hide-for-large, table.hide-for-large-up, table.hide-for-xlarge { + display: table; +} + +thead.show-for-small, thead.show-for-medium-down, thead.show-for-large-down, thead.hide-for-medium, thead.hide-for-medium-up, thead.hide-for-large, thead.hide-for-large-up, thead.hide-for-xlarge { + display: table-header-group !important; +} + +tbody.show-for-small, tbody.show-for-medium-down, tbody.show-for-large-down, tbody.hide-for-medium, tbody.hide-for-medium-up, tbody.hide-for-large, tbody.hide-for-large-up, tbody.hide-for-xlarge { + display: table-row-group !important; +} + +tr.show-for-small, tr.show-for-medium-down, tr.show-for-large-down, tr.hide-for-medium, tr.hide-for-medium-up, tr.hide-for-large, tr.hide-for-large-up, tr.hide-for-xlarge { + display: table-row !important; +} + +td.show-for-small, td.show-for-medium-down, td.show-for-large-down, td.hide-for-medium, td.hide-for-medium-up, td.hide-for-large, td.hide-for-large-up, td.hide-for-xlarge, +th.show-for-small, +th.show-for-medium-down, +th.show-for-large-down, +th.hide-for-medium, +th.hide-for-medium-up, +th.hide-for-large, +th.hide-for-large-up, +th.hide-for-xlarge { + display: table-cell !important; +} + +/* Medium Displays: 768px - 1279px */ +@media only screen and (min-width: 730px) { + .show-for-medium, + .show-for-medium-up { + display: inherit !important; + } + + .show-for-small { + display: none !important; + } + + .hide-for-small { + display: inherit !important; + } + + .hide-for-medium, + .hide-for-medium-up { + display: none !important; + } + + /* Specific visilbity for tables */ + table.show-for-medium, table.show-for-medium-up, table.hide-for-small { + display: table; + } + + thead.show-for-medium, thead.show-for-medium-up, thead.hide-for-small { + display: table-header-group !important; + } + + tbody.show-for-medium, tbody.show-for-medium-up, tbody.hide-for-small { + display: table-row-group !important; + } + + tr.show-for-medium, tr.show-for-medium-up, tr.hide-for-small { + display: table-row !important; + } + + td.show-for-medium, td.show-for-medium-up, td.hide-for-small, + th.show-for-medium, + th.show-for-medium-up, + th.hide-for-small { + display: table-cell !important; + } +} +/* Large Displays: 1280px - 1440px */ +@media only screen and (min-width: 960px) { + .show-for-large, + .show-for-large-up { + display: inherit !important; + } + + .show-for-medium, + .show-for-medium-down { + display: none !important; + } + + .hide-for-medium, + .hide-for-medium-down { + display: inherit !important; + } + + .hide-for-large, + .hide-for-large-up { + display: none !important; + } + + /* Specific visilbity for tables */ + table.show-for-large, table.show-for-large-up, table.hide-for-medium, table.hide-for-medium-down { + display: table; + } + + thead.show-for-large, thead.show-for-large-up, thead.hide-for-medium, thead.hide-for-medium-down { + display: table-header-group !important; + } + + tbody.show-for-large, tbody.show-for-large-up, tbody.hide-for-medium, tbody.hide-for-medium-down { + display: table-row-group !important; + } + + tr.show-for-large, tr.show-for-large-up, tr.hide-for-medium, tr.hide-for-medium-down { + display: table-row !important; + } + + td.show-for-large, td.show-for-large-up, td.hide-for-medium, td.hide-for-medium-down, + th.show-for-large, + th.show-for-large-up, + th.hide-for-medium, + th.hide-for-medium-down { + display: table-cell !important; + } +} +/* X-Large Displays: 1400px and up */ +@media only screen and (min-width: 1440px) { + .show-for-xlarge { + display: inherit !important; + } + + .show-for-large, + .show-for-large-down { + display: none !important; + } + + .hide-for-large, + .hide-for-large-down { + display: inherit !important; + } + + .hide-for-xlarge { + display: none !important; + } + + /* Specific visilbity for tables */ + table.show-for-xlarge, table.hide-for-large, table.hide-for-large-down { + display: table; + } + + thead.show-for-xlarge, thead.hide-for-large, thead.hide-for-large-down { + display: table-header-group !important; + } + + tbody.show-for-xlarge, tbody.hide-for-large, tbody.hide-for-large-down { + display: table-row-group !important; + } + + tr.show-for-xlarge, tr.hide-for-large, tr.hide-for-large-down { + display: table-row !important; + } + + td.show-for-xlarge, td.hide-for-large, td.hide-for-large-down, + th.show-for-xlarge, + th.hide-for-large, + th.hide-for-large-down { + display: table-cell !important; + } +} +/* Orientation targeting */ +.show-for-landscape, +.hide-for-portrait { + display: inherit !important; +} + +.hide-for-landscape, +.show-for-portrait { + display: none !important; +} + +/* Specific visilbity for tables */ +table.hide-for-landscape, table.show-for-portrait { + display: table; +} + +thead.hide-for-landscape, thead.show-for-portrait { + display: table-header-group !important; +} + +tbody.hide-for-landscape, tbody.show-for-portrait { + display: table-row-group !important; +} + +tr.hide-for-landscape, tr.show-for-portrait { + display: table-row !important; +} + +td.hide-for-landscape, td.show-for-portrait, +th.hide-for-landscape, +th.show-for-portrait { + display: table-cell !important; +} + +@media only screen and (orientation: landscape) { + .show-for-landscape, + .hide-for-portrait { + display: inherit !important; + } + + .hide-for-landscape, + .show-for-portrait { + display: none !important; + } + + /* Specific visilbity for tables */ + table.show-for-landscape, table.hide-for-portrait { + display: table; + } + + thead.show-for-landscape, thead.hide-for-portrait { + display: table-header-group !important; + } + + tbody.show-for-landscape, tbody.hide-for-portrait { + display: table-row-group !important; + } + + tr.show-for-landscape, tr.hide-for-portrait { + display: table-row !important; + } + + td.show-for-landscape, td.hide-for-portrait, + th.show-for-landscape, + th.hide-for-portrait { + display: table-cell !important; + } +} +@media only screen and (orientation: portrait) { + .show-for-portrait, + .hide-for-landscape { + display: inherit !important; + } + + .hide-for-portrait, + .show-for-landscape { + display: none !important; + } + + /* Specific visilbity for tables */ + table.show-for-portrait, table.hide-for-landscape { + display: table; + } + + thead.show-for-portrait, thead.hide-for-landscape { + display: table-header-group !important; + } + + tbody.show-for-portrait, tbody.hide-for-landscape { + display: table-row-group !important; + } + + tr.show-for-portrait, tr.hide-for-landscape { + display: table-row !important; + } + + td.show-for-portrait, td.hide-for-landscape, + th.show-for-portrait, + th.hide-for-landscape { + display: table-cell !important; + } +} +/* Touch-enabled device targeting */ +.show-for-touch { + display: none !important; +} + +.hide-for-touch { + display: inherit !important; +} + +.touch .show-for-touch { + display: inherit !important; +} + +.touch .hide-for-touch { + display: none !important; +} + +/* Specific visilbity for tables */ +table.hide-for-touch { + display: table; +} + +.touch table.show-for-touch { + display: table; +} + +thead.hide-for-touch { + display: table-header-group !important; +} + +.touch thead.show-for-touch { + display: table-header-group !important; +} + +tbody.hide-for-touch { + display: table-row-group !important; +} + +.touch tbody.show-for-touch { + display: table-row-group !important; +} + +tr.hide-for-touch { + display: table-row !important; +} + +.touch tr.show-for-touch { + display: table-row !important; +} + +td.hide-for-touch { + display: table-cell !important; +} + +.touch td.show-for-touch { + display: table-cell !important; +} + +th.hide-for-touch { + display: table-cell !important; +} + +.touch th.show-for-touch { + display: table-cell !important; +} + +/* Foundation Block Grids for below small breakpoint */ +@media only screen { + [class*="block-grid-"] { + display: block; + padding: 0; + margin: 0 -0.625em; + *zoom: 1; + } + [class*="block-grid-"]:before, [class*="block-grid-"]:after { + content: " "; + display: table; + } + [class*="block-grid-"]:after { + clear: both; + } + [class*="block-grid-"] > li { + display: inline; + height: auto; + float: left; + padding: 0 0.625em 1.25em; + } + + .small-block-grid-1 > li { + width: 100%; + padding: 0 0.625em 1.25em; + } + .small-block-grid-1 > li:nth-of-type(n) { + clear: none; + } + .small-block-grid-1 > li:nth-of-type(1n+1) { + clear: both; + } + + .small-block-grid-2 > li { + width: 50%; + padding: 0 0.625em 1.25em; + } + .small-block-grid-2 > li:nth-of-type(n) { + clear: none; + } + .small-block-grid-2 > li:nth-of-type(2n+1) { + clear: both; + } + + .small-block-grid-3 > li { + width: 33.33333%; + padding: 0 0.625em 1.25em; + } + .small-block-grid-3 > li:nth-of-type(n) { + clear: none; + } + .small-block-grid-3 > li:nth-of-type(3n+1) { + clear: both; + } + + .small-block-grid-4 > li { + width: 25%; + padding: 0 0.625em 1.25em; + } + .small-block-grid-4 > li:nth-of-type(n) { + clear: none; + } + .small-block-grid-4 > li:nth-of-type(4n+1) { + clear: both; + } + + .small-block-grid-5 > li { + width: 20%; + padding: 0 0.625em 1.25em; + } + .small-block-grid-5 > li:nth-of-type(n) { + clear: none; + } + .small-block-grid-5 > li:nth-of-type(5n+1) { + clear: both; + } + + .small-block-grid-6 > li { + width: 16.66667%; + padding: 0 0.625em 1.25em; + } + .small-block-grid-6 > li:nth-of-type(n) { + clear: none; + } + .small-block-grid-6 > li:nth-of-type(6n+1) { + clear: both; + } + + .small-block-grid-7 > li { + width: 14.28571%; + padding: 0 0.625em 1.25em; + } + .small-block-grid-7 > li:nth-of-type(n) { + clear: none; + } + .small-block-grid-7 > li:nth-of-type(7n+1) { + clear: both; + } + + .small-block-grid-8 > li { + width: 12.5%; + padding: 0 0.625em 1.25em; + } + .small-block-grid-8 > li:nth-of-type(n) { + clear: none; + } + .small-block-grid-8 > li:nth-of-type(8n+1) { + clear: both; + } + + .small-block-grid-9 > li { + width: 11.11111%; + padding: 0 0.625em 1.25em; + } + .small-block-grid-9 > li:nth-of-type(n) { + clear: none; + } + .small-block-grid-9 > li:nth-of-type(9n+1) { + clear: both; + } + + .small-block-grid-10 > li { + width: 10%; + padding: 0 0.625em 1.25em; + } + .small-block-grid-10 > li:nth-of-type(n) { + clear: none; + } + .small-block-grid-10 > li:nth-of-type(10n+1) { + clear: both; + } + + .small-block-grid-11 > li { + width: 9.09091%; + padding: 0 0.625em 1.25em; + } + .small-block-grid-11 > li:nth-of-type(n) { + clear: none; + } + .small-block-grid-11 > li:nth-of-type(11n+1) { + clear: both; + } + + .small-block-grid-12 > li { + width: 8.33333%; + padding: 0 0.625em 1.25em; + } + .small-block-grid-12 > li:nth-of-type(n) { + clear: none; + } + .small-block-grid-12 > li:nth-of-type(12n+1) { + clear: both; + } +} +/* Foundation Block Grids for above small breakpoint */ +@media only screen and (min-width: 730px) { + /* Remove small grid clearing */ + .small-block-grid-1 > li:nth-of-type(1n+1) { + clear: none; + } + + .small-block-grid-2 > li:nth-of-type(2n+1) { + clear: none; + } + + .small-block-grid-3 > li:nth-of-type(3n+1) { + clear: none; + } + + .small-block-grid-4 > li:nth-of-type(4n+1) { + clear: none; + } + + .small-block-grid-5 > li:nth-of-type(5n+1) { + clear: none; + } + + .small-block-grid-6 > li:nth-of-type(6n+1) { + clear: none; + } + + .small-block-grid-7 > li:nth-of-type(7n+1) { + clear: none; + } + + .small-block-grid-8 > li:nth-of-type(8n+1) { + clear: none; + } + + .small-block-grid-9 > li:nth-of-type(9n+1) { + clear: none; + } + + .small-block-grid-10 > li:nth-of-type(10n+1) { + clear: none; + } + + .small-block-grid-11 > li:nth-of-type(11n+1) { + clear: none; + } + + .small-block-grid-12 > li:nth-of-type(12n+1) { + clear: none; + } + + .large-block-grid-1 > li { + width: 100%; + padding: 0 0.625em 1.25em; + } + .large-block-grid-1 > li:nth-of-type(n) { + clear: none; + } + .large-block-grid-1 > li:nth-of-type(1n+1) { + clear: both; + } + + .large-block-grid-2 > li { + width: 50%; + padding: 0 0.625em 1.25em; + } + .large-block-grid-2 > li:nth-of-type(n) { + clear: none; + } + .large-block-grid-2 > li:nth-of-type(2n+1) { + clear: both; + } + + .large-block-grid-3 > li { + width: 33.33333%; + padding: 0 0.625em 1.25em; + } + .large-block-grid-3 > li:nth-of-type(n) { + clear: none; + } + .large-block-grid-3 > li:nth-of-type(3n+1) { + clear: both; + } + + .large-block-grid-4 > li { + width: 25%; + padding: 0 0.625em 1.25em; + } + .large-block-grid-4 > li:nth-of-type(n) { + clear: none; + } + .large-block-grid-4 > li:nth-of-type(4n+1) { + clear: both; + } + + .large-block-grid-5 > li { + width: 20%; + padding: 0 0.625em 1.25em; + } + .large-block-grid-5 > li:nth-of-type(n) { + clear: none; + } + .large-block-grid-5 > li:nth-of-type(5n+1) { + clear: both; + } + + .large-block-grid-6 > li { + width: 16.66667%; + padding: 0 0.625em 1.25em; + } + .large-block-grid-6 > li:nth-of-type(n) { + clear: none; + } + .large-block-grid-6 > li:nth-of-type(6n+1) { + clear: both; + } + + .large-block-grid-7 > li { + width: 14.28571%; + padding: 0 0.625em 1.25em; + } + .large-block-grid-7 > li:nth-of-type(n) { + clear: none; + } + .large-block-grid-7 > li:nth-of-type(7n+1) { + clear: both; + } + + .large-block-grid-8 > li { + width: 12.5%; + padding: 0 0.625em 1.25em; + } + .large-block-grid-8 > li:nth-of-type(n) { + clear: none; + } + .large-block-grid-8 > li:nth-of-type(8n+1) { + clear: both; + } + + .large-block-grid-9 > li { + width: 11.11111%; + padding: 0 0.625em 1.25em; + } + .large-block-grid-9 > li:nth-of-type(n) { + clear: none; + } + .large-block-grid-9 > li:nth-of-type(9n+1) { + clear: both; + } + + .large-block-grid-10 > li { + width: 10%; + padding: 0 0.625em 1.25em; + } + .large-block-grid-10 > li:nth-of-type(n) { + clear: none; + } + .large-block-grid-10 > li:nth-of-type(10n+1) { + clear: both; + } + + .large-block-grid-11 > li { + width: 9.09091%; + padding: 0 0.625em 1.25em; + } + .large-block-grid-11 > li:nth-of-type(n) { + clear: none; + } + .large-block-grid-11 > li:nth-of-type(11n+1) { + clear: both; + } + + .large-block-grid-12 > li { + width: 8.33333%; + padding: 0 0.625em 1.25em; + } + .large-block-grid-12 > li:nth-of-type(n) { + clear: none; + } + .large-block-grid-12 > li:nth-of-type(12n+1) { + clear: both; + } +} +p.lead { + font-size: 1.21875em; + line-height: 1.6; +} + +.subheader { + line-height: 1.4; + color: #6f6f6f; + font-weight: 300; + margin-top: 0.2em; + margin-bottom: 0.5em; +} + +/* Typography resets */ +div, +dl, +dt, +dd, +ul, +ol, +li, +h1, +h2, +h3, +h4, +h5, +h6, +pre, +form, +p, +blockquote, +th, +td { + margin: 0; + padding: 0; + direction: ltr; +} + +/* Default Link Styles */ +a { + color: gray; + text-decoration: none; + line-height: inherit; +} +a:hover, a:focus { + color: #737373; +} +a img { + border: none; +} + +/* Default paragraph styles */ +p { + font-family: inherit; + font-weight: normal; + font-size: 1em; + line-height: 1.6; + margin-bottom: 1.25em; + text-rendering: optimizeLegibility; +} +p aside { + font-size: 0.875em; + line-height: 1.35; + font-style: italic; +} + +/* Default header styles */ +h1, h2, h3, h4, h5, h6 { + font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; + font-weight: normal; + font-style: normal; + color: #222; + text-rendering: optimizeLegibility; + margin-top: 0.2em; + margin-bottom: 0.5em; + line-height: 1.2125em; +} +h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { + font-size: 60%; + color: #6f6f6f; + line-height: 0; +} + +h1 { + font-size: 1.25em; +} + +h2 { + font-size: 0.9375em; +} + +h3 { + font-size: 0.9375em; +} + +h4 { + font-size: 0.625em; +} + +h5 { + font-size: 0.625em; +} + +h6 { + font-size: 1em; +} + +hr { + border: solid #ddd; + border-width: 1px 0 0; + clear: both; + margin: 1.25em 0 1.1875em; + height: 0; +} + +/* Helpful Typography Defaults */ +em, +i { + font-style: italic; + line-height: inherit; +} + +strong, +b { + font-weight: bold; + line-height: inherit; +} + +small { + font-size: 60%; + line-height: inherit; +} + +code { + font-family: Consolas, "Liberation Mono", Courier, monospace; + font-weight: bold; + color: #7f0a0c; +} + +/* Lists */ +ul, +ol, +dl { + font-size: 1em; + line-height: 1.6; + margin-bottom: 1.25em; + list-style-position: outside; + font-family: inherit; +} + +ul, ol { + margin-left: 0; +} +ul.no-bullet, ol.no-bullet { + margin-left: 0; +} + +/* Unordered Lists */ +ul li ul, +ul li ol { + margin-left: 1.25em; + margin-bottom: 0; + font-size: 1em; + /* Override nested font-size change */ +} +ul.square li ul, ul.circle li ul, ul.disc li ul { + list-style: inherit; +} +ul.square { + list-style-type: square; +} +ul.circle { + list-style-type: circle; +} +ul.disc { + list-style-type: disc; +} +ul.no-bullet { + list-style: none; +} + +/* Ordered Lists */ +ol li ul, +ol li ol { + margin-left: 1.25em; + margin-bottom: 0; +} + +/* Definition Lists */ +dl dt { + margin-bottom: 0.3em; + font-weight: bold; +} +dl dd { + margin-bottom: 0.75em; +} + +/* Abbreviations */ +abbr, +acronym { + text-transform: uppercase; + font-size: 90%; + color: #333333; + border-bottom: 1px dotted #ddd; + cursor: help; +} + +abbr { + text-transform: none; +} + +/* Blockquotes */ +blockquote { + margin: 0 0 1.25em; + padding: 0.5625em 1.25em 0 1.1875em; + border-left: 1px solid #ddd; +} +blockquote cite { + display: block; + font-size: 0.8125em; + color: #555555; +} +blockquote cite:before { + content: "\2014 \0020"; +} +blockquote cite a, +blockquote cite a:visited { + color: #555555; +} + +blockquote, +blockquote p { + line-height: 1.6; + color: #6f6f6f; +} + +/* Microformats */ +.vcard { + display: inline-block; + margin: 0 0 1.25em 0; + border: 1px solid #ddd; + padding: 0.625em 0.75em; +} +.vcard li { + margin: 0; + display: block; +} +.vcard .fn { + font-weight: bold; + font-size: 0.9375em; +} + +.vevent .summary { + font-weight: bold; +} +.vevent abbr { + cursor: default; + text-decoration: none; + font-weight: bold; + border: none; + padding: 0 0.0625em; +} + +@media only screen and (min-width: 730px) { + h1, h2, h3, h4, h5, h6 { + line-height: 1.4; + } + + h1 { + font-size: 1.875em; + } + + h2 { + font-size: 1.5625em; + } + + h3 { + font-size: 1.25em; + } + + h4 { + font-size: 0.9375em; + } +} +/* + * Print styles. + * + * Inlined to avoid required HTTP connection: www.phpied.com/delay-loading-your-print-css/ + * Credit to Paul Irish and HTML5 Boilerplate (html5boilerplate.com) +*/ +.print-only { + display: none !important; +} + +@media print { + * { + background: transparent !important; + color: #000 !important; + /* Black prints faster: h5bp.com/s */ + box-shadow: none !important; + text-shadow: none !important; + } + + a, + a:visited { + text-decoration: underline; + } + + a[href]:after { + content: " (" attr(href) ")"; + } + + abbr[title]:after { + content: " (" attr(title) ")"; + } + + .ir a:after, + a[href^="javascript:"]:after, + a[href^="#"]:after { + content: ""; + } + + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + + thead { + display: table-header-group; + /* h5bp.com/t */ + } + + tr, + img { + page-break-inside: avoid; + } + + img { + max-width: 100% !important; + } + + @page { + margin: 0.5cm; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + + h2, + h3 { + page-break-after: avoid; + } + + .hide-on-print { + display: none !important; + } + + .print-only { + display: block !important; + } + + .hide-for-print { + display: none !important; + } + + .show-for-print { + display: inherit !important; + } +} +button, .button { + border-style: solid; + border-width: 1px; + cursor: pointer; + font-family: inherit; + font-weight: normal; + line-height: normal; + margin: 0 0 1.25em; + position: relative; + text-decoration: none; + text-align: center; + display: inline-block; + padding-top: 0.75em; + padding-right: 1.5em; + padding-bottom: 0.8125em; + padding-left: 1.5em; + font-size: 1em; + background-color: gray; + border-color: #666666; + color: #fff; +} +button:hover, button:focus, .button:hover, .button:focus { + background-color: #666666; +} +button:hover, button:focus, .button:hover, .button:focus { + color: #fff; +} +button.secondary, .button.secondary { + background-color: #e9e9e9; + border-color: #d0d0d0; + color: #333; +} +button.secondary:hover, button.secondary:focus, .button.secondary:hover, .button.secondary:focus { + background-color: #d0d0d0; +} +button.secondary:hover, button.secondary:focus, .button.secondary:hover, .button.secondary:focus { + color: #333; +} +button.success, .button.success { + background-color: #5da423; + border-color: #457a1a; + color: #fff; +} +button.success:hover, button.success:focus, .button.success:hover, .button.success:focus { + background-color: #457a1a; +} +button.success:hover, button.success:focus, .button.success:hover, .button.success:focus { + color: #fff; +} +button.alert, .button.alert { + background-color: #c60f13; + border-color: #970b0e; + color: #fff; +} +button.alert:hover, button.alert:focus, .button.alert:hover, .button.alert:focus { + background-color: #970b0e; +} +button.alert:hover, button.alert:focus, .button.alert:hover, .button.alert:focus { + color: #fff; +} +button.large, .button.large { + padding-top: 1em; + padding-right: 2em; + padding-bottom: 1.0625em; + padding-left: 2em; + font-size: 1.25em; +} +button.small, .button.small { + padding-top: 0.5625em; + padding-right: 1.125em; + padding-bottom: 0.625em; + padding-left: 1.125em; + font-size: 0.8125em; +} +button.tiny, .button.tiny { + padding-top: 0.4375em; + padding-right: 0.875em; + padding-bottom: 0.5em; + padding-left: 0.875em; + font-size: 0.6875em; +} +button.expand, .button.expand { + padding-right: 0; + padding-left: 0; + width: 100%; +} +button.left-align, .button.left-align { + text-align: left; + text-indent: 0.75em; +} +button.right-align, .button.right-align { + text-align: right; + padding-right: 0.75em; +} +button.disabled, button[disabled], .button.disabled, .button[disabled] { + background-color: gray; + border-color: #666666; + color: #fff; + cursor: default; + opacity: 0.6; + -webkit-box-shadow: none; + box-shadow: none; +} +button.disabled:hover, button.disabled:focus, button[disabled]:hover, button[disabled]:focus, .button.disabled:hover, .button.disabled:focus, .button[disabled]:hover, .button[disabled]:focus { + background-color: #666666; +} +button.disabled:hover, button.disabled:focus, button[disabled]:hover, button[disabled]:focus, .button.disabled:hover, .button.disabled:focus, .button[disabled]:hover, .button[disabled]:focus { + color: #fff; +} +button.disabled:hover, button.disabled:focus, button[disabled]:hover, button[disabled]:focus, .button.disabled:hover, .button.disabled:focus, .button[disabled]:hover, .button[disabled]:focus { + background-color: gray; +} +button.disabled.secondary, button[disabled].secondary, .button.disabled.secondary, .button[disabled].secondary { + background-color: #e9e9e9; + border-color: #d0d0d0; + color: #333; + cursor: default; + opacity: 0.6; + -webkit-box-shadow: none; + box-shadow: none; +} +button.disabled.secondary:hover, button.disabled.secondary:focus, button[disabled].secondary:hover, button[disabled].secondary:focus, .button.disabled.secondary:hover, .button.disabled.secondary:focus, .button[disabled].secondary:hover, .button[disabled].secondary:focus { + background-color: #d0d0d0; +} +button.disabled.secondary:hover, button.disabled.secondary:focus, button[disabled].secondary:hover, button[disabled].secondary:focus, .button.disabled.secondary:hover, .button.disabled.secondary:focus, .button[disabled].secondary:hover, .button[disabled].secondary:focus { + color: #333; +} +button.disabled.secondary:hover, button.disabled.secondary:focus, button[disabled].secondary:hover, button[disabled].secondary:focus, .button.disabled.secondary:hover, .button.disabled.secondary:focus, .button[disabled].secondary:hover, .button[disabled].secondary:focus { + background-color: #e9e9e9; +} +button.disabled.success, button[disabled].success, .button.disabled.success, .button[disabled].success { + background-color: #5da423; + border-color: #457a1a; + color: #fff; + cursor: default; + opacity: 0.6; + -webkit-box-shadow: none; + box-shadow: none; +} +button.disabled.success:hover, button.disabled.success:focus, button[disabled].success:hover, button[disabled].success:focus, .button.disabled.success:hover, .button.disabled.success:focus, .button[disabled].success:hover, .button[disabled].success:focus { + background-color: #457a1a; +} +button.disabled.success:hover, button.disabled.success:focus, button[disabled].success:hover, button[disabled].success:focus, .button.disabled.success:hover, .button.disabled.success:focus, .button[disabled].success:hover, .button[disabled].success:focus { + color: #fff; +} +button.disabled.success:hover, button.disabled.success:focus, button[disabled].success:hover, button[disabled].success:focus, .button.disabled.success:hover, .button.disabled.success:focus, .button[disabled].success:hover, .button[disabled].success:focus { + background-color: #5da423; +} +button.disabled.alert, button[disabled].alert, .button.disabled.alert, .button[disabled].alert { + background-color: #c60f13; + border-color: #970b0e; + color: #fff; + cursor: default; + opacity: 0.6; + -webkit-box-shadow: none; + box-shadow: none; +} +button.disabled.alert:hover, button.disabled.alert:focus, button[disabled].alert:hover, button[disabled].alert:focus, .button.disabled.alert:hover, .button.disabled.alert:focus, .button[disabled].alert:hover, .button[disabled].alert:focus { + background-color: #970b0e; +} +button.disabled.alert:hover, button.disabled.alert:focus, button[disabled].alert:hover, button[disabled].alert:focus, .button.disabled.alert:hover, .button.disabled.alert:focus, .button[disabled].alert:hover, .button[disabled].alert:focus { + color: #fff; +} +button.disabled.alert:hover, button.disabled.alert:focus, button[disabled].alert:hover, button[disabled].alert:focus, .button.disabled.alert:hover, .button.disabled.alert:focus, .button[disabled].alert:hover, .button[disabled].alert:focus { + background-color: #c60f13; +} + +button, .button { + padding-top: 0.8125em; + padding-bottom: 0.75em; + -webkit-appearance: none; +} +button.tiny, .button.tiny { + padding-top: 0.5em; + padding-bottom: 0.4375em; + -webkit-appearance: none; +} +button.small, .button.small { + padding-top: 0.625em; + padding-bottom: 0.5625em; + -webkit-appearance: none; +} +button.large, .button.large { + padding-top: 1.03125em; + padding-bottom: 1.03125em; + -webkit-appearance: none; +} + +@media only screen { + button, .button { + -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5) inset; + box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5) inset; + -webkit-transition: background-color 300ms ease-out; + -moz-transition: background-color 300ms ease-out; + transition: background-color 300ms ease-out; + } + button:active, .button:active { + -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2) inset; + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2) inset; + } + button.radius, .button.radius { + -webkit-border-radius: 3px; + border-radius: 3px; + } + button.round, .button.round { + -webkit-border-radius: 1000px; + border-radius: 1000px; + } +} +@media only screen and (min-width: 730px) { + button, .button { + display: inline-block; + } +} +/* Standard Forms */ +form { + margin: 0 0 1em; +} + +/* Using forms within rows, we need to set some defaults */ +form .row .row { + margin: 0 -0.5em; +} +form .row .row .column, +form .row .row .columns { + padding: 0 0.5em; +} +form .row .row.collapse { + margin: 0; +} +form .row .row.collapse .column, +form .row .row.collapse .columns { + padding: 0; +} +form .row .row.collapse input { + -moz-border-radius-bottomright: 0; + -moz-border-radius-topright: 0; + -webkit-border-bottom-right-radius: 0; + -webkit-border-top-right-radius: 0; +} +form .row input.column, +form .row input.columns, +form .row textarea.column, +form .row textarea.columns { + padding-left: 0.5em; +} + +/* Label Styles */ +label { + font-size: 0.875em; + color: #4d4d4d; + cursor: pointer; + display: block; + font-weight: 700; + margin-bottom: 0.1875em; + /* Styles for required inputs */ +} +label.right { + float: none; + text-align: right; +} +label.inline { + margin: 0 0 1em 0; + padding: 0.625em 0; +} +label small { + text-transform: capitalize; + color: #666666; +} + +/* Attach elements to the beginning or end of an input */ +.prefix, +.postfix { + display: block; + position: relative; + z-index: 2; + text-align: center; + width: 100%; + padding-top: 0; + padding-bottom: 0; + border-style: solid; + border-width: 1px; + overflow: hidden; + font-size: 0.875em; + height: 2.3125em; + line-height: 2.3125em; +} + +/* Adjust padding, alignment and radius if pre/post element is a button */ +.postfix.button { + padding-left: 0; + padding-right: 0; + padding-top: 0; + padding-bottom: 0; + text-align: center; + line-height: 2.125em; +} + +.prefix.button { + padding-left: 0; + padding-right: 0; + padding-top: 0; + padding-bottom: 0; + text-align: center; + line-height: 2.125em; +} + +.prefix.button.radius { + -webkit-border-radius: 0; + border-radius: 0; + -moz-border-radius-bottomleft: 3px; + -moz-border-radius-topleft: 3px; + -webkit-border-bottom-left-radius: 3px; + -webkit-border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} + +.postfix.button.radius { + -webkit-border-radius: 0; + border-radius: 0; + -moz-border-radius-topright: 3px; + -moz-border-radius-bottomright: 3px; + -webkit-border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} + +.prefix.button.round { + -webkit-border-radius: 0; + border-radius: 0; + -moz-border-radius-bottomleft: 1000px; + -moz-border-radius-topleft: 1000px; + -webkit-border-bottom-left-radius: 1000px; + -webkit-border-top-left-radius: 1000px; + border-bottom-left-radius: 1000px; + border-top-left-radius: 1000px; +} + +.postfix.button.round { + -webkit-border-radius: 0; + border-radius: 0; + -moz-border-radius-topright: 1000px; + -moz-border-radius-bottomright: 1000px; + -webkit-border-top-right-radius: 1000px; + -webkit-border-bottom-right-radius: 1000px; + border-top-right-radius: 1000px; + border-bottom-right-radius: 1000px; +} + +/* Separate prefix and postfix styles when on span or label so buttons keep their own */ +span.prefix, label.prefix { + background: #f2f2f2; + border-color: #d9d9d9; + border-right: none; + color: #333; +} +span.prefix.radius, label.prefix.radius { + -webkit-border-radius: 0; + border-radius: 0; + -moz-border-radius-bottomleft: 3px; + -moz-border-radius-topleft: 3px; + -webkit-border-bottom-left-radius: 3px; + -webkit-border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} + +span.postfix, label.postfix { + background: #f2f2f2; + border-color: #cccccc; + border-left: none; + color: #333; +} +span.postfix.radius, label.postfix.radius { + -webkit-border-radius: 0; + border-radius: 0; + -moz-border-radius-topright: 3px; + -moz-border-radius-bottomright: 3px; + -webkit-border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} + +/* Input groups will automatically style first and last elements of the group */ +.input-group.radius > *:first-child, .input-group.radius > *:first-child * { + -moz-border-radius-bottomleft: 3px; + -moz-border-radius-topleft: 3px; + -webkit-border-bottom-left-radius: 3px; + -webkit-border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} +.input-group.radius > *:last-child, .input-group.radius > *:last-child * { + -moz-border-radius-topright: 3px; + -moz-border-radius-bottomright: 3px; + -webkit-border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} +.input-group.round > *:first-child, .input-group.round > *:first-child * { + -moz-border-radius-bottomleft: 1000px; + -moz-border-radius-topleft: 1000px; + -webkit-border-bottom-left-radius: 1000px; + -webkit-border-top-left-radius: 1000px; + border-bottom-left-radius: 1000px; + border-top-left-radius: 1000px; +} +.input-group.round > *:last-child, .input-group.round > *:last-child * { + -moz-border-radius-topright: 1000px; + -moz-border-radius-bottomright: 1000px; + -webkit-border-top-right-radius: 1000px; + -webkit-border-bottom-right-radius: 1000px; + border-top-right-radius: 1000px; + border-bottom-right-radius: 1000px; +} + +/* We use this to get basic styling on all basic form elements */ +input[type="text"], +input[type="password"], +input[type="date"], +input[type="datetime"], +input[type="datetime-local"], +input[type="month"], +input[type="week"], +input[type="email"], +input[type="number"], +input[type="search"], +input[type="tel"], +input[type="time"], +input[type="url"], +textarea { + -webkit-appearance: none; + -webkit-border-radius: 0; + border-radius: 0; + background-color: #fff; + font-family: inherit; + border: 1px solid #cccccc; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + color: rgba(0, 0, 0, 0.75); + display: block; + font-size: 0.875em; + margin: 0 0 1em 0; + padding: 0.5em; + height: 2.3125em; + width: 100%; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-transition: -webkit-box-shadow 0.45s, border-color 0.45s ease-in-out; + -moz-transition: -moz-box-shadow 0.45s, border-color 0.45s ease-in-out; + transition: box-shadow 0.45s, border-color 0.45s ease-in-out; +} +input[type="text"]:focus, +input[type="password"]:focus, +input[type="date"]:focus, +input[type="datetime"]:focus, +input[type="datetime-local"]:focus, +input[type="month"]:focus, +input[type="week"]:focus, +input[type="email"]:focus, +input[type="number"]:focus, +input[type="search"]:focus, +input[type="tel"]:focus, +input[type="time"]:focus, +input[type="url"]:focus, +textarea:focus { + -webkit-box-shadow: 0 0 5px #999999; + -moz-box-shadow: 0 0 5px #999999; + box-shadow: 0 0 5px #999999; + border-color: #999999; +} +input[type="text"]:focus, +input[type="password"]:focus, +input[type="date"]:focus, +input[type="datetime"]:focus, +input[type="datetime-local"]:focus, +input[type="month"]:focus, +input[type="week"]:focus, +input[type="email"]:focus, +input[type="number"]:focus, +input[type="search"]:focus, +input[type="tel"]:focus, +input[type="time"]:focus, +input[type="url"]:focus, +textarea:focus { + background: #fafafa; + border-color: #999999; + outline: none; +} +input[type="text"][disabled], +input[type="password"][disabled], +input[type="date"][disabled], +input[type="datetime"][disabled], +input[type="datetime-local"][disabled], +input[type="month"][disabled], +input[type="week"][disabled], +input[type="email"][disabled], +input[type="number"][disabled], +input[type="search"][disabled], +input[type="tel"][disabled], +input[type="time"][disabled], +input[type="url"][disabled], +textarea[disabled] { + background-color: #ddd; +} + +/* Adjust margin for form elements below */ +input[type="file"], +input[type="checkbox"], +input[type="radio"], +select { + margin: 0 0 1em 0; +} + +/* Normalize file input width */ +input[type="file"] { + width: 100%; +} + +/* We add basic fieldset styling */ +fieldset { + border: solid 1px #ddd; + padding: 1.25em; + margin: 1.125em 0; +} +fieldset legend { + font-weight: bold; + background: #fff; + padding: 0 0.1875em; + margin: 0; + margin-left: -0.1875em; +} + +/* Error Handling */ +[data-abide] .error small.error, [data-abide] span.error, [data-abide] small.error { + display: block; + padding: 0.375em 0.25em; + margin-top: 0; + margin-bottom: 1em; + font-size: 0.75em; + font-weight: bold; + background: #c60f13; + color: #fff; +} +[data-abide] span.error, [data-abide] small.error { + display: none; +} + +span.error, small.error { + display: block; + padding: 0.375em 0.25em; + margin-top: 0; + margin-bottom: 1em; + font-size: 0.75em; + font-weight: bold; + background: #c60f13; + color: #fff; +} + +.error input, +.error textarea, +.error select { + border-color: #c60f13; + background-color: rgba(198, 15, 19, 0.1); + margin-bottom: 0; +} +.error input:focus, +.error textarea:focus, +.error select:focus { + background: #fafafa; + border-color: #999999; +} +.error label, +.error label.error { + color: #c60f13; +} +.error > small, +.error small.error { + display: block; + padding: 0.375em 0.25em; + margin-top: 0; + margin-bottom: 1em; + font-size: 0.75em; + font-weight: bold; + background: #c60f13; + color: #fff; +} +.error span.error-message { + display: block; +} + +input.error, +textarea.error { + border-color: #c60f13; + background-color: rgba(198, 15, 19, 0.1); + margin-bottom: 0; +} +input.error:focus, +textarea.error:focus { + background: #fafafa; + border-color: #999999; +} + +.error select { + border-color: #c60f13; + background-color: rgba(198, 15, 19, 0.1); +} +.error select:focus { + background: #fafafa; + border-color: #999999; +} + +label.error { + color: #c60f13; +} + +/* Button Groups */ +.button-group { + list-style: none; + margin: 0; + *zoom: 1; +} +.button-group:before, .button-group:after { + content: " "; + display: table; +} +.button-group:after { + clear: both; +} +.button-group > * { + margin: 0 0 0 -1px; + float: left; +} +.button-group > *:first-child { + margin-left: 0; +} +.button-group.radius > *:first-child, .button-group.radius > *:first-child > a, .button-group.radius > *:first-child > button, .button-group.radius > *:first-child > .button { + -moz-border-radius-bottomleft: 3px; + -moz-border-radius-topleft: 3px; + -webkit-border-bottom-left-radius: 3px; + -webkit-border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} +.button-group.radius > *:last-child, .button-group.radius > *:last-child > a, .button-group.radius > *:last-child > button, .button-group.radius > *:last-child > .button { + -moz-border-radius-topright: 3px; + -moz-border-radius-bottomright: 3px; + -webkit-border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} +.button-group.round > *:first-child, .button-group.round > *:first-child > a, .button-group.round > *:first-child > button, .button-group.round > *:first-child > .button { + -moz-border-radius-bottomleft: 1000px; + -moz-border-radius-topleft: 1000px; + -webkit-border-bottom-left-radius: 1000px; + -webkit-border-top-left-radius: 1000px; + border-bottom-left-radius: 1000px; + border-top-left-radius: 1000px; +} +.button-group.round > *:last-child, .button-group.round > *:last-child > a, .button-group.round > *:last-child > button, .button-group.round > *:last-child > .button { + -moz-border-radius-topright: 1000px; + -moz-border-radius-bottomright: 1000px; + -webkit-border-top-right-radius: 1000px; + -webkit-border-bottom-right-radius: 1000px; + border-top-right-radius: 1000px; + border-bottom-right-radius: 1000px; +} +.button-group.even-2 li { + width: 50%; +} +.button-group.even-2 li button, .button-group.even-2 li .button { + width: 100%; +} +.button-group.even-3 li { + width: 33.33333%; +} +.button-group.even-3 li button, .button-group.even-3 li .button { + width: 100%; +} +.button-group.even-4 li { + width: 25%; +} +.button-group.even-4 li button, .button-group.even-4 li .button { + width: 100%; +} +.button-group.even-5 li { + width: 20%; +} +.button-group.even-5 li button, .button-group.even-5 li .button { + width: 100%; +} +.button-group.even-6 li { + width: 16.66667%; +} +.button-group.even-6 li button, .button-group.even-6 li .button { + width: 100%; +} +.button-group.even-7 li { + width: 14.28571%; +} +.button-group.even-7 li button, .button-group.even-7 li .button { + width: 100%; +} +.button-group.even-8 li { + width: 12.5%; +} +.button-group.even-8 li button, .button-group.even-8 li .button { + width: 100%; +} + +.button-bar { + *zoom: 1; +} +.button-bar:before, .button-bar:after { + content: " "; + display: table; +} +.button-bar:after { + clear: both; +} +.button-bar .button-group { + float: left; + margin-right: 0.625em; +} +.button-bar .button-group div { + overflow: hidden; +} + +/* Dropdown Button */ +.dropdown.button { + position: relative; + padding-right: 3.1875em; +} +.dropdown.button:before { + position: absolute; + content: ""; + width: 0; + height: 0; + display: block; + border-style: solid; + border-color: #fff transparent transparent transparent; + top: 50%; +} +.dropdown.button:before { + border-width: 0.5625em; + right: 1.5em; + margin-top: -0.25em; +} +.dropdown.button:before { + border-color: #fff transparent transparent transparent; +} +.dropdown.button.tiny { + padding-right: 2.1875em; +} +.dropdown.button.tiny:before { + border-width: 0.4375em; + right: 0.875em; + margin-top: -0.15625em; +} +.dropdown.button.tiny:before { + border-color: #fff transparent transparent transparent; +} +.dropdown.button.small { + padding-right: 2.8125em; +} +.dropdown.button.small:before { + border-width: 0.5625em; + right: 1.125em; + margin-top: -0.21875em; +} +.dropdown.button.small:before { + border-color: #fff transparent transparent transparent; +} +.dropdown.button.large { + padding-right: 4em; +} +.dropdown.button.large:before { + border-width: 0.625em; + right: 1.75em; + margin-top: -0.3125em; +} +.dropdown.button.large:before { + border-color: #fff transparent transparent transparent; +} +.dropdown.button.secondary:before { + border-color: #333 transparent transparent transparent; +} + +/* Split Buttons */ +.split.button { + position: relative; + padding-right: 4.8em; +} +.split.button span { + display: block; + height: 100%; + position: absolute; + right: 0; + top: 0; + border-left: solid 1px; +} +.split.button span:before { + position: absolute; + content: ""; + width: 0; + height: 0; + display: block; + border-style: inset; + left: 50%; +} +.split.button span:active { + background-color: rgba(0, 0, 0, 0.1); +} +.split.button span { + border-left-color: #595959; +} +.split.button span { + width: 3em; +} +.split.button span:before { + border-top-style: solid; + border-width: 0.5625em; + top: 1.125em; + margin-left: -0.5625em; +} +.split.button span:before { + border-color: #fff transparent transparent transparent; +} +.split.button.secondary span { + border-left-color: #c3c3c3; +} +.split.button.secondary span:before { + border-color: #fff transparent transparent transparent; +} +.split.button.alert span { + border-left-color: #7f0a0c; +} +.split.button.success span { + border-left-color: #396516; +} +.split.button.tiny { + padding-right: 3.9375em; +} +.split.button.tiny span { + width: 2.84375em; +} +.split.button.tiny span:before { + border-top-style: solid; + border-width: 0.4375em; + top: 0.875em; + margin-left: -0.3125em; +} +.split.button.small { + padding-right: 3.9375em; +} +.split.button.small span { + width: 2.8125em; +} +.split.button.small span:before { + border-top-style: solid; + border-width: 0.5625em; + top: 0.84375em; + margin-left: -0.5625em; +} +.split.button.large { + padding-right: 6em; +} +.split.button.large span { + width: 3.75em; +} +.split.button.large span:before { + border-top-style: solid; + border-width: 0.625em; + top: 1.3125em; + margin-left: -0.5625em; +} +.split.button.expand { + padding-left: 2em; +} +.split.button.secondary span:before { + border-color: #333 transparent transparent transparent; +} +.split.button.radius span { + -moz-border-radius-topright: 3px; + -moz-border-radius-bottomright: 3px; + -webkit-border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} +.split.button.round span { + -moz-border-radius-topright: 1000px; + -moz-border-radius-bottomright: 1000px; + -webkit-border-top-right-radius: 1000px; + -webkit-border-bottom-right-radius: 1000px; + border-top-right-radius: 1000px; + border-bottom-right-radius: 1000px; +} + +/* Flex Video */ +.flex-video { + position: relative; + padding-top: 1.5625em; + padding-bottom: 67.5%; + height: 0; + margin-bottom: 1em; + overflow: hidden; +} +.flex-video.widescreen { + padding-bottom: 57.25%; +} +.flex-video.vimeo { + padding-top: 0; +} +.flex-video iframe, +.flex-video object, +.flex-video embed, +.flex-video video { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +/* Sections */ +[data-section=''], [data-section='auto'], .section-container.auto, +[data-section='vertical-tabs'], .section-container.vertical-tabs, +[data-section='vertical-nav'], .section-container.vertical-nav, +[data-section='horizontal-nav'], .section-container.horizontal-nav, +[data-section='accordion'], .section-container.accordion { + width: 100%; + position: relative; + display: block; + margin-bottom: 1.25em; +} +[data-section=''][data-section-small-style], [data-section='auto'][data-section-small-style], .section-container.auto[data-section-small-style], +[data-section='vertical-tabs'][data-section-small-style], .section-container.vertical-tabs[data-section-small-style], +[data-section='vertical-nav'][data-section-small-style], .section-container.vertical-nav[data-section-small-style], +[data-section='horizontal-nav'][data-section-small-style], .section-container.horizontal-nav[data-section-small-style], +[data-section='accordion'][data-section-small-style], .section-container.accordion[data-section-small-style] { + width: 100% !important; +} +[data-section=''][data-section-small-style] > [data-section-region], [data-section=''][data-section-small-style] > section, [data-section=''][data-section-small-style] > .section, [data-section='auto'][data-section-small-style] > [data-section-region], [data-section='auto'][data-section-small-style] > section, [data-section='auto'][data-section-small-style] > .section, .section-container.auto[data-section-small-style] > [data-section-region], .section-container.auto[data-section-small-style] > section, .section-container.auto[data-section-small-style] > .section, +[data-section='vertical-tabs'][data-section-small-style] > [data-section-region], +[data-section='vertical-tabs'][data-section-small-style] > section, +[data-section='vertical-tabs'][data-section-small-style] > .section, .section-container.vertical-tabs[data-section-small-style] > [data-section-region], .section-container.vertical-tabs[data-section-small-style] > section, .section-container.vertical-tabs[data-section-small-style] > .section, +[data-section='vertical-nav'][data-section-small-style] > [data-section-region], +[data-section='vertical-nav'][data-section-small-style] > section, +[data-section='vertical-nav'][data-section-small-style] > .section, .section-container.vertical-nav[data-section-small-style] > [data-section-region], .section-container.vertical-nav[data-section-small-style] > section, .section-container.vertical-nav[data-section-small-style] > .section, +[data-section='horizontal-nav'][data-section-small-style] > [data-section-region], +[data-section='horizontal-nav'][data-section-small-style] > section, +[data-section='horizontal-nav'][data-section-small-style] > .section, .section-container.horizontal-nav[data-section-small-style] > [data-section-region], .section-container.horizontal-nav[data-section-small-style] > section, .section-container.horizontal-nav[data-section-small-style] > .section, +[data-section='accordion'][data-section-small-style] > [data-section-region], +[data-section='accordion'][data-section-small-style] > section, +[data-section='accordion'][data-section-small-style] > .section, .section-container.accordion[data-section-small-style] > [data-section-region], .section-container.accordion[data-section-small-style] > section, .section-container.accordion[data-section-small-style] > .section { + padding: 0 !important; + margin: 0 !important; +} +[data-section=''][data-section-small-style] > [data-section-region] > [data-section-title], [data-section=''][data-section-small-style] > [data-section-region] > .title, [data-section=''][data-section-small-style] > section > [data-section-title], [data-section=''][data-section-small-style] > section > .title, [data-section=''][data-section-small-style] > .section > [data-section-title], [data-section=''][data-section-small-style] > .section > .title, [data-section='auto'][data-section-small-style] > [data-section-region] > [data-section-title], [data-section='auto'][data-section-small-style] > [data-section-region] > .title, [data-section='auto'][data-section-small-style] > section > [data-section-title], [data-section='auto'][data-section-small-style] > section > .title, [data-section='auto'][data-section-small-style] > .section > [data-section-title], [data-section='auto'][data-section-small-style] > .section > .title, .section-container.auto[data-section-small-style] > [data-section-region] > [data-section-title], .section-container.auto[data-section-small-style] > [data-section-region] > .title, .section-container.auto[data-section-small-style] > section > [data-section-title], .section-container.auto[data-section-small-style] > section > .title, .section-container.auto[data-section-small-style] > .section > [data-section-title], .section-container.auto[data-section-small-style] > .section > .title, +[data-section='vertical-tabs'][data-section-small-style] > [data-section-region] > [data-section-title], +[data-section='vertical-tabs'][data-section-small-style] > [data-section-region] > .title, +[data-section='vertical-tabs'][data-section-small-style] > section > [data-section-title], +[data-section='vertical-tabs'][data-section-small-style] > section > .title, +[data-section='vertical-tabs'][data-section-small-style] > .section > [data-section-title], +[data-section='vertical-tabs'][data-section-small-style] > .section > .title, .section-container.vertical-tabs[data-section-small-style] > [data-section-region] > [data-section-title], .section-container.vertical-tabs[data-section-small-style] > [data-section-region] > .title, .section-container.vertical-tabs[data-section-small-style] > section > [data-section-title], .section-container.vertical-tabs[data-section-small-style] > section > .title, .section-container.vertical-tabs[data-section-small-style] > .section > [data-section-title], .section-container.vertical-tabs[data-section-small-style] > .section > .title, +[data-section='vertical-nav'][data-section-small-style] > [data-section-region] > [data-section-title], +[data-section='vertical-nav'][data-section-small-style] > [data-section-region] > .title, +[data-section='vertical-nav'][data-section-small-style] > section > [data-section-title], +[data-section='vertical-nav'][data-section-small-style] > section > .title, +[data-section='vertical-nav'][data-section-small-style] > .section > [data-section-title], +[data-section='vertical-nav'][data-section-small-style] > .section > .title, .section-container.vertical-nav[data-section-small-style] > [data-section-region] > [data-section-title], .section-container.vertical-nav[data-section-small-style] > [data-section-region] > .title, .section-container.vertical-nav[data-section-small-style] > section > [data-section-title], .section-container.vertical-nav[data-section-small-style] > section > .title, .section-container.vertical-nav[data-section-small-style] > .section > [data-section-title], .section-container.vertical-nav[data-section-small-style] > .section > .title, +[data-section='horizontal-nav'][data-section-small-style] > [data-section-region] > [data-section-title], +[data-section='horizontal-nav'][data-section-small-style] > [data-section-region] > .title, +[data-section='horizontal-nav'][data-section-small-style] > section > [data-section-title], +[data-section='horizontal-nav'][data-section-small-style] > section > .title, +[data-section='horizontal-nav'][data-section-small-style] > .section > [data-section-title], +[data-section='horizontal-nav'][data-section-small-style] > .section > .title, .section-container.horizontal-nav[data-section-small-style] > [data-section-region] > [data-section-title], .section-container.horizontal-nav[data-section-small-style] > [data-section-region] > .title, .section-container.horizontal-nav[data-section-small-style] > section > [data-section-title], .section-container.horizontal-nav[data-section-small-style] > section > .title, .section-container.horizontal-nav[data-section-small-style] > .section > [data-section-title], .section-container.horizontal-nav[data-section-small-style] > .section > .title, +[data-section='accordion'][data-section-small-style] > [data-section-region] > [data-section-title], +[data-section='accordion'][data-section-small-style] > [data-section-region] > .title, +[data-section='accordion'][data-section-small-style] > section > [data-section-title], +[data-section='accordion'][data-section-small-style] > section > .title, +[data-section='accordion'][data-section-small-style] > .section > [data-section-title], +[data-section='accordion'][data-section-small-style] > .section > .title, .section-container.accordion[data-section-small-style] > [data-section-region] > [data-section-title], .section-container.accordion[data-section-small-style] > [data-section-region] > .title, .section-container.accordion[data-section-small-style] > section > [data-section-title], .section-container.accordion[data-section-small-style] > section > .title, .section-container.accordion[data-section-small-style] > .section > [data-section-title], .section-container.accordion[data-section-small-style] > .section > .title { + width: 100% !important; +} +[data-section=''] > section, [data-section=''] > .section, [data-section=''] > [data-section-region], [data-section='auto'] > section, [data-section='auto'] > .section, [data-section='auto'] > [data-section-region], .section-container.auto > section, .section-container.auto > .section, .section-container.auto > [data-section-region], +[data-section='vertical-tabs'] > section, +[data-section='vertical-tabs'] > .section, +[data-section='vertical-tabs'] > [data-section-region], .section-container.vertical-tabs > section, .section-container.vertical-tabs > .section, .section-container.vertical-tabs > [data-section-region], +[data-section='vertical-nav'] > section, +[data-section='vertical-nav'] > .section, +[data-section='vertical-nav'] > [data-section-region], .section-container.vertical-nav > section, .section-container.vertical-nav > .section, .section-container.vertical-nav > [data-section-region], +[data-section='horizontal-nav'] > section, +[data-section='horizontal-nav'] > .section, +[data-section='horizontal-nav'] > [data-section-region], .section-container.horizontal-nav > section, .section-container.horizontal-nav > .section, .section-container.horizontal-nav > [data-section-region], +[data-section='accordion'] > section, +[data-section='accordion'] > .section, +[data-section='accordion'] > [data-section-region], .section-container.accordion > section, .section-container.accordion > .section, .section-container.accordion > [data-section-region] { + margin: 0; +} +[data-section=''] > section > [data-section-title], [data-section=''] > section > .title, [data-section=''] > .section > [data-section-title], [data-section=''] > .section > .title, [data-section=''] > [data-section-region] > [data-section-title], [data-section=''] > [data-section-region] > .title, [data-section='auto'] > section > [data-section-title], [data-section='auto'] > section > .title, [data-section='auto'] > .section > [data-section-title], [data-section='auto'] > .section > .title, [data-section='auto'] > [data-section-region] > [data-section-title], [data-section='auto'] > [data-section-region] > .title, .section-container.auto > section > [data-section-title], .section-container.auto > section > .title, .section-container.auto > .section > [data-section-title], .section-container.auto > .section > .title, .section-container.auto > [data-section-region] > [data-section-title], .section-container.auto > [data-section-region] > .title, +[data-section='vertical-tabs'] > section > [data-section-title], +[data-section='vertical-tabs'] > section > .title, +[data-section='vertical-tabs'] > .section > [data-section-title], +[data-section='vertical-tabs'] > .section > .title, +[data-section='vertical-tabs'] > [data-section-region] > [data-section-title], +[data-section='vertical-tabs'] > [data-section-region] > .title, .section-container.vertical-tabs > section > [data-section-title], .section-container.vertical-tabs > section > .title, .section-container.vertical-tabs > .section > [data-section-title], .section-container.vertical-tabs > .section > .title, .section-container.vertical-tabs > [data-section-region] > [data-section-title], .section-container.vertical-tabs > [data-section-region] > .title, +[data-section='vertical-nav'] > section > [data-section-title], +[data-section='vertical-nav'] > section > .title, +[data-section='vertical-nav'] > .section > [data-section-title], +[data-section='vertical-nav'] > .section > .title, +[data-section='vertical-nav'] > [data-section-region] > [data-section-title], +[data-section='vertical-nav'] > [data-section-region] > .title, .section-container.vertical-nav > section > [data-section-title], .section-container.vertical-nav > section > .title, .section-container.vertical-nav > .section > [data-section-title], .section-container.vertical-nav > .section > .title, .section-container.vertical-nav > [data-section-region] > [data-section-title], .section-container.vertical-nav > [data-section-region] > .title, +[data-section='horizontal-nav'] > section > [data-section-title], +[data-section='horizontal-nav'] > section > .title, +[data-section='horizontal-nav'] > .section > [data-section-title], +[data-section='horizontal-nav'] > .section > .title, +[data-section='horizontal-nav'] > [data-section-region] > [data-section-title], +[data-section='horizontal-nav'] > [data-section-region] > .title, .section-container.horizontal-nav > section > [data-section-title], .section-container.horizontal-nav > section > .title, .section-container.horizontal-nav > .section > [data-section-title], .section-container.horizontal-nav > .section > .title, .section-container.horizontal-nav > [data-section-region] > [data-section-title], .section-container.horizontal-nav > [data-section-region] > .title, +[data-section='accordion'] > section > [data-section-title], +[data-section='accordion'] > section > .title, +[data-section='accordion'] > .section > [data-section-title], +[data-section='accordion'] > .section > .title, +[data-section='accordion'] > [data-section-region] > [data-section-title], +[data-section='accordion'] > [data-section-region] > .title, .section-container.accordion > section > [data-section-title], .section-container.accordion > section > .title, .section-container.accordion > .section > [data-section-title], .section-container.accordion > .section > .title, .section-container.accordion > [data-section-region] > [data-section-title], .section-container.accordion > [data-section-region] > .title { + margin-bottom: 0; +} +[data-section=''] > section > [data-section-title] a, [data-section=''] > section > .title a, [data-section=''] > .section > [data-section-title] a, [data-section=''] > .section > .title a, [data-section=''] > [data-section-region] > [data-section-title] a, [data-section=''] > [data-section-region] > .title a, [data-section='auto'] > section > [data-section-title] a, [data-section='auto'] > section > .title a, [data-section='auto'] > .section > [data-section-title] a, [data-section='auto'] > .section > .title a, [data-section='auto'] > [data-section-region] > [data-section-title] a, [data-section='auto'] > [data-section-region] > .title a, .section-container.auto > section > [data-section-title] a, .section-container.auto > section > .title a, .section-container.auto > .section > [data-section-title] a, .section-container.auto > .section > .title a, .section-container.auto > [data-section-region] > [data-section-title] a, .section-container.auto > [data-section-region] > .title a, +[data-section='vertical-tabs'] > section > [data-section-title] a, +[data-section='vertical-tabs'] > section > .title a, +[data-section='vertical-tabs'] > .section > [data-section-title] a, +[data-section='vertical-tabs'] > .section > .title a, +[data-section='vertical-tabs'] > [data-section-region] > [data-section-title] a, +[data-section='vertical-tabs'] > [data-section-region] > .title a, .section-container.vertical-tabs > section > [data-section-title] a, .section-container.vertical-tabs > section > .title a, .section-container.vertical-tabs > .section > [data-section-title] a, .section-container.vertical-tabs > .section > .title a, .section-container.vertical-tabs > [data-section-region] > [data-section-title] a, .section-container.vertical-tabs > [data-section-region] > .title a, +[data-section='vertical-nav'] > section > [data-section-title] a, +[data-section='vertical-nav'] > section > .title a, +[data-section='vertical-nav'] > .section > [data-section-title] a, +[data-section='vertical-nav'] > .section > .title a, +[data-section='vertical-nav'] > [data-section-region] > [data-section-title] a, +[data-section='vertical-nav'] > [data-section-region] > .title a, .section-container.vertical-nav > section > [data-section-title] a, .section-container.vertical-nav > section > .title a, .section-container.vertical-nav > .section > [data-section-title] a, .section-container.vertical-nav > .section > .title a, .section-container.vertical-nav > [data-section-region] > [data-section-title] a, .section-container.vertical-nav > [data-section-region] > .title a, +[data-section='horizontal-nav'] > section > [data-section-title] a, +[data-section='horizontal-nav'] > section > .title a, +[data-section='horizontal-nav'] > .section > [data-section-title] a, +[data-section='horizontal-nav'] > .section > .title a, +[data-section='horizontal-nav'] > [data-section-region] > [data-section-title] a, +[data-section='horizontal-nav'] > [data-section-region] > .title a, .section-container.horizontal-nav > section > [data-section-title] a, .section-container.horizontal-nav > section > .title a, .section-container.horizontal-nav > .section > [data-section-title] a, .section-container.horizontal-nav > .section > .title a, .section-container.horizontal-nav > [data-section-region] > [data-section-title] a, .section-container.horizontal-nav > [data-section-region] > .title a, +[data-section='accordion'] > section > [data-section-title] a, +[data-section='accordion'] > section > .title a, +[data-section='accordion'] > .section > [data-section-title] a, +[data-section='accordion'] > .section > .title a, +[data-section='accordion'] > [data-section-region] > [data-section-title] a, +[data-section='accordion'] > [data-section-region] > .title a, .section-container.accordion > section > [data-section-title] a, .section-container.accordion > section > .title a, .section-container.accordion > .section > [data-section-title] a, .section-container.accordion > .section > .title a, .section-container.accordion > [data-section-region] > [data-section-title] a, .section-container.accordion > [data-section-region] > .title a { + width: 100%; + display: inline-block; + white-space: nowrap; +} +[data-section=''] > section > [data-section-content], [data-section=''] > section > .content, [data-section=''] > .section > [data-section-content], [data-section=''] > .section > .content, [data-section=''] > [data-section-region] > [data-section-content], [data-section=''] > [data-section-region] > .content, [data-section='auto'] > section > [data-section-content], [data-section='auto'] > section > .content, [data-section='auto'] > .section > [data-section-content], [data-section='auto'] > .section > .content, [data-section='auto'] > [data-section-region] > [data-section-content], [data-section='auto'] > [data-section-region] > .content, .section-container.auto > section > [data-section-content], .section-container.auto > section > .content, .section-container.auto > .section > [data-section-content], .section-container.auto > .section > .content, .section-container.auto > [data-section-region] > [data-section-content], .section-container.auto > [data-section-region] > .content, +[data-section='vertical-tabs'] > section > [data-section-content], +[data-section='vertical-tabs'] > section > .content, +[data-section='vertical-tabs'] > .section > [data-section-content], +[data-section='vertical-tabs'] > .section > .content, +[data-section='vertical-tabs'] > [data-section-region] > [data-section-content], +[data-section='vertical-tabs'] > [data-section-region] > .content, .section-container.vertical-tabs > section > [data-section-content], .section-container.vertical-tabs > section > .content, .section-container.vertical-tabs > .section > [data-section-content], .section-container.vertical-tabs > .section > .content, .section-container.vertical-tabs > [data-section-region] > [data-section-content], .section-container.vertical-tabs > [data-section-region] > .content, +[data-section='vertical-nav'] > section > [data-section-content], +[data-section='vertical-nav'] > section > .content, +[data-section='vertical-nav'] > .section > [data-section-content], +[data-section='vertical-nav'] > .section > .content, +[data-section='vertical-nav'] > [data-section-region] > [data-section-content], +[data-section='vertical-nav'] > [data-section-region] > .content, .section-container.vertical-nav > section > [data-section-content], .section-container.vertical-nav > section > .content, .section-container.vertical-nav > .section > [data-section-content], .section-container.vertical-nav > .section > .content, .section-container.vertical-nav > [data-section-region] > [data-section-content], .section-container.vertical-nav > [data-section-region] > .content, +[data-section='horizontal-nav'] > section > [data-section-content], +[data-section='horizontal-nav'] > section > .content, +[data-section='horizontal-nav'] > .section > [data-section-content], +[data-section='horizontal-nav'] > .section > .content, +[data-section='horizontal-nav'] > [data-section-region] > [data-section-content], +[data-section='horizontal-nav'] > [data-section-region] > .content, .section-container.horizontal-nav > section > [data-section-content], .section-container.horizontal-nav > section > .content, .section-container.horizontal-nav > .section > [data-section-content], .section-container.horizontal-nav > .section > .content, .section-container.horizontal-nav > [data-section-region] > [data-section-content], .section-container.horizontal-nav > [data-section-region] > .content, +[data-section='accordion'] > section > [data-section-content], +[data-section='accordion'] > section > .content, +[data-section='accordion'] > .section > [data-section-content], +[data-section='accordion'] > .section > .content, +[data-section='accordion'] > [data-section-region] > [data-section-content], +[data-section='accordion'] > [data-section-region] > .content, .section-container.accordion > section > [data-section-content], .section-container.accordion > section > .content, .section-container.accordion > .section > [data-section-content], .section-container.accordion > .section > .content, .section-container.accordion > [data-section-region] > [data-section-content], .section-container.accordion > [data-section-region] > .content { + display: none; +} +[data-section=''] > section.active > [data-section-content], [data-section=''] > section.active > .content, [data-section=''] > .section.active > [data-section-content], [data-section=''] > .section.active > .content, [data-section=''] > [data-section-region].active > [data-section-content], [data-section=''] > [data-section-region].active > .content, [data-section='auto'] > section.active > [data-section-content], [data-section='auto'] > section.active > .content, [data-section='auto'] > .section.active > [data-section-content], [data-section='auto'] > .section.active > .content, [data-section='auto'] > [data-section-region].active > [data-section-content], [data-section='auto'] > [data-section-region].active > .content, .section-container.auto > section.active > [data-section-content], .section-container.auto > section.active > .content, .section-container.auto > .section.active > [data-section-content], .section-container.auto > .section.active > .content, .section-container.auto > [data-section-region].active > [data-section-content], .section-container.auto > [data-section-region].active > .content, +[data-section='vertical-tabs'] > section.active > [data-section-content], +[data-section='vertical-tabs'] > section.active > .content, +[data-section='vertical-tabs'] > .section.active > [data-section-content], +[data-section='vertical-tabs'] > .section.active > .content, +[data-section='vertical-tabs'] > [data-section-region].active > [data-section-content], +[data-section='vertical-tabs'] > [data-section-region].active > .content, .section-container.vertical-tabs > section.active > [data-section-content], .section-container.vertical-tabs > section.active > .content, .section-container.vertical-tabs > .section.active > [data-section-content], .section-container.vertical-tabs > .section.active > .content, .section-container.vertical-tabs > [data-section-region].active > [data-section-content], .section-container.vertical-tabs > [data-section-region].active > .content, +[data-section='vertical-nav'] > section.active > [data-section-content], +[data-section='vertical-nav'] > section.active > .content, +[data-section='vertical-nav'] > .section.active > [data-section-content], +[data-section='vertical-nav'] > .section.active > .content, +[data-section='vertical-nav'] > [data-section-region].active > [data-section-content], +[data-section='vertical-nav'] > [data-section-region].active > .content, .section-container.vertical-nav > section.active > [data-section-content], .section-container.vertical-nav > section.active > .content, .section-container.vertical-nav > .section.active > [data-section-content], .section-container.vertical-nav > .section.active > .content, .section-container.vertical-nav > [data-section-region].active > [data-section-content], .section-container.vertical-nav > [data-section-region].active > .content, +[data-section='horizontal-nav'] > section.active > [data-section-content], +[data-section='horizontal-nav'] > section.active > .content, +[data-section='horizontal-nav'] > .section.active > [data-section-content], +[data-section='horizontal-nav'] > .section.active > .content, +[data-section='horizontal-nav'] > [data-section-region].active > [data-section-content], +[data-section='horizontal-nav'] > [data-section-region].active > .content, .section-container.horizontal-nav > section.active > [data-section-content], .section-container.horizontal-nav > section.active > .content, .section-container.horizontal-nav > .section.active > [data-section-content], .section-container.horizontal-nav > .section.active > .content, .section-container.horizontal-nav > [data-section-region].active > [data-section-content], .section-container.horizontal-nav > [data-section-region].active > .content, +[data-section='accordion'] > section.active > [data-section-content], +[data-section='accordion'] > section.active > .content, +[data-section='accordion'] > .section.active > [data-section-content], +[data-section='accordion'] > .section.active > .content, +[data-section='accordion'] > [data-section-region].active > [data-section-content], +[data-section='accordion'] > [data-section-region].active > .content, .section-container.accordion > section.active > [data-section-content], .section-container.accordion > section.active > .content, .section-container.accordion > .section.active > [data-section-content], .section-container.accordion > .section.active > .content, .section-container.accordion > [data-section-region].active > [data-section-content], .section-container.accordion > [data-section-region].active > .content { + display: block; +} +[data-section=''] > section:not(.active), [data-section=''] > .section:not(.active), [data-section=''] > [data-section-region]:not(.active), [data-section='auto'] > section:not(.active), [data-section='auto'] > .section:not(.active), [data-section='auto'] > [data-section-region]:not(.active), .section-container.auto > section:not(.active), .section-container.auto > .section:not(.active), .section-container.auto > [data-section-region]:not(.active), +[data-section='vertical-tabs'] > section:not(.active), +[data-section='vertical-tabs'] > .section:not(.active), +[data-section='vertical-tabs'] > [data-section-region]:not(.active), .section-container.vertical-tabs > section:not(.active), .section-container.vertical-tabs > .section:not(.active), .section-container.vertical-tabs > [data-section-region]:not(.active), +[data-section='vertical-nav'] > section:not(.active), +[data-section='vertical-nav'] > .section:not(.active), +[data-section='vertical-nav'] > [data-section-region]:not(.active), .section-container.vertical-nav > section:not(.active), .section-container.vertical-nav > .section:not(.active), .section-container.vertical-nav > [data-section-region]:not(.active), +[data-section='horizontal-nav'] > section:not(.active), +[data-section='horizontal-nav'] > .section:not(.active), +[data-section='horizontal-nav'] > [data-section-region]:not(.active), .section-container.horizontal-nav > section:not(.active), .section-container.horizontal-nav > .section:not(.active), .section-container.horizontal-nav > [data-section-region]:not(.active), +[data-section='accordion'] > section:not(.active), +[data-section='accordion'] > .section:not(.active), +[data-section='accordion'] > [data-section-region]:not(.active), .section-container.accordion > section:not(.active), .section-container.accordion > .section:not(.active), .section-container.accordion > [data-section-region]:not(.active) { + padding: 0 !important; +} +[data-section=''] > section > [data-section-title], [data-section=''] > section > .title, [data-section=''] > .section > [data-section-title], [data-section=''] > .section > .title, [data-section=''] > [data-section-region] > [data-section-title], [data-section=''] > [data-section-region] > .title, [data-section='auto'] > section > [data-section-title], [data-section='auto'] > section > .title, [data-section='auto'] > .section > [data-section-title], [data-section='auto'] > .section > .title, [data-section='auto'] > [data-section-region] > [data-section-title], [data-section='auto'] > [data-section-region] > .title, .section-container.auto > section > [data-section-title], .section-container.auto > section > .title, .section-container.auto > .section > [data-section-title], .section-container.auto > .section > .title, .section-container.auto > [data-section-region] > [data-section-title], .section-container.auto > [data-section-region] > .title, +[data-section='vertical-tabs'] > section > [data-section-title], +[data-section='vertical-tabs'] > section > .title, +[data-section='vertical-tabs'] > .section > [data-section-title], +[data-section='vertical-tabs'] > .section > .title, +[data-section='vertical-tabs'] > [data-section-region] > [data-section-title], +[data-section='vertical-tabs'] > [data-section-region] > .title, .section-container.vertical-tabs > section > [data-section-title], .section-container.vertical-tabs > section > .title, .section-container.vertical-tabs > .section > [data-section-title], .section-container.vertical-tabs > .section > .title, .section-container.vertical-tabs > [data-section-region] > [data-section-title], .section-container.vertical-tabs > [data-section-region] > .title, +[data-section='vertical-nav'] > section > [data-section-title], +[data-section='vertical-nav'] > section > .title, +[data-section='vertical-nav'] > .section > [data-section-title], +[data-section='vertical-nav'] > .section > .title, +[data-section='vertical-nav'] > [data-section-region] > [data-section-title], +[data-section='vertical-nav'] > [data-section-region] > .title, .section-container.vertical-nav > section > [data-section-title], .section-container.vertical-nav > section > .title, .section-container.vertical-nav > .section > [data-section-title], .section-container.vertical-nav > .section > .title, .section-container.vertical-nav > [data-section-region] > [data-section-title], .section-container.vertical-nav > [data-section-region] > .title, +[data-section='horizontal-nav'] > section > [data-section-title], +[data-section='horizontal-nav'] > section > .title, +[data-section='horizontal-nav'] > .section > [data-section-title], +[data-section='horizontal-nav'] > .section > .title, +[data-section='horizontal-nav'] > [data-section-region] > [data-section-title], +[data-section='horizontal-nav'] > [data-section-region] > .title, .section-container.horizontal-nav > section > [data-section-title], .section-container.horizontal-nav > section > .title, .section-container.horizontal-nav > .section > [data-section-title], .section-container.horizontal-nav > .section > .title, .section-container.horizontal-nav > [data-section-region] > [data-section-title], .section-container.horizontal-nav > [data-section-region] > .title, +[data-section='accordion'] > section > [data-section-title], +[data-section='accordion'] > section > .title, +[data-section='accordion'] > .section > [data-section-title], +[data-section='accordion'] > .section > .title, +[data-section='accordion'] > [data-section-region] > [data-section-title], +[data-section='accordion'] > [data-section-region] > .title, .section-container.accordion > section > [data-section-title], .section-container.accordion > section > .title, .section-container.accordion > .section > [data-section-title], .section-container.accordion > .section > .title, .section-container.accordion > [data-section-region] > [data-section-title], .section-container.accordion > [data-section-region] > .title { + width: 100%; +} + +.section-container.auto, +.section-container.vertical-tabs, +.section-container.vertical-nav, +.section-container.horizontal-nav, +.section-container.accordion { + border-top: 1px solid #ccc; +} +.section-container.auto > section > .title, .section-container.auto > .section > .title, +.section-container.vertical-tabs > section > .title, +.section-container.vertical-tabs > .section > .title, +.section-container.vertical-nav > section > .title, +.section-container.vertical-nav > .section > .title, +.section-container.horizontal-nav > section > .title, +.section-container.horizontal-nav > .section > .title, +.section-container.accordion > section > .title, +.section-container.accordion > .section > .title { + background-color: #efefef; + cursor: pointer; + border: solid 1px #ccc; +} +.section-container.auto > section > .title a, .section-container.auto > .section > .title a, +.section-container.vertical-tabs > section > .title a, +.section-container.vertical-tabs > .section > .title a, +.section-container.vertical-nav > section > .title a, +.section-container.vertical-nav > .section > .title a, +.section-container.horizontal-nav > section > .title a, +.section-container.horizontal-nav > .section > .title a, +.section-container.accordion > section > .title a, +.section-container.accordion > .section > .title a { + padding: 0.9375em; + color: #333; + font-size: 0.875em; + background: none; +} +.section-container.auto > section > .title:hover, .section-container.auto > .section > .title:hover, +.section-container.vertical-tabs > section > .title:hover, +.section-container.vertical-tabs > .section > .title:hover, +.section-container.vertical-nav > section > .title:hover, +.section-container.vertical-nav > .section > .title:hover, +.section-container.horizontal-nav > section > .title:hover, +.section-container.horizontal-nav > .section > .title:hover, +.section-container.accordion > section > .title:hover, +.section-container.accordion > .section > .title:hover { + background-color: #e2e2e2; +} +.section-container.auto > section > .content, .section-container.auto > .section > .content, +.section-container.vertical-tabs > section > .content, +.section-container.vertical-tabs > .section > .content, +.section-container.vertical-nav > section > .content, +.section-container.vertical-nav > .section > .content, +.section-container.horizontal-nav > section > .content, +.section-container.horizontal-nav > .section > .content, +.section-container.accordion > section > .content, +.section-container.accordion > .section > .content { + padding: 1.25em; + background-color: #fff; + border: solid 1px #ccc; +} +.section-container.auto > section > .content > *:last-child, .section-container.auto > .section > .content > *:last-child, +.section-container.vertical-tabs > section > .content > *:last-child, +.section-container.vertical-tabs > .section > .content > *:last-child, +.section-container.vertical-nav > section > .content > *:last-child, +.section-container.vertical-nav > .section > .content > *:last-child, +.section-container.horizontal-nav > section > .content > *:last-child, +.section-container.horizontal-nav > .section > .content > *:last-child, +.section-container.accordion > section > .content > *:last-child, +.section-container.accordion > .section > .content > *:last-child { + margin-bottom: 0; +} +.section-container.auto > section > .content > *:first-child, .section-container.auto > .section > .content > *:first-child, +.section-container.vertical-tabs > section > .content > *:first-child, +.section-container.vertical-tabs > .section > .content > *:first-child, +.section-container.vertical-nav > section > .content > *:first-child, +.section-container.vertical-nav > .section > .content > *:first-child, +.section-container.horizontal-nav > section > .content > *:first-child, +.section-container.horizontal-nav > .section > .content > *:first-child, +.section-container.accordion > section > .content > *:first-child, +.section-container.accordion > .section > .content > *:first-child { + padding-top: 0; +} +.section-container.auto > section > .content > *:last-child:not(.flex-video), .section-container.auto > .section > .content > *:last-child:not(.flex-video), +.section-container.vertical-tabs > section > .content > *:last-child:not(.flex-video), +.section-container.vertical-tabs > .section > .content > *:last-child:not(.flex-video), +.section-container.vertical-nav > section > .content > *:last-child:not(.flex-video), +.section-container.vertical-nav > .section > .content > *:last-child:not(.flex-video), +.section-container.horizontal-nav > section > .content > *:last-child:not(.flex-video), +.section-container.horizontal-nav > .section > .content > *:last-child:not(.flex-video), +.section-container.accordion > section > .content > *:last-child:not(.flex-video), +.section-container.accordion > .section > .content > *:last-child:not(.flex-video) { + padding-bottom: 0; +} +.section-container.auto > section.active > .title, .section-container.auto > .section.active > .title, +.section-container.vertical-tabs > section.active > .title, +.section-container.vertical-tabs > .section.active > .title, +.section-container.vertical-nav > section.active > .title, +.section-container.vertical-nav > .section.active > .title, +.section-container.horizontal-nav > section.active > .title, +.section-container.horizontal-nav > .section.active > .title, +.section-container.accordion > section.active > .title, +.section-container.accordion > .section.active > .title { + background: #d6d6d6; +} +.section-container.auto > section.active > .title a, .section-container.auto > .section.active > .title a, +.section-container.vertical-tabs > section.active > .title a, +.section-container.vertical-tabs > .section.active > .title a, +.section-container.vertical-nav > section.active > .title a, +.section-container.vertical-nav > .section.active > .title a, +.section-container.horizontal-nav > section.active > .title a, +.section-container.horizontal-nav > .section.active > .title a, +.section-container.accordion > section.active > .title a, +.section-container.accordion > .section.active > .title a { + color: #333; +} +.section-container.auto > section:not(.active), .section-container.auto > .section:not(.active), +.section-container.vertical-tabs > section:not(.active), +.section-container.vertical-tabs > .section:not(.active), +.section-container.vertical-nav > section:not(.active), +.section-container.vertical-nav > .section:not(.active), +.section-container.horizontal-nav > section:not(.active), +.section-container.horizontal-nav > .section:not(.active), +.section-container.accordion > section:not(.active), +.section-container.accordion > .section:not(.active) { + padding: 0 !important; +} +.section-container.auto > section > .title, .section-container.auto > .section > .title, +.section-container.vertical-tabs > section > .title, +.section-container.vertical-tabs > .section > .title, +.section-container.vertical-nav > section > .title, +.section-container.vertical-nav > .section > .title, +.section-container.horizontal-nav > section > .title, +.section-container.horizontal-nav > .section > .title, +.section-container.accordion > section > .title, +.section-container.accordion > .section > .title { + border-top: none; +} + +[data-section='tabs'], .section-container.tabs { + width: 100%; + position: relative; + display: block; + margin-bottom: 1.25em; +} +[data-section='tabs']:not([data-section-resized]):not([data-section-small-style]), .section-container.tabs:not([data-section-resized]):not([data-section-small-style]) { + visibility: hidden; +} +[data-section='tabs'] > section > [data-section-title], [data-section='tabs'] > section > .title, [data-section='tabs'] > .section > [data-section-title], [data-section='tabs'] > .section > .title, [data-section='tabs'] > [data-section-region] > [data-section-title], [data-section='tabs'] > [data-section-region] > .title, .section-container.tabs > section > [data-section-title], .section-container.tabs > section > .title, .section-container.tabs > .section > [data-section-title], .section-container.tabs > .section > .title, .section-container.tabs > [data-section-region] > [data-section-title], .section-container.tabs > [data-section-region] > .title { + margin-bottom: 0; +} +[data-section='tabs'] > section > [data-section-title] a, [data-section='tabs'] > section > .title a, [data-section='tabs'] > .section > [data-section-title] a, [data-section='tabs'] > .section > .title a, [data-section='tabs'] > [data-section-region] > [data-section-title] a, [data-section='tabs'] > [data-section-region] > .title a, .section-container.tabs > section > [data-section-title] a, .section-container.tabs > section > .title a, .section-container.tabs > .section > [data-section-title] a, .section-container.tabs > .section > .title a, .section-container.tabs > [data-section-region] > [data-section-title] a, .section-container.tabs > [data-section-region] > .title a { + width: 100%; + display: inline-block; + white-space: nowrap; +} +[data-section='tabs'] > section > [data-section-content], [data-section='tabs'] > section > .content, [data-section='tabs'] > .section > [data-section-content], [data-section='tabs'] > .section > .content, [data-section='tabs'] > [data-section-region] > [data-section-content], [data-section='tabs'] > [data-section-region] > .content, .section-container.tabs > section > [data-section-content], .section-container.tabs > section > .content, .section-container.tabs > .section > [data-section-content], .section-container.tabs > .section > .content, .section-container.tabs > [data-section-region] > [data-section-content], .section-container.tabs > [data-section-region] > .content { + display: none; +} +[data-section='tabs'] > section.active > [data-section-content], [data-section='tabs'] > section.active > .content, [data-section='tabs'] > .section.active > [data-section-content], [data-section='tabs'] > .section.active > .content, [data-section='tabs'] > [data-section-region].active > [data-section-content], [data-section='tabs'] > [data-section-region].active > .content, .section-container.tabs > section.active > [data-section-content], .section-container.tabs > section.active > .content, .section-container.tabs > .section.active > [data-section-content], .section-container.tabs > .section.active > .content, .section-container.tabs > [data-section-region].active > [data-section-content], .section-container.tabs > [data-section-region].active > .content { + display: block; +} +[data-section='tabs'] > section:not(.active), [data-section='tabs'] > .section:not(.active), [data-section='tabs'] > [data-section-region]:not(.active), .section-container.tabs > section:not(.active), .section-container.tabs > .section:not(.active), .section-container.tabs > [data-section-region]:not(.active) { + padding: 0 !important; +} +[data-section='tabs'] > section > [data-section-title], [data-section='tabs'] > section > .title, [data-section='tabs'] > .section > [data-section-title], [data-section='tabs'] > .section > .title, [data-section='tabs'] > [data-section-region] > [data-section-title], [data-section='tabs'] > [data-section-region] > .title, .section-container.tabs > section > [data-section-title], .section-container.tabs > section > .title, .section-container.tabs > .section > [data-section-title], .section-container.tabs > .section > .title, .section-container.tabs > [data-section-region] > [data-section-title], .section-container.tabs > [data-section-region] > .title { + width: auto; + position: absolute; + top: 0; + left: 0; +} + +.section-container.tabs { + border: none; +} +.section-container.tabs > section > .title, .section-container.tabs > .section > .title { + background-color: #efefef; + cursor: pointer; + border: solid 1px #ccc; +} +.section-container.tabs > section > .title a, .section-container.tabs > .section > .title a { + padding: 0.9375em; + color: #333; + font-size: 0.875em; + background: none; +} +.section-container.tabs > section > .title:hover, .section-container.tabs > .section > .title:hover { + background-color: #e2e2e2; +} +.section-container.tabs > section > .content, .section-container.tabs > .section > .content { + padding: 1.25em; + background-color: #fff; + border: solid 1px #ccc; +} +.section-container.tabs > section > .content > *:last-child, .section-container.tabs > .section > .content > *:last-child { + margin-bottom: 0; +} +.section-container.tabs > section > .content > *:first-child, .section-container.tabs > .section > .content > *:first-child { + padding-top: 0; +} +.section-container.tabs > section > .content > *:last-child:not(.flex-video), .section-container.tabs > .section > .content > *:last-child:not(.flex-video) { + padding-bottom: 0; +} +.section-container.tabs > section.active > .title, .section-container.tabs > .section.active > .title { + background: #fff; +} +.section-container.tabs > section.active > .title a, .section-container.tabs > .section.active > .title a { + color: #333; +} +.section-container.tabs > section:not(.active), .section-container.tabs > .section:not(.active) { + padding: 0 !important; +} +.section-container.tabs > section.active > .title, .section-container.tabs > .section.active > .title { + border-bottom: 0; +} + +@media only screen and (min-width: 730px) { + [data-section=''], [data-section='auto'], .section-container.auto { + width: 100%; + position: relative; + display: block; + margin-bottom: 1.25em; + } + [data-section='']:not([data-section-resized]):not([data-section-small-style]), [data-section='auto']:not([data-section-resized]):not([data-section-small-style]), .section-container.auto:not([data-section-resized]):not([data-section-small-style]) { + visibility: hidden; + } + [data-section=''] > section > [data-section-title], [data-section=''] > section > .title, [data-section=''] > .section > [data-section-title], [data-section=''] > .section > .title, [data-section=''] > [data-section-region] > [data-section-title], [data-section=''] > [data-section-region] > .title, [data-section='auto'] > section > [data-section-title], [data-section='auto'] > section > .title, [data-section='auto'] > .section > [data-section-title], [data-section='auto'] > .section > .title, [data-section='auto'] > [data-section-region] > [data-section-title], [data-section='auto'] > [data-section-region] > .title, .section-container.auto > section > [data-section-title], .section-container.auto > section > .title, .section-container.auto > .section > [data-section-title], .section-container.auto > .section > .title, .section-container.auto > [data-section-region] > [data-section-title], .section-container.auto > [data-section-region] > .title { + margin-bottom: 0; + } + [data-section=''] > section > [data-section-title] a, [data-section=''] > section > .title a, [data-section=''] > .section > [data-section-title] a, [data-section=''] > .section > .title a, [data-section=''] > [data-section-region] > [data-section-title] a, [data-section=''] > [data-section-region] > .title a, [data-section='auto'] > section > [data-section-title] a, [data-section='auto'] > section > .title a, [data-section='auto'] > .section > [data-section-title] a, [data-section='auto'] > .section > .title a, [data-section='auto'] > [data-section-region] > [data-section-title] a, [data-section='auto'] > [data-section-region] > .title a, .section-container.auto > section > [data-section-title] a, .section-container.auto > section > .title a, .section-container.auto > .section > [data-section-title] a, .section-container.auto > .section > .title a, .section-container.auto > [data-section-region] > [data-section-title] a, .section-container.auto > [data-section-region] > .title a { + width: 100%; + display: inline-block; + white-space: nowrap; + } + [data-section=''] > section > [data-section-content], [data-section=''] > section > .content, [data-section=''] > .section > [data-section-content], [data-section=''] > .section > .content, [data-section=''] > [data-section-region] > [data-section-content], [data-section=''] > [data-section-region] > .content, [data-section='auto'] > section > [data-section-content], [data-section='auto'] > section > .content, [data-section='auto'] > .section > [data-section-content], [data-section='auto'] > .section > .content, [data-section='auto'] > [data-section-region] > [data-section-content], [data-section='auto'] > [data-section-region] > .content, .section-container.auto > section > [data-section-content], .section-container.auto > section > .content, .section-container.auto > .section > [data-section-content], .section-container.auto > .section > .content, .section-container.auto > [data-section-region] > [data-section-content], .section-container.auto > [data-section-region] > .content { + display: none; + } + [data-section=''] > section.active > [data-section-content], [data-section=''] > section.active > .content, [data-section=''] > .section.active > [data-section-content], [data-section=''] > .section.active > .content, [data-section=''] > [data-section-region].active > [data-section-content], [data-section=''] > [data-section-region].active > .content, [data-section='auto'] > section.active > [data-section-content], [data-section='auto'] > section.active > .content, [data-section='auto'] > .section.active > [data-section-content], [data-section='auto'] > .section.active > .content, [data-section='auto'] > [data-section-region].active > [data-section-content], [data-section='auto'] > [data-section-region].active > .content, .section-container.auto > section.active > [data-section-content], .section-container.auto > section.active > .content, .section-container.auto > .section.active > [data-section-content], .section-container.auto > .section.active > .content, .section-container.auto > [data-section-region].active > [data-section-content], .section-container.auto > [data-section-region].active > .content { + display: block; + } + [data-section=''] > section:not(.active), [data-section=''] > .section:not(.active), [data-section=''] > [data-section-region]:not(.active), [data-section='auto'] > section:not(.active), [data-section='auto'] > .section:not(.active), [data-section='auto'] > [data-section-region]:not(.active), .section-container.auto > section:not(.active), .section-container.auto > .section:not(.active), .section-container.auto > [data-section-region]:not(.active) { + padding: 0 !important; + } + [data-section=''] > section > [data-section-title], [data-section=''] > section > .title, [data-section=''] > .section > [data-section-title], [data-section=''] > .section > .title, [data-section=''] > [data-section-region] > [data-section-title], [data-section=''] > [data-section-region] > .title, [data-section='auto'] > section > [data-section-title], [data-section='auto'] > section > .title, [data-section='auto'] > .section > [data-section-title], [data-section='auto'] > .section > .title, [data-section='auto'] > [data-section-region] > [data-section-title], [data-section='auto'] > [data-section-region] > .title, .section-container.auto > section > [data-section-title], .section-container.auto > section > .title, .section-container.auto > .section > [data-section-title], .section-container.auto > .section > .title, .section-container.auto > [data-section-region] > [data-section-title], .section-container.auto > [data-section-region] > .title { + width: auto; + position: absolute; + top: 0; + left: 0; + } + + .section-container.auto { + border: none; + } + .section-container.auto > section > .title, .section-container.auto > .section > .title { + background-color: #efefef; + cursor: pointer; + border: solid 1px #ccc; + } + .section-container.auto > section > .title a, .section-container.auto > .section > .title a { + padding: 0.9375em; + color: #333; + font-size: 0.875em; + background: none; + } + .section-container.auto > section > .title:hover, .section-container.auto > .section > .title:hover { + background-color: #e2e2e2; + } + .section-container.auto > section > .content, .section-container.auto > .section > .content { + padding: 1.25em; + background-color: #fff; + border: solid 1px #ccc; + } + .section-container.auto > section > .content > *:last-child, .section-container.auto > .section > .content > *:last-child { + margin-bottom: 0; + } + .section-container.auto > section > .content > *:first-child, .section-container.auto > .section > .content > *:first-child { + padding-top: 0; + } + .section-container.auto > section > .content > *:last-child:not(.flex-video), .section-container.auto > .section > .content > *:last-child:not(.flex-video) { + padding-bottom: 0; + } + .section-container.auto > section.active > .title, .section-container.auto > .section.active > .title { + background: #fff; + } + .section-container.auto > section.active > .title a, .section-container.auto > .section.active > .title a { + color: #333; + } + .section-container.auto > section:not(.active), .section-container.auto > .section:not(.active) { + padding: 0 !important; + } + .section-container.auto > section.active > .title, .section-container.auto > .section.active > .title { + border-bottom: 0; + } + + [data-section='vertical-tabs'], .section-container.vertical-tabs { + width: 100%; + position: relative; + display: block; + margin-bottom: 1.25em; + } + [data-section='vertical-tabs']:not([data-section-resized]):not([data-section-small-style]), .section-container.vertical-tabs:not([data-section-resized]):not([data-section-small-style]) { + visibility: hidden; + } + [data-section='vertical-tabs'][data-section-small-style], .section-container.vertical-tabs[data-section-small-style] { + width: 100% !important; + } + [data-section='vertical-tabs'][data-section-small-style] > [data-section-region], [data-section='vertical-tabs'][data-section-small-style] > section, [data-section='vertical-tabs'][data-section-small-style] > .section, .section-container.vertical-tabs[data-section-small-style] > [data-section-region], .section-container.vertical-tabs[data-section-small-style] > section, .section-container.vertical-tabs[data-section-small-style] > .section { + padding: 0 !important; + margin: 0 !important; + } + [data-section='vertical-tabs'][data-section-small-style] > [data-section-region] > [data-section-title], [data-section='vertical-tabs'][data-section-small-style] > [data-section-region] > .title, [data-section='vertical-tabs'][data-section-small-style] > section > [data-section-title], [data-section='vertical-tabs'][data-section-small-style] > section > .title, [data-section='vertical-tabs'][data-section-small-style] > .section > [data-section-title], [data-section='vertical-tabs'][data-section-small-style] > .section > .title, .section-container.vertical-tabs[data-section-small-style] > [data-section-region] > [data-section-title], .section-container.vertical-tabs[data-section-small-style] > [data-section-region] > .title, .section-container.vertical-tabs[data-section-small-style] > section > [data-section-title], .section-container.vertical-tabs[data-section-small-style] > section > .title, .section-container.vertical-tabs[data-section-small-style] > .section > [data-section-title], .section-container.vertical-tabs[data-section-small-style] > .section > .title { + width: 100% !important; + } + [data-section='vertical-tabs'] > section > [data-section-title], [data-section='vertical-tabs'] > section > .title, [data-section='vertical-tabs'] > .section > [data-section-title], [data-section='vertical-tabs'] > .section > .title, [data-section='vertical-tabs'] > [data-section-region] > [data-section-title], [data-section='vertical-tabs'] > [data-section-region] > .title, .section-container.vertical-tabs > section > [data-section-title], .section-container.vertical-tabs > section > .title, .section-container.vertical-tabs > .section > [data-section-title], .section-container.vertical-tabs > .section > .title, .section-container.vertical-tabs > [data-section-region] > [data-section-title], .section-container.vertical-tabs > [data-section-region] > .title { + margin-bottom: 0; + } + [data-section='vertical-tabs'] > section > [data-section-title] a, [data-section='vertical-tabs'] > section > .title a, [data-section='vertical-tabs'] > .section > [data-section-title] a, [data-section='vertical-tabs'] > .section > .title a, [data-section='vertical-tabs'] > [data-section-region] > [data-section-title] a, [data-section='vertical-tabs'] > [data-section-region] > .title a, .section-container.vertical-tabs > section > [data-section-title] a, .section-container.vertical-tabs > section > .title a, .section-container.vertical-tabs > .section > [data-section-title] a, .section-container.vertical-tabs > .section > .title a, .section-container.vertical-tabs > [data-section-region] > [data-section-title] a, .section-container.vertical-tabs > [data-section-region] > .title a { + width: 100%; + display: inline-block; + white-space: nowrap; + } + [data-section='vertical-tabs'] > section > [data-section-content], [data-section='vertical-tabs'] > section > .content, [data-section='vertical-tabs'] > .section > [data-section-content], [data-section='vertical-tabs'] > .section > .content, [data-section='vertical-tabs'] > [data-section-region] > [data-section-content], [data-section='vertical-tabs'] > [data-section-region] > .content, .section-container.vertical-tabs > section > [data-section-content], .section-container.vertical-tabs > section > .content, .section-container.vertical-tabs > .section > [data-section-content], .section-container.vertical-tabs > .section > .content, .section-container.vertical-tabs > [data-section-region] > [data-section-content], .section-container.vertical-tabs > [data-section-region] > .content { + display: none; + } + [data-section='vertical-tabs'] > section.active > [data-section-content], [data-section='vertical-tabs'] > section.active > .content, [data-section='vertical-tabs'] > .section.active > [data-section-content], [data-section='vertical-tabs'] > .section.active > .content, [data-section='vertical-tabs'] > [data-section-region].active > [data-section-content], [data-section='vertical-tabs'] > [data-section-region].active > .content, .section-container.vertical-tabs > section.active > [data-section-content], .section-container.vertical-tabs > section.active > .content, .section-container.vertical-tabs > .section.active > [data-section-content], .section-container.vertical-tabs > .section.active > .content, .section-container.vertical-tabs > [data-section-region].active > [data-section-content], .section-container.vertical-tabs > [data-section-region].active > .content { + display: block; + } + [data-section='vertical-tabs'] > section:not(.active), [data-section='vertical-tabs'] > .section:not(.active), [data-section='vertical-tabs'] > [data-section-region]:not(.active), .section-container.vertical-tabs > section:not(.active), .section-container.vertical-tabs > .section:not(.active), .section-container.vertical-tabs > [data-section-region]:not(.active) { + padding: 0 !important; + } + [data-section='vertical-tabs'] > section > [data-section-title], [data-section='vertical-tabs'] > section > .title, [data-section='vertical-tabs'] > .section > [data-section-title], [data-section='vertical-tabs'] > .section > .title, [data-section='vertical-tabs'] > [data-section-region] > [data-section-title], [data-section='vertical-tabs'] > [data-section-region] > .title, .section-container.vertical-tabs > section > [data-section-title], .section-container.vertical-tabs > section > .title, .section-container.vertical-tabs > .section > [data-section-title], .section-container.vertical-tabs > .section > .title, .section-container.vertical-tabs > [data-section-region] > [data-section-title], .section-container.vertical-tabs > [data-section-region] > .title { + position: absolute; + top: 0; + left: 0; + width: 12.5em; + } + [data-section='vertical-tabs'] > section.active, [data-section='vertical-tabs'] > .section.active, [data-section='vertical-tabs'] > [data-section-region].active, .section-container.vertical-tabs > section.active, .section-container.vertical-tabs > .section.active, .section-container.vertical-tabs > [data-section-region].active { + padding-left: 12.5em; + } + [data-section='vertical-tabs'] > section.active > [data-section-title], [data-section='vertical-tabs'] > section.active > .title, [data-section='vertical-tabs'] > .section.active > [data-section-title], [data-section='vertical-tabs'] > .section.active > .title, [data-section='vertical-tabs'] > [data-section-region].active > [data-section-title], [data-section='vertical-tabs'] > [data-section-region].active > .title, .section-container.vertical-tabs > section.active > [data-section-title], .section-container.vertical-tabs > section.active > .title, .section-container.vertical-tabs > .section.active > [data-section-title], .section-container.vertical-tabs > .section.active > .title, .section-container.vertical-tabs > [data-section-region].active > [data-section-title], .section-container.vertical-tabs > [data-section-region].active > .title { + width: 12.5em; + } + + .section-container.vertical-tabs { + border: none; + } + .section-container.vertical-tabs > section > .title, .section-container.vertical-tabs > .section > .title { + background-color: #efefef; + cursor: pointer; + border: solid 1px #ccc; + } + .section-container.vertical-tabs > section > .title a, .section-container.vertical-tabs > .section > .title a { + padding: 0.9375em; + color: #333; + font-size: 0.875em; + background: none; + } + .section-container.vertical-tabs > section > .title:hover, .section-container.vertical-tabs > .section > .title:hover { + background-color: #e2e2e2; + } + .section-container.vertical-tabs > section > .content, .section-container.vertical-tabs > .section > .content { + padding: 1.25em; + background-color: #fff; + border: solid 1px #ccc; + } + .section-container.vertical-tabs > section > .content > *:last-child, .section-container.vertical-tabs > .section > .content > *:last-child { + margin-bottom: 0; + } + .section-container.vertical-tabs > section > .content > *:first-child, .section-container.vertical-tabs > .section > .content > *:first-child { + padding-top: 0; + } + .section-container.vertical-tabs > section > .content > *:last-child:not(.flex-video), .section-container.vertical-tabs > .section > .content > *:last-child:not(.flex-video) { + padding-bottom: 0; + } + .section-container.vertical-tabs > section.active > .title, .section-container.vertical-tabs > .section.active > .title { + background: #d6d6d6; + } + .section-container.vertical-tabs > section.active > .title a, .section-container.vertical-tabs > .section.active > .title a { + color: #333; + } + .section-container.vertical-tabs > section:not(.active), .section-container.vertical-tabs > .section:not(.active) { + padding: 0 !important; + } + .section-container.vertical-tabs > section.active, .section-container.vertical-tabs > .section.active { + padding-left: 12.4375em; + } + .section-container.vertical-tabs > section.active > .title, .section-container.vertical-tabs > .section.active > .title { + background-color: #d6d6d6; + } + + [data-section='vertical-nav'], .section-container.vertical-nav { + width: 100%; + position: relative; + display: block; + margin-bottom: 1.25em; + } + [data-section='vertical-nav']:not([data-section-resized]):not([data-section-small-style]), .section-container.vertical-nav:not([data-section-resized]):not([data-section-small-style]) { + visibility: hidden; + } + [data-section='vertical-nav'][data-section-small-style], .section-container.vertical-nav[data-section-small-style] { + width: 100% !important; + } + [data-section='vertical-nav'][data-section-small-style] > [data-section-region], [data-section='vertical-nav'][data-section-small-style] > section, [data-section='vertical-nav'][data-section-small-style] > .section, .section-container.vertical-nav[data-section-small-style] > [data-section-region], .section-container.vertical-nav[data-section-small-style] > section, .section-container.vertical-nav[data-section-small-style] > .section { + padding: 0 !important; + margin: 0 !important; + } + [data-section='vertical-nav'][data-section-small-style] > [data-section-region] > [data-section-title], [data-section='vertical-nav'][data-section-small-style] > [data-section-region] > .title, [data-section='vertical-nav'][data-section-small-style] > section > [data-section-title], [data-section='vertical-nav'][data-section-small-style] > section > .title, [data-section='vertical-nav'][data-section-small-style] > .section > [data-section-title], [data-section='vertical-nav'][data-section-small-style] > .section > .title, .section-container.vertical-nav[data-section-small-style] > [data-section-region] > [data-section-title], .section-container.vertical-nav[data-section-small-style] > [data-section-region] > .title, .section-container.vertical-nav[data-section-small-style] > section > [data-section-title], .section-container.vertical-nav[data-section-small-style] > section > .title, .section-container.vertical-nav[data-section-small-style] > .section > [data-section-title], .section-container.vertical-nav[data-section-small-style] > .section > .title { + width: 100% !important; + } + [data-section='vertical-nav'] > section, [data-section='vertical-nav'] > .section, [data-section='vertical-nav'] > [data-section-region], .section-container.vertical-nav > section, .section-container.vertical-nav > .section, .section-container.vertical-nav > [data-section-region] { + position: relative; + display: inline-block; + } + [data-section='vertical-nav'] > section > [data-section-title], [data-section='vertical-nav'] > section > .title, [data-section='vertical-nav'] > .section > [data-section-title], [data-section='vertical-nav'] > .section > .title, [data-section='vertical-nav'] > [data-section-region] > [data-section-title], [data-section='vertical-nav'] > [data-section-region] > .title, .section-container.vertical-nav > section > [data-section-title], .section-container.vertical-nav > section > .title, .section-container.vertical-nav > .section > [data-section-title], .section-container.vertical-nav > .section > .title, .section-container.vertical-nav > [data-section-region] > [data-section-title], .section-container.vertical-nav > [data-section-region] > .title { + margin-bottom: 0; + } + [data-section='vertical-nav'] > section > [data-section-title] a, [data-section='vertical-nav'] > section > .title a, [data-section='vertical-nav'] > .section > [data-section-title] a, [data-section='vertical-nav'] > .section > .title a, [data-section='vertical-nav'] > [data-section-region] > [data-section-title] a, [data-section='vertical-nav'] > [data-section-region] > .title a, .section-container.vertical-nav > section > [data-section-title] a, .section-container.vertical-nav > section > .title a, .section-container.vertical-nav > .section > [data-section-title] a, .section-container.vertical-nav > .section > .title a, .section-container.vertical-nav > [data-section-region] > [data-section-title] a, .section-container.vertical-nav > [data-section-region] > .title a { + width: 100%; + display: inline-block; + white-space: nowrap; + } + [data-section='vertical-nav'] > section > [data-section-content], [data-section='vertical-nav'] > section > .content, [data-section='vertical-nav'] > .section > [data-section-content], [data-section='vertical-nav'] > .section > .content, [data-section='vertical-nav'] > [data-section-region] > [data-section-content], [data-section='vertical-nav'] > [data-section-region] > .content, .section-container.vertical-nav > section > [data-section-content], .section-container.vertical-nav > section > .content, .section-container.vertical-nav > .section > [data-section-content], .section-container.vertical-nav > .section > .content, .section-container.vertical-nav > [data-section-region] > [data-section-content], .section-container.vertical-nav > [data-section-region] > .content { + display: none; + } + [data-section='vertical-nav'] > section.active > [data-section-content], [data-section='vertical-nav'] > section.active > .content, [data-section='vertical-nav'] > .section.active > [data-section-content], [data-section='vertical-nav'] > .section.active > .content, [data-section='vertical-nav'] > [data-section-region].active > [data-section-content], [data-section='vertical-nav'] > [data-section-region].active > .content, .section-container.vertical-nav > section.active > [data-section-content], .section-container.vertical-nav > section.active > .content, .section-container.vertical-nav > .section.active > [data-section-content], .section-container.vertical-nav > .section.active > .content, .section-container.vertical-nav > [data-section-region].active > [data-section-content], .section-container.vertical-nav > [data-section-region].active > .content { + display: block; + } + [data-section='vertical-nav'] > section:not(.active), [data-section='vertical-nav'] > .section:not(.active), [data-section='vertical-nav'] > [data-section-region]:not(.active), .section-container.vertical-nav > section:not(.active), .section-container.vertical-nav > .section:not(.active), .section-container.vertical-nav > [data-section-region]:not(.active) { + padding: 0 !important; + } + [data-section='vertical-nav'] > section > [data-section-title], [data-section='vertical-nav'] > section > .title, [data-section='vertical-nav'] > .section > [data-section-title], [data-section='vertical-nav'] > .section > .title, [data-section='vertical-nav'] > [data-section-region] > [data-section-title], [data-section='vertical-nav'] > [data-section-region] > .title, .section-container.vertical-nav > section > [data-section-title], .section-container.vertical-nav > section > .title, .section-container.vertical-nav > .section > [data-section-title], .section-container.vertical-nav > .section > .title, .section-container.vertical-nav > [data-section-region] > [data-section-title], .section-container.vertical-nav > [data-section-region] > .title { + position: static; + width: auto; + } + [data-section='vertical-nav'] > section > [data-section-title] a, [data-section='vertical-nav'] > section > .title a, [data-section='vertical-nav'] > .section > [data-section-title] a, [data-section='vertical-nav'] > .section > .title a, [data-section='vertical-nav'] > [data-section-region] > [data-section-title] a, [data-section='vertical-nav'] > [data-section-region] > .title a, .section-container.vertical-nav > section > [data-section-title] a, .section-container.vertical-nav > section > .title a, .section-container.vertical-nav > .section > [data-section-title] a, .section-container.vertical-nav > .section > .title a, .section-container.vertical-nav > [data-section-region] > [data-section-title] a, .section-container.vertical-nav > [data-section-region] > .title a { + display: block; + } + [data-section='vertical-nav'] > section > [data-section-content], [data-section='vertical-nav'] > section > .content, [data-section='vertical-nav'] > .section > [data-section-content], [data-section='vertical-nav'] > .section > .content, [data-section='vertical-nav'] > [data-section-region] > [data-section-content], [data-section='vertical-nav'] > [data-section-region] > .content, .section-container.vertical-nav > section > [data-section-content], .section-container.vertical-nav > section > .content, .section-container.vertical-nav > .section > [data-section-content], .section-container.vertical-nav > .section > .content, .section-container.vertical-nav > [data-section-region] > [data-section-content], .section-container.vertical-nav > [data-section-region] > .content { + position: absolute; + top: 0; + left: 0; + z-index: 999; + min-width: 12.5em; + } + + .section-container.vertical-nav { + border: none; + } + .section-container.vertical-nav > section > .title, .section-container.vertical-nav > .section > .title { + background-color: #efefef; + cursor: pointer; + border: solid 1px #ccc; + } + .section-container.vertical-nav > section > .title a, .section-container.vertical-nav > .section > .title a { + padding: 0.9375em; + color: #333; + font-size: 0.875em; + background: none; + } + .section-container.vertical-nav > section > .title:hover, .section-container.vertical-nav > .section > .title:hover { + background-color: #e2e2e2; + } + .section-container.vertical-nav > section > .content, .section-container.vertical-nav > .section > .content { + padding: 1.25em; + background-color: #fff; + border: solid 1px #ccc; + } + .section-container.vertical-nav > section > .content > *:last-child, .section-container.vertical-nav > .section > .content > *:last-child { + margin-bottom: 0; + } + .section-container.vertical-nav > section > .content > *:first-child, .section-container.vertical-nav > .section > .content > *:first-child { + padding-top: 0; + } + .section-container.vertical-nav > section > .content > *:last-child:not(.flex-video), .section-container.vertical-nav > .section > .content > *:last-child:not(.flex-video) { + padding-bottom: 0; + } + .section-container.vertical-nav > section.active > .title, .section-container.vertical-nav > .section.active > .title { + background: #d6d6d6; + } + .section-container.vertical-nav > section.active > .title a, .section-container.vertical-nav > .section.active > .title a { + color: #333; + } + .section-container.vertical-nav > section:not(.active), .section-container.vertical-nav > .section:not(.active) { + padding: 0 !important; + } + + [data-section='horizontal-nav'], .section-container.horizontal-nav { + width: 100%; + position: relative; + display: block; + margin-bottom: 1.25em; + } + [data-section='horizontal-nav']:not([data-section-resized]):not([data-section-small-style]), .section-container.horizontal-nav:not([data-section-resized]):not([data-section-small-style]) { + visibility: hidden; + } + [data-section='horizontal-nav'][data-section-small-style], .section-container.horizontal-nav[data-section-small-style] { + width: 100% !important; + } + [data-section='horizontal-nav'][data-section-small-style] > [data-section-region], [data-section='horizontal-nav'][data-section-small-style] > section, [data-section='horizontal-nav'][data-section-small-style] > .section, .section-container.horizontal-nav[data-section-small-style] > [data-section-region], .section-container.horizontal-nav[data-section-small-style] > section, .section-container.horizontal-nav[data-section-small-style] > .section { + padding: 0 !important; + margin: 0 !important; + } + [data-section='horizontal-nav'][data-section-small-style] > [data-section-region] > [data-section-title], [data-section='horizontal-nav'][data-section-small-style] > [data-section-region] > .title, [data-section='horizontal-nav'][data-section-small-style] > section > [data-section-title], [data-section='horizontal-nav'][data-section-small-style] > section > .title, [data-section='horizontal-nav'][data-section-small-style] > .section > [data-section-title], [data-section='horizontal-nav'][data-section-small-style] > .section > .title, .section-container.horizontal-nav[data-section-small-style] > [data-section-region] > [data-section-title], .section-container.horizontal-nav[data-section-small-style] > [data-section-region] > .title, .section-container.horizontal-nav[data-section-small-style] > section > [data-section-title], .section-container.horizontal-nav[data-section-small-style] > section > .title, .section-container.horizontal-nav[data-section-small-style] > .section > [data-section-title], .section-container.horizontal-nav[data-section-small-style] > .section > .title { + width: 100% !important; + } + [data-section='horizontal-nav'] > section, [data-section='horizontal-nav'] > .section, [data-section='horizontal-nav'] > [data-section-region], .section-container.horizontal-nav > section, .section-container.horizontal-nav > .section, .section-container.horizontal-nav > [data-section-region] { + position: relative; + float: left; + } + [data-section='horizontal-nav'] > section > [data-section-title], [data-section='horizontal-nav'] > section > .title, [data-section='horizontal-nav'] > .section > [data-section-title], [data-section='horizontal-nav'] > .section > .title, [data-section='horizontal-nav'] > [data-section-region] > [data-section-title], [data-section='horizontal-nav'] > [data-section-region] > .title, .section-container.horizontal-nav > section > [data-section-title], .section-container.horizontal-nav > section > .title, .section-container.horizontal-nav > .section > [data-section-title], .section-container.horizontal-nav > .section > .title, .section-container.horizontal-nav > [data-section-region] > [data-section-title], .section-container.horizontal-nav > [data-section-region] > .title { + margin-bottom: 0; + } + [data-section='horizontal-nav'] > section > [data-section-title] a, [data-section='horizontal-nav'] > section > .title a, [data-section='horizontal-nav'] > .section > [data-section-title] a, [data-section='horizontal-nav'] > .section > .title a, [data-section='horizontal-nav'] > [data-section-region] > [data-section-title] a, [data-section='horizontal-nav'] > [data-section-region] > .title a, .section-container.horizontal-nav > section > [data-section-title] a, .section-container.horizontal-nav > section > .title a, .section-container.horizontal-nav > .section > [data-section-title] a, .section-container.horizontal-nav > .section > .title a, .section-container.horizontal-nav > [data-section-region] > [data-section-title] a, .section-container.horizontal-nav > [data-section-region] > .title a { + width: 100%; + display: inline-block; + white-space: nowrap; + } + [data-section='horizontal-nav'] > section > [data-section-content], [data-section='horizontal-nav'] > section > .content, [data-section='horizontal-nav'] > .section > [data-section-content], [data-section='horizontal-nav'] > .section > .content, [data-section='horizontal-nav'] > [data-section-region] > [data-section-content], [data-section='horizontal-nav'] > [data-section-region] > .content, .section-container.horizontal-nav > section > [data-section-content], .section-container.horizontal-nav > section > .content, .section-container.horizontal-nav > .section > [data-section-content], .section-container.horizontal-nav > .section > .content, .section-container.horizontal-nav > [data-section-region] > [data-section-content], .section-container.horizontal-nav > [data-section-region] > .content { + display: none; + } + [data-section='horizontal-nav'] > section.active > [data-section-content], [data-section='horizontal-nav'] > section.active > .content, [data-section='horizontal-nav'] > .section.active > [data-section-content], [data-section='horizontal-nav'] > .section.active > .content, [data-section='horizontal-nav'] > [data-section-region].active > [data-section-content], [data-section='horizontal-nav'] > [data-section-region].active > .content, .section-container.horizontal-nav > section.active > [data-section-content], .section-container.horizontal-nav > section.active > .content, .section-container.horizontal-nav > .section.active > [data-section-content], .section-container.horizontal-nav > .section.active > .content, .section-container.horizontal-nav > [data-section-region].active > [data-section-content], .section-container.horizontal-nav > [data-section-region].active > .content { + display: block; + } + [data-section='horizontal-nav'] > section:not(.active), [data-section='horizontal-nav'] > .section:not(.active), [data-section='horizontal-nav'] > [data-section-region]:not(.active), .section-container.horizontal-nav > section:not(.active), .section-container.horizontal-nav > .section:not(.active), .section-container.horizontal-nav > [data-section-region]:not(.active) { + padding: 0 !important; + } + [data-section='horizontal-nav'] > section > [data-section-title], [data-section='horizontal-nav'] > section > .title, [data-section='horizontal-nav'] > .section > [data-section-title], [data-section='horizontal-nav'] > .section > .title, [data-section='horizontal-nav'] > [data-section-region] > [data-section-title], [data-section='horizontal-nav'] > [data-section-region] > .title, .section-container.horizontal-nav > section > [data-section-title], .section-container.horizontal-nav > section > .title, .section-container.horizontal-nav > .section > [data-section-title], .section-container.horizontal-nav > .section > .title, .section-container.horizontal-nav > [data-section-region] > [data-section-title], .section-container.horizontal-nav > [data-section-region] > .title { + position: static; + width: auto; + } + [data-section='horizontal-nav'] > section > [data-section-title] a, [data-section='horizontal-nav'] > section > .title a, [data-section='horizontal-nav'] > .section > [data-section-title] a, [data-section='horizontal-nav'] > .section > .title a, [data-section='horizontal-nav'] > [data-section-region] > [data-section-title] a, [data-section='horizontal-nav'] > [data-section-region] > .title a, .section-container.horizontal-nav > section > [data-section-title] a, .section-container.horizontal-nav > section > .title a, .section-container.horizontal-nav > .section > [data-section-title] a, .section-container.horizontal-nav > .section > .title a, .section-container.horizontal-nav > [data-section-region] > [data-section-title] a, .section-container.horizontal-nav > [data-section-region] > .title a { + display: block; + } + [data-section='horizontal-nav'] > section > [data-section-content], [data-section='horizontal-nav'] > section > .content, [data-section='horizontal-nav'] > .section > [data-section-content], [data-section='horizontal-nav'] > .section > .content, [data-section='horizontal-nav'] > [data-section-region] > [data-section-content], [data-section='horizontal-nav'] > [data-section-region] > .content, .section-container.horizontal-nav > section > [data-section-content], .section-container.horizontal-nav > section > .content, .section-container.horizontal-nav > .section > [data-section-content], .section-container.horizontal-nav > .section > .content, .section-container.horizontal-nav > [data-section-region] > [data-section-content], .section-container.horizontal-nav > [data-section-region] > .content { + width: auto; + position: absolute; + top: 0; + left: 0; + z-index: 999; + min-width: 12.5em; + } + + .section-container.horizontal-nav { + background: #efefef; + border: 1px solid #ccc; + } + .section-container.horizontal-nav > section > .title, .section-container.horizontal-nav > .section > .title { + background-color: #efefef; + cursor: pointer; + border: solid 1px #ccc; + } + .section-container.horizontal-nav > section > .title a, .section-container.horizontal-nav > .section > .title a { + padding: 0.9375em; + color: #333; + font-size: 0.875em; + background: none; + } + .section-container.horizontal-nav > section > .title:hover, .section-container.horizontal-nav > .section > .title:hover { + background-color: #e2e2e2; + } + .section-container.horizontal-nav > section > .content, .section-container.horizontal-nav > .section > .content { + padding: 1.25em; + background-color: #fff; + border: solid 1px #ccc; + } + .section-container.horizontal-nav > section > .content > *:last-child, .section-container.horizontal-nav > .section > .content > *:last-child { + margin-bottom: 0; + } + .section-container.horizontal-nav > section > .content > *:first-child, .section-container.horizontal-nav > .section > .content > *:first-child { + padding-top: 0; + } + .section-container.horizontal-nav > section > .content > *:last-child:not(.flex-video), .section-container.horizontal-nav > .section > .content > *:last-child:not(.flex-video) { + padding-bottom: 0; + } + .section-container.horizontal-nav > section.active > .title, .section-container.horizontal-nav > .section.active > .title { + background: #d6d6d6; + } + .section-container.horizontal-nav > section.active > .title a, .section-container.horizontal-nav > .section.active > .title a { + color: #333; + } + .section-container.horizontal-nav > section:not(.active), .section-container.horizontal-nav > .section:not(.active) { + padding: 0 !important; + } +} +.no-js [data-section], .no-js .section-container { + width: 100%; + position: relative; + display: block; + margin-bottom: 1.25em; +} +.no-js [data-section][data-section-small-style], .no-js .section-container[data-section-small-style] { + width: 100% !important; +} +.no-js [data-section][data-section-small-style] > [data-section-region], .no-js [data-section][data-section-small-style] > section, .no-js [data-section][data-section-small-style] > .section, .no-js .section-container[data-section-small-style] > [data-section-region], .no-js .section-container[data-section-small-style] > section, .no-js .section-container[data-section-small-style] > .section { + padding: 0 !important; + margin: 0 !important; +} +.no-js [data-section][data-section-small-style] > [data-section-region] > [data-section-title], .no-js [data-section][data-section-small-style] > [data-section-region] > .title, .no-js [data-section][data-section-small-style] > section > [data-section-title], .no-js [data-section][data-section-small-style] > section > .title, .no-js [data-section][data-section-small-style] > .section > [data-section-title], .no-js [data-section][data-section-small-style] > .section > .title, .no-js .section-container[data-section-small-style] > [data-section-region] > [data-section-title], .no-js .section-container[data-section-small-style] > [data-section-region] > .title, .no-js .section-container[data-section-small-style] > section > [data-section-title], .no-js .section-container[data-section-small-style] > section > .title, .no-js .section-container[data-section-small-style] > .section > [data-section-title], .no-js .section-container[data-section-small-style] > .section > .title { + width: 100% !important; +} +.no-js [data-section] > section, .no-js [data-section] > .section, .no-js [data-section] > [data-section-region], .no-js .section-container > section, .no-js .section-container > .section, .no-js .section-container > [data-section-region] { + margin: 0; +} +.no-js [data-section] > section > [data-section-title], .no-js [data-section] > section > .title, .no-js [data-section] > .section > [data-section-title], .no-js [data-section] > .section > .title, .no-js [data-section] > [data-section-region] > [data-section-title], .no-js [data-section] > [data-section-region] > .title, .no-js .section-container > section > [data-section-title], .no-js .section-container > section > .title, .no-js .section-container > .section > [data-section-title], .no-js .section-container > .section > .title, .no-js .section-container > [data-section-region] > [data-section-title], .no-js .section-container > [data-section-region] > .title { + margin-bottom: 0; +} +.no-js [data-section] > section > [data-section-title] a, .no-js [data-section] > section > .title a, .no-js [data-section] > .section > [data-section-title] a, .no-js [data-section] > .section > .title a, .no-js [data-section] > [data-section-region] > [data-section-title] a, .no-js [data-section] > [data-section-region] > .title a, .no-js .section-container > section > [data-section-title] a, .no-js .section-container > section > .title a, .no-js .section-container > .section > [data-section-title] a, .no-js .section-container > .section > .title a, .no-js .section-container > [data-section-region] > [data-section-title] a, .no-js .section-container > [data-section-region] > .title a { + width: 100%; + display: inline-block; + white-space: nowrap; +} +.no-js [data-section] > section > [data-section-content], .no-js [data-section] > section > .content, .no-js [data-section] > .section > [data-section-content], .no-js [data-section] > .section > .content, .no-js [data-section] > [data-section-region] > [data-section-content], .no-js [data-section] > [data-section-region] > .content, .no-js .section-container > section > [data-section-content], .no-js .section-container > section > .content, .no-js .section-container > .section > [data-section-content], .no-js .section-container > .section > .content, .no-js .section-container > [data-section-region] > [data-section-content], .no-js .section-container > [data-section-region] > .content { + display: none; +} +.no-js [data-section] > section.active > [data-section-content], .no-js [data-section] > section.active > .content, .no-js [data-section] > .section.active > [data-section-content], .no-js [data-section] > .section.active > .content, .no-js [data-section] > [data-section-region].active > [data-section-content], .no-js [data-section] > [data-section-region].active > .content, .no-js .section-container > section.active > [data-section-content], .no-js .section-container > section.active > .content, .no-js .section-container > .section.active > [data-section-content], .no-js .section-container > .section.active > .content, .no-js .section-container > [data-section-region].active > [data-section-content], .no-js .section-container > [data-section-region].active > .content { + display: block; +} +.no-js [data-section] > section:not(.active), .no-js [data-section] > .section:not(.active), .no-js [data-section] > [data-section-region]:not(.active), .no-js .section-container > section:not(.active), .no-js .section-container > .section:not(.active), .no-js .section-container > [data-section-region]:not(.active) { + padding: 0 !important; +} +.no-js [data-section] > section > [data-section-title], .no-js [data-section] > section > .title, .no-js [data-section] > .section > [data-section-title], .no-js [data-section] > .section > .title, .no-js [data-section] > [data-section-region] > [data-section-title], .no-js [data-section] > [data-section-region] > .title, .no-js .section-container > section > [data-section-title], .no-js .section-container > section > .title, .no-js .section-container > .section > [data-section-title], .no-js .section-container > .section > .title, .no-js .section-container > [data-section-region] > [data-section-title], .no-js .section-container > [data-section-region] > .title { + width: 100%; +} +.no-js .section-container { + border-top: 1px solid #ccc; +} +.no-js .section-container > section > .title, .no-js .section-container > .section > .title { + background-color: #efefef; + cursor: pointer; + border: solid 1px #ccc; +} +.no-js .section-container > section > .title a, .no-js .section-container > .section > .title a { + padding: 0.9375em; + color: #333; + font-size: 0.875em; + background: none; +} +.no-js .section-container > section > .title:hover, .no-js .section-container > .section > .title:hover { + background-color: #e2e2e2; +} +.no-js .section-container > section > .content, .no-js .section-container > .section > .content { + padding: 1.25em; + background-color: #fff; + border: solid 1px #ccc; +} +.no-js .section-container > section > .content > *:last-child, .no-js .section-container > .section > .content > *:last-child { + margin-bottom: 0; +} +.no-js .section-container > section > .content > *:first-child, .no-js .section-container > .section > .content > *:first-child { + padding-top: 0; +} +.no-js .section-container > section > .content > *:last-child:not(.flex-video), .no-js .section-container > .section > .content > *:last-child:not(.flex-video) { + padding-bottom: 0; +} +.no-js .section-container > section.active > .title, .no-js .section-container > .section.active > .title { + background: #d6d6d6; +} +.no-js .section-container > section.active > .title a, .no-js .section-container > .section.active > .title a { + color: #333; +} +.no-js .section-container > section:not(.active), .no-js .section-container > .section:not(.active) { + padding: 0 !important; +} +.no-js .section-container > section > .title, .no-js .section-container > .section > .title { + border-top: none; +} + +/* Wrapped around .top-bar to contain to grid width */ +.contain-to-grid { + width: 100%; + background: white; +} +.contain-to-grid .top-bar { + margin-bottom: 0; +} + +.fixed { + width: 100%; + left: 0; + position: fixed; + top: 0; + z-index: 99; +} +.fixed.expanded:not(.top-bar) { + overflow-y: auto; + height: auto; + width: 100%; + max-height: 100%; +} +.fixed.expanded:not(.top-bar) .title-area { + position: fixed; + width: 100%; + z-index: 99; +} +.fixed.expanded:not(.top-bar) .top-bar-section { + z-index: 98; + margin-top: 45px; +} + +.top-bar { + overflow: hidden; + height: 45px; + line-height: 45px; + position: relative; + background: white; + margin-bottom: 0; +} +.top-bar ul { + margin-bottom: 0; + list-style: none; +} +.top-bar .row { + max-width: none; +} +.top-bar form, +.top-bar input { + margin-bottom: 0; +} +.top-bar input { + height: 2.45em; +} +.top-bar .button { + padding-top: .5em; + padding-bottom: .5em; + margin-bottom: 0; +} +.top-bar .title-area { + position: relative; + margin: 0; +} +.top-bar .name { + height: 45px; + margin: 0; + font-size: 16px; +} +.top-bar .name h1 { + line-height: 45px; + font-size: 1.0625em; + margin: 0; +} +.top-bar .name h1 a { + font-weight: bold; + color: #333333; + width: 50%; + display: block; + padding: 0 15px; +} +.top-bar .toggle-topbar { + position: absolute; + right: 0; + top: 0; +} +.top-bar .toggle-topbar a { + color: #333333; + text-transform: uppercase; + font-size: 0.8125em; + font-weight: bold; + position: relative; + display: block; + padding: 0 15px; + height: 45px; + line-height: 45px; +} +.top-bar .toggle-topbar.menu-icon { + right: 15px; + top: 50%; + margin-top: -16px; + padding-left: 40px; +} +.top-bar .toggle-topbar.menu-icon a { + text-indent: -48px; + width: 34px; + height: 34px; + line-height: 33px; + padding: 0; + color: #333333; +} +.top-bar .toggle-topbar.menu-icon a span { + position: absolute; + right: 0; + display: block; + width: 16px; + height: 0; + -webkit-box-shadow: 0 10px 0 1px #333333, 0 16px 0 1px #333333, 0 22px 0 1px #333333; + box-shadow: 0 10px 0 1px #333333, 0 16px 0 1px #333333, 0 22px 0 1px #333333; +} +.top-bar.expanded { + height: auto; + background: transparent; +} +.top-bar.expanded .title-area { + background: white; +} +.top-bar.expanded .toggle-topbar a { + color: #333333; +} +.top-bar.expanded .toggle-topbar a span { + -webkit-box-shadow: 0 10px 0 1px #333333, 0 16px 0 1px #333333, 0 22px 0 1px #333333; + box-shadow: 0 10px 0 1px #333333, 0 16px 0 1px #333333, 0 22px 0 1px #333333; +} + +.top-bar-section { + left: 0; + position: relative; + width: auto; + -webkit-transition: left 300ms ease-out; + -moz-transition: left 300ms ease-out; + transition: left 300ms ease-out; +} +.top-bar-section ul { + width: 100%; + height: auto; + display: block; + background: white; + font-size: 16px; + margin: 0; +} +.top-bar-section .divider, +.top-bar-section [role="separator"] { + border-bottom: solid 1px white; + border-top: solid 1px #e6e6e6; + clear: both; + height: 1px; + width: 100%; +} +.top-bar-section ul li > a { + display: block; + width: 100%; + color: #333333; + padding: 12px 0 12px 0; + padding-left: 15px; + font-size: 0.8125em; + font-weight: bold; + background: white; +} +.top-bar-section ul li > a.button { + background: gray; + font-size: 0.8125em; + padding-right: 15px; + padding-left: 15px; +} +.top-bar-section ul li > a.button:hover { + background: #666666; +} +.top-bar-section ul li > a.button.secondary { + background: #e9e9e9; +} +.top-bar-section ul li > a.button.secondary:hover { + background: #d0d0d0; +} +.top-bar-section ul li > a.button.success { + background: #5da423; +} +.top-bar-section ul li > a.button.success:hover { + background: #457a1a; +} +.top-bar-section ul li > a.button.alert { + background: #c60f13; +} +.top-bar-section ul li > a.button.alert:hover { + background: #970b0e; +} +.top-bar-section ul li:hover > a { + background: gray; + color: white; +} +.top-bar-section ul li.active > a { + background: white; + color: gray; +} +.top-bar-section .has-form { + padding: 15px; +} +.top-bar-section .has-dropdown { + position: relative; +} +.top-bar-section .has-dropdown > a:after { + content: ""; + display: block; + width: 0; + height: 0; + border: inset 5px; + border-color: transparent transparent transparent rgba(51, 51, 51, 0.5); + border-left-style: solid; + margin-right: 15px; + margin-top: -4.5px; + position: absolute; + top: 50%; + right: 0; +} +.top-bar-section .has-dropdown.moved { + position: static; +} +.top-bar-section .has-dropdown.moved > .dropdown { + display: block; +} +.top-bar-section .dropdown { + position: absolute; + left: 100%; + top: 0; + display: none; + z-index: 99; +} +.top-bar-section .dropdown li { + width: 100%; + height: auto; +} +.top-bar-section .dropdown li a { + font-weight: normal; + padding: 8px 15px; +} +.top-bar-section .dropdown li a.parent-link { + font-weight: bold; +} +.top-bar-section .dropdown li.title h5 { + margin-bottom: 0; +} +.top-bar-section .dropdown li.title h5 a { + color: #333333; + line-height: 22.5px; + display: block; +} +.top-bar-section .dropdown label { + padding: 8px 15px 2px; + margin-bottom: 0; + text-transform: uppercase; + color: #555; + font-weight: bold; + font-size: 0.625em; +} + +.top-bar-js-breakpoint { + width: 769px !important; + visibility: hidden; +} + +.js-generated { + display: block; +} + +@media only screen and (min-width: 769px) { + .top-bar { + background: white; + *zoom: 1; + overflow: visible; + } + .top-bar:before, .top-bar:after { + content: " "; + display: table; + } + .top-bar:after { + clear: both; + } + .top-bar .toggle-topbar { + display: none; + } + .top-bar .title-area { + float: left; + } + .top-bar .name h1 a { + width: auto; + } + .top-bar input, + .top-bar .button { + line-height: 2em; + font-size: 0.875em; + height: 2em; + padding: 0 10px; + position: relative; + top: 8px; + } + .top-bar.expanded { + background: white; + } + + .contain-to-grid .top-bar { + max-width: 62.5em; + margin: 0 auto; + margin-bottom: 0; + } + + .top-bar-section { + -webkit-transition: none 0 0; + -moz-transition: none 0 0; + transition: none 0 0; + left: 0 !important; + } + .top-bar-section ul { + width: auto; + height: auto !important; + display: inline; + } + .top-bar-section ul li { + float: left; + } + .top-bar-section ul li .js-generated { + display: none; + } + .top-bar-section li.hover > a:not(.button) { + background: gray; + color: white; + } + .top-bar-section li a:not(.button) { + padding: 0 15px; + line-height: 45px; + background: white; + } + .top-bar-section li a:not(.button):hover { + background: gray; + } + .top-bar-section .has-dropdown > a { + padding-right: 35px !important; + } + .top-bar-section .has-dropdown > a:after { + content: ""; + display: block; + width: 0; + height: 0; + border: inset 5px; + border-color: rgba(51, 51, 51, 0.5) transparent transparent transparent; + border-top-style: solid; + margin-top: -2.5px; + top: 22.5px; + } + .top-bar-section .has-dropdown.moved { + position: relative; + } + .top-bar-section .has-dropdown.moved > .dropdown { + display: none; + } + .top-bar-section .has-dropdown.hover > .dropdown, .top-bar-section .has-dropdown.not-click:hover > .dropdown { + display: block; + } + .top-bar-section .has-dropdown .dropdown li.has-dropdown > a:after { + border: none; + content: "\00bb"; + top: 1em; + margin-top: -7px; + right: 5px; + } + .top-bar-section .dropdown { + left: 0; + top: auto; + background: transparent; + min-width: 100%; + } + .top-bar-section .dropdown li a { + color: #333333; + line-height: 1; + white-space: nowrap; + padding: 7px 15px; + background: white; + } + .top-bar-section .dropdown li label { + white-space: nowrap; + background: white; + } + .top-bar-section .dropdown li .dropdown { + left: 100%; + top: 0; + } + .top-bar-section > ul > .divider, .top-bar-section > ul > [role="separator"] { + border-bottom: none; + border-top: none; + border-right: solid 1px white; + border-left: solid 1px #e6e6e6; + clear: none; + height: 45px; + width: 0; + } + .top-bar-section .has-form { + background: white; + padding: 0 15px; + height: 45px; + } + .top-bar-section ul.right li .dropdown { + left: auto; + right: 0; + } + .top-bar-section ul.right li .dropdown li .dropdown { + right: 100%; + } + + .no-js .top-bar-section ul li:hover > a { + background: gray; + color: white; + } + .no-js .top-bar-section ul li:active > a { + background: white; + color: gray; + } + .no-js .top-bar-section .has-dropdown:hover > .dropdown { + display: block; + } +} +@-webkit-keyframes rotate { + from { + -webkit-transform: rotate(0deg); + } + to { + -webkit-transform: rotate(360deg); + } +} +@-moz-keyframes rotate { + from { + -moz-transform: rotate(0deg); + } + to { + -moz-transform: rotate(360deg); + } +} +@-o-keyframes rotate { + from { + -o-transform: rotate(0deg); + } + to { + -o-transform: rotate(360deg); + } +} +@keyframes rotate { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} +/* Orbit Graceful Loading */ +.slideshow-wrapper { + position: relative; +} +.slideshow-wrapper ul { + list-style-type: none; + margin: 0; +} +.slideshow-wrapper ul li, +.slideshow-wrapper ul li .orbit-caption { + display: none; +} +.slideshow-wrapper ul li:first-child { + display: block; +} +.slideshow-wrapper .orbit-container { + background-color: transparent; +} +.slideshow-wrapper .orbit-container li { + display: block; +} +.slideshow-wrapper .orbit-container li .orbit-caption { + display: block; +} + +.preloader { + display: block; + width: 40px; + height: 40px; + position: absolute; + top: 50%; + left: 50%; + margin-top: -20px; + margin-left: -20px; + border: solid 3px; + border-color: #555 #fff; + -webkit-border-radius: 1000px; + border-radius: 1000px; + -webkit-animation-name: rotate; + -webkit-animation-duration: 1.5s; + -webkit-animation-iteration-count: infinite; + -webkit-animation-timing-function: linear; + -moz-animation-name: rotate; + -moz-animation-duration: 1.5s; + -moz-animation-iteration-count: infinite; + -moz-animation-timing-function: linear; + -o-animation-name: rotate; + -o-animation-duration: 1.5s; + -o-animation-iteration-count: infinite; + -o-animation-timing-function: linear; + animation-name: rotate; + animation-duration: 1.5s; + animation-iteration-count: infinite; + animation-timing-function: linear; +} + +.orbit-container { + overflow: hidden; + width: 100%; + position: relative; + background: #f5f5f5; +} +.orbit-container .orbit-slides-container { + list-style: none; + margin: 0; + padding: 0; + position: relative; +} +.orbit-container .orbit-slides-container img { + display: block; + max-width: 100%; +} +.orbit-container .orbit-slides-container > * { + position: absolute; + top: 0; + width: 100%; + margin-left: 100%; +} +.orbit-container .orbit-slides-container > *:first-child { + margin-left: 0%; +} +.orbit-container .orbit-slides-container > * .orbit-caption { + position: absolute; + bottom: 0; + background-color: rgba(0, 0, 0, 0.6); + color: #fff; + width: 100%; + padding: 10px 14px; + font-size: 0.875em; +} +.orbit-container .orbit-slide-number { + position: absolute; + top: 10px; + left: 10px; + font-size: 12px; + color: #fff; + background: transparent; + z-index: 10; +} +.orbit-container .orbit-slide-number span { + font-weight: 700; + padding: 0.3125em; +} +.orbit-container .orbit-timer { + position: absolute; + top: 10px; + right: 10px; + height: 6px; + width: 100px; + z-index: 10; +} +.orbit-container .orbit-timer .orbit-progress { + height: 100%; + background-color: rgba(0, 0, 0, 0.6); + display: block; + width: 0%; +} +.orbit-container .orbit-timer > span { + display: none; + position: absolute; + top: 10px; + right: 0; + width: 11px; + height: 14px; + border: solid 4px #000; + border-top: none; + border-bottom: none; +} +.orbit-container .orbit-timer.paused > span { + right: -6px; + top: 9px; + width: 11px; + height: 14px; + border: inset 8px; + border-right-style: solid; + border-color: transparent transparent transparent #000; +} +.orbit-container:hover .orbit-timer > span { + display: block; +} +.orbit-container .orbit-prev, +.orbit-container .orbit-next { + position: absolute; + top: 50%; + margin-top: -25px; + background-color: rgba(0, 0, 0, 0.6); + width: 50px; + height: 60px; + line-height: 50px; + color: white; + text-indent: -9999px !important; + z-index: 10; +} +.orbit-container .orbit-prev:hover, +.orbit-container .orbit-next:hover { + background-color: rgba(0, 0, 0, 0.6); +} +.orbit-container .orbit-prev > span, +.orbit-container .orbit-next > span { + position: absolute; + top: 50%; + margin-top: -16px; + display: block; + width: 0; + height: 0; + border: inset 16px; +} +.orbit-container .orbit-prev { + left: 0; +} +.orbit-container .orbit-prev > span { + border-right-style: solid; + border-color: transparent; + border-right-color: #fff; +} +.orbit-container .orbit-prev:hover > span { + border-right-color: #ccc; +} +.orbit-container .orbit-next { + right: 0; +} +.orbit-container .orbit-next > span { + border-color: transparent; + border-left-style: solid; + border-left-color: #fff; + left: 50%; + margin-left: -8px; +} +.orbit-container .orbit-next:hover > span { + border-left-color: #ccc; +} + +.orbit-bullets { + margin: 0 auto 30px auto; + overflow: hidden; + position: relative; + top: 10px; +} +.orbit-bullets li { + display: block; + width: 0.75em; + height: 0.75em; + background: #999; + float: left; + margin-right: 6px; + border: solid 1px #555; + -webkit-border-radius: 1000px; + border-radius: 1000px; +} +.orbit-bullets li.active { + background: #555; +} +.orbit-bullets li:last-child { + margin-right: 0; +} + +.touch .orbit-container .orbit-prev, +.touch .orbit-container .orbit-next { + display: none; +} +.touch .orbit-bullets { + display: none; +} + +@media only screen and (min-width: 730px) { + .touch .orbit-container .orbit-prev, + .touch .orbit-container .orbit-next { + display: inherit; + } + .touch .orbit-bullets { + display: block; + } +} +@media only screen and (max-width: 730px) { + .orbit-stack-on-small .orbit-slides-container { + height: auto !important; + } + .orbit-stack-on-small .orbit-slides-container > * { + position: relative; + margin-left: 0% !important; + } + .orbit-stack-on-small .orbit-timer, + .orbit-stack-on-small .orbit-next, + .orbit-stack-on-small .orbit-prev, + .orbit-stack-on-small .orbit-bullets { + display: none; + } +} +.reveal-modal-bg { + position: fixed; + height: 100%; + width: 100%; + background: #000; + background: rgba(0, 0, 0, 0.45); + z-index: 98; + display: none; + top: 0; + left: 0; +} + +.reveal-modal { + visibility: hidden; + display: none; + position: absolute; + left: 50%; + z-index: 99; + height: auto; + margin-left: -40%; + width: 80%; + background-color: #fff; + padding: 1.25em; + border: solid 1px #666; + -webkit-box-shadow: 0 0 10px rgba(0, 0, 0, 0.4); + box-shadow: 0 0 10px rgba(0, 0, 0, 0.4); + top: 50px; +} +.reveal-modal .column, +.reveal-modal .columns { + min-width: 0; +} +.reveal-modal > :first-child { + margin-top: 0; +} +.reveal-modal > :last-child { + margin-bottom: 0; +} +.reveal-modal .close-reveal-modal { + font-size: 1.375em; + line-height: 1; + position: absolute; + top: 0.5em; + right: 0.6875em; + color: #aaa; + font-weight: bold; + cursor: pointer; +} + +@media only screen and (min-width: 730px) { + .reveal-modal { + padding: 1.875em; + top: 6.25em; + } + .reveal-modal.tiny { + margin-left: -15%; + width: 30%; + } + .reveal-modal.small { + margin-left: -20%; + width: 40%; + } + .reveal-modal.medium { + margin-left: -30%; + width: 60%; + } + .reveal-modal.large { + margin-left: -35%; + width: 70%; + } + .reveal-modal.xlarge { + margin-left: -47.5%; + width: 95%; + } +} +@media print { + .reveal-modal { + background: #fff !important; + } +} +/* Foundation Joyride */ +.joyride-list { + display: none; +} + +/* Default styles for the container */ +.joyride-tip-guide { + display: none; + position: absolute; + background: black; + color: #fff; + z-index: 101; + top: 0; + left: 2.5%; + font-family: inherit; + font-weight: normal; + width: 95%; +} + +.lt-ie9 .joyride-tip-guide { + max-width: 800px; + left: 50%; + margin-left: -400px; +} + +.joyride-content-wrapper { + width: 100%; + padding: 1.125em 1.25em 1.5em; +} +.joyride-content-wrapper .button { + margin-bottom: 0 !important; +} + +/* Add a little css triangle pip, older browser just miss out on the fanciness of it */ +.joyride-tip-guide .joyride-nub { + display: block; + position: absolute; + left: 22px; + width: 0; + height: 0; + border: inset 14px; +} +.joyride-tip-guide .joyride-nub.top { + border-top-style: solid; + border-color: black; + border-top-color: transparent !important; + border-left-color: transparent !important; + border-right-color: transparent !important; + top: -28px; +} +.joyride-tip-guide .joyride-nub.bottom { + border-bottom-style: solid; + border-color: black !important; + border-bottom-color: transparent !important; + border-left-color: transparent !important; + border-right-color: transparent !important; + bottom: -28px; +} +.joyride-tip-guide .joyride-nub.right { + right: -28px; +} +.joyride-tip-guide .joyride-nub.left { + left: -28px; +} + +/* Typography */ +.joyride-tip-guide h1, +.joyride-tip-guide h2, +.joyride-tip-guide h3, +.joyride-tip-guide h4, +.joyride-tip-guide h5, +.joyride-tip-guide h6 { + line-height: 1.25; + margin: 0; + font-weight: bold; + color: #fff; +} + +.joyride-tip-guide p { + margin: 0 0 1.125em 0; + font-size: 0.875em; + line-height: 1.3; +} + +.joyride-timer-indicator-wrap { + width: 50px; + height: 3px; + border: solid 1px #555; + position: absolute; + right: 1.0625em; + bottom: 1em; +} + +.joyride-timer-indicator { + display: block; + width: 0; + height: inherit; + background: #666; +} + +.joyride-close-tip { + position: absolute; + right: 12px; + top: 10px; + color: #777 !important; + text-decoration: none; + font-size: 30px; + font-weight: normal; + line-height: .5 !important; +} +.joyride-close-tip:hover, .joyride-close-tip:focus { + color: #eee !important; +} + +.joyride-modal-bg { + position: fixed; + height: 100%; + width: 100%; + background: transparent; + background: rgba(0, 0, 0, 0.5); + z-index: 100; + display: none; + top: 0; + left: 0; + cursor: pointer; +} + +.joyride-expose-wrapper { + background-color: #ffffff; + position: absolute; + border-radius: 3px; + z-index: 102; + -moz-box-shadow: 0 0 30px #ffffff; + -webkit-box-shadow: 0 0 15px #ffffff; + box-shadow: 0 0 15px #ffffff; +} + +.joyride-expose-cover { + background: transparent; + border-radius: 3px; + position: absolute; + z-index: 9999; + top: 0; + left: 0; +} + +/* Styles for screens that are atleast 768px; */ +@media only screen and (min-width: 730px) { + .joyride-tip-guide { + width: 300px; + left: inherit; + } + .joyride-tip-guide .joyride-nub.bottom { + border-color: black !important; + border-bottom-color: transparent !important; + border-left-color: transparent !important; + border-right-color: transparent !important; + bottom: -28px; + } + .joyride-tip-guide .joyride-nub.right { + border-color: black !important; + border-top-color: transparent !important; + border-right-color: transparent !important; + border-bottom-color: transparent !important; + top: 22px; + left: auto; + right: -28px; + } + .joyride-tip-guide .joyride-nub.left { + border-color: black !important; + border-top-color: transparent !important; + border-left-color: transparent !important; + border-bottom-color: transparent !important; + top: 22px; + left: -28px; + right: auto; + } +} +/* Clearing Styles */ +[data-clearing] { + *zoom: 1; + margin-bottom: 0; + margin-left: 0; + list-style: none; +} +[data-clearing]:before, [data-clearing]:after { + content: " "; + display: table; +} +[data-clearing]:after { + clear: both; +} +[data-clearing] li { + float: left; + margin-right: 10px; +} + +.clearing-blackout { + background: #111; + position: fixed; + width: 100%; + height: 100%; + top: 0; + left: 0; + z-index: 998; +} +.clearing-blackout .clearing-close { + display: block; +} + +.clearing-container { + position: relative; + z-index: 998; + height: 100%; + overflow: hidden; + margin: 0; +} + +.visible-img { + height: 95%; + position: relative; +} +.visible-img img { + position: absolute; + left: 50%; + top: 50%; + margin-left: -50%; + max-height: 100%; + max-width: 100%; +} + +.clearing-caption { + color: #fff; + line-height: 1.3; + margin-bottom: 0; + text-align: center; + bottom: 0; + background: #111; + width: 100%; + padding: 10px 30px; + position: absolute; + left: 0; +} + +.clearing-close { + z-index: 999; + padding-left: 20px; + padding-top: 10px; + font-size: 40px; + line-height: 1; + color: #fff; + display: none; +} +.clearing-close:hover, .clearing-close:focus { + color: #ccc; +} + +.clearing-assembled .clearing-container { + height: 100%; +} +.clearing-assembled .clearing-container .carousel > ul { + display: none; +} + +.clearing-feature li { + display: none; +} +.clearing-feature li.clearing-featured-img { + display: block; +} + +@media only screen and (min-width: 730px) { + .clearing-main-prev, + .clearing-main-next { + position: absolute; + height: 100%; + width: 40px; + top: 0; + } + .clearing-main-prev > span, + .clearing-main-next > span { + position: absolute; + top: 50%; + display: block; + width: 0; + height: 0; + border: solid 16px; + } + + .clearing-main-prev { + left: 0; + } + .clearing-main-prev > span { + left: 5px; + border-color: transparent; + border-right-color: #fff; + } + + .clearing-main-next { + right: 0; + } + .clearing-main-next > span { + border-color: transparent; + border-left-color: #fff; + } + + .clearing-main-prev.disabled, + .clearing-main-next.disabled { + opacity: 0.5; + } + + .clearing-assembled .clearing-container .carousel { + background: #111; + height: 150px; + margin-top: 5px; + } + .clearing-assembled .clearing-container .carousel > ul { + display: block; + z-index: 999; + width: 200%; + height: 100%; + margin-left: 0; + position: relative; + left: 0; + } + .clearing-assembled .clearing-container .carousel > ul li { + display: block; + width: 175px; + height: inherit; + padding: 0; + float: left; + overflow: hidden; + margin-right: 1px; + position: relative; + cursor: pointer; + opacity: 0.4; + } + .clearing-assembled .clearing-container .carousel > ul li.fix-height img { + min-height: 100%; + height: 100%; + max-width: none; + } + .clearing-assembled .clearing-container .carousel > ul li a.th { + border: none; + -webkit-box-shadow: none; + box-shadow: none; + display: block; + } + .clearing-assembled .clearing-container .carousel > ul li img { + cursor: pointer !important; + min-width: 100% !important; + } + .clearing-assembled .clearing-container .carousel > ul li.visible { + opacity: 1; + } + .clearing-assembled .clearing-container .visible-img { + background: #111; + overflow: hidden; + height: 75%; + } + + .clearing-close { + position: absolute; + top: 10px; + right: 20px; + padding-left: 0; + padding-top: 0; + } +} +/* Foundation Alerts */ +.alert-box { + border-style: solid; + border-width: 1px; + display: block; + font-weight: bold; + margin-bottom: 1.25em; + position: relative; + padding: 0.6875em 1.3125em 0.75em 0.6875em; + font-size: 0.875em; + background-color: gray; + border-color: #666666; + color: #fff; +} +.alert-box .close { + font-size: 1.375em; + padding: 5px 4px 4px; + line-height: 0; + position: absolute; + top: 0.4375em; + right: 0.3125em; + color: #333; + opacity: 0.3; +} +.alert-box .close:hover, .alert-box .close:focus { + opacity: 0.5; +} +.alert-box.radius { + -webkit-border-radius: 3px; + border-radius: 3px; +} +.alert-box.round { + -webkit-border-radius: 1000px; + border-radius: 1000px; +} +.alert-box.success { + background-color: #5da423; + border-color: #457a1a; + color: #fff; +} +.alert-box.alert { + background-color: #c60f13; + border-color: #970b0e; + color: #fff; +} +.alert-box.secondary { + background-color: #e9e9e9; + border-color: #d0d0d0; + color: #505050; +} + +/* Breadcrumbs */ +.breadcrumbs { + display: block; + padding: 0.5625em 0.875em 0.5625em; + overflow: hidden; + margin-left: 0; + list-style: none; + border-style: solid; + border-width: 1px; + background-color: #f6f6f6; + border-color: gainsboro; + -webkit-border-radius: 3px; + border-radius: 3px; +} +.breadcrumbs > * { + margin: 0; + float: left; + font-size: 0.6875em; + text-transform: uppercase; +} +.breadcrumbs > *:hover a, .breadcrumbs > *:focus a { + text-decoration: underline; +} +.breadcrumbs > * a, +.breadcrumbs > * span { + text-transform: uppercase; + color: gray; +} +.breadcrumbs > *.current { + cursor: default; + color: #333; +} +.breadcrumbs > *.current a { + cursor: default; + color: #333; +} +.breadcrumbs > *.current:hover, .breadcrumbs > *.current:hover a, .breadcrumbs > *.current:focus, .breadcrumbs > *.current:focus a { + text-decoration: none; +} +.breadcrumbs > *.unavailable { + color: #999; +} +.breadcrumbs > *.unavailable a { + color: #999; +} +.breadcrumbs > *.unavailable:hover, .breadcrumbs > *.unavailable:hover a, .breadcrumbs > *.unavailable:focus, +.breadcrumbs > *.unavailable a:focus { + text-decoration: none; + color: #999; + cursor: default; +} +.breadcrumbs > *:before { + content: "/"; + color: #aaa; + margin: 0 0.75em; + position: relative; + top: 1px; +} +.breadcrumbs > *:first-child:before { + content: " "; + margin: 0; +} + +/* Custom Checkbox and Radio Inputs */ +form.custom .hidden-field { + margin-left: -99999px; + position: absolute; + visibility: hidden; +} +form.custom .custom { + display: inline-block; + width: 16px; + height: 16px; + position: relative; + top: -1px; + /* fix centering issue */ + vertical-align: middle; + border: solid 1px #ccc; + background: #fff; +} +form.custom .custom.checkbox { + -webkit-border-radius: 0; + border-radius: 0; + padding: 0; +} +form.custom .custom.radio { + -webkit-border-radius: 1000px; + border-radius: 1000px; + padding: 3px; +} +form.custom .custom.checkbox:before { + content: ""; + display: block; + font-size: 16px; + color: #fff; +} +form.custom .custom.radio.checked:before { + content: ""; + display: block; + width: 8px; + height: 8px; + -webkit-border-radius: 1000px; + border-radius: 1000px; + background: #222; + position: relative; +} +form.custom .custom.checkbox.checked:before { + content: "\00d7"; + color: #222; + position: absolute; + top: -50%; + left: 50%; + margin-top: 4px; + margin-left: -5px; +} + +/* Custom Select Options and Dropdowns */ +form.custom { + /* Custom input, disabled */ +} +form.custom .custom.dropdown { + display: block; + position: relative; + top: 0; + height: 2.3125em; + margin-bottom: 1.25em; + margin-top: 0; + padding: 0; + width: 100%; + background: #fff; + background: -moz-linear-gradient(top, #fff 0%, #f3f3f3 100%); + background: -webkit-linear-gradient(top, #fff 0%, #f3f3f3 100%); + -webkit-box-shadow: none; + background: linear-gradient(to bottom, #fff 0%, #f3f3f3 100%); + box-shadow: none; + font-size: 0.875em; + vertical-align: top; +} +form.custom .custom.dropdown ul { + overflow-y: auto; + max-height: 200px; +} +form.custom .custom.dropdown .current { + cursor: default; + white-space: nowrap; + line-height: 2.25em; + color: rgba(0, 0, 0, 0.75); + text-decoration: none; + overflow: hidden; + display: block; + margin-left: 0.5em; + margin-right: 2.3125em; +} +form.custom .custom.dropdown .selector { + cursor: default; + position: absolute; + width: 2.5em; + height: 2.3125em; + display: block; + right: 0; + top: 0; +} +form.custom .custom.dropdown .selector:after { + content: ""; + display: block; + content: ""; + display: block; + width: 0; + height: 0; + border: inset 5px; + border-color: #aaa transparent transparent transparent; + border-top-style: solid; + position: absolute; + left: 0.9375em; + top: 50%; + margin-top: -3px; +} +form.custom .custom.dropdown:hover a.selector:after, form.custom .custom.dropdown.open a.selector:after { + content: ""; + display: block; + width: 0; + height: 0; + border: inset 5px; + border-color: #222 transparent transparent transparent; + border-top-style: solid; +} +form.custom .custom.dropdown .disabled { + color: #888; +} +form.custom .custom.dropdown .disabled:hover { + background: transparent; + color: #888; +} +form.custom .custom.dropdown .disabled:hover:after { + display: none; +} +form.custom .custom.dropdown.open ul { + display: block; + z-index: 10; + min-width: 100%; + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box; +} +form.custom .custom.dropdown.small { + max-width: 134px; +} +form.custom .custom.dropdown.medium { + max-width: 254px; +} +form.custom .custom.dropdown.large { + max-width: 434px; +} +form.custom .custom.dropdown.expand { + width: 100% !important; +} +form.custom .custom.dropdown.open.small ul { + min-width: 134px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +form.custom .custom.dropdown.open.medium ul { + min-width: 254px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +form.custom .custom.dropdown.open.large ul { + min-width: 434px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +form.custom .error .custom.dropdown { + border-color: #c60f13; + background-color: rgba(198, 15, 19, 0.1); + background: rgba(198, 15, 19, 0.1); + margin-bottom: 0; +} +form.custom .error .custom.dropdown:focus { + background: #fafafa; + border-color: #999999; +} +form.custom .error .custom.dropdown + small.error { + margin-top: 0; +} +form.custom .custom.dropdown ul { + position: absolute; + width: auto; + display: none; + margin: 0; + left: -1px; + top: auto; + -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.1); + margin: 0; + padding: 0; + background: #fff; + border: solid 1px #cccccc; + font-size: 16px; +} +form.custom .custom.dropdown ul li { + color: #555; + font-size: 0.875em; + cursor: default; + padding-top: 0.25em; + padding-bottom: 0.25em; + padding-left: 0.375em; + padding-right: 2.375em; + min-height: 1.5em; + line-height: 1.5em; + margin: 0; + white-space: nowrap; + list-style: none; +} +form.custom .custom.dropdown ul li.selected { + background: #eeeeee; + color: #000; +} +form.custom .custom.dropdown ul li:hover { + background-color: #e4e4e4; + color: #000; +} +form.custom .custom.dropdown ul li.selected:hover { + background: #eeeeee; + cursor: default; + color: #000; +} +form.custom .custom.dropdown ul.show { + display: block; +} +form.custom .custom.disabled { + background: #ddd; +} + +/* Keystroke Characters */ +.keystroke, +kbd { + background-color: #ededed; + border-color: #dbdbdb; + color: #222; + border-style: solid; + border-width: 1px; + margin: 0; + font-family: "Consolas", "Menlo", "Courier", monospace; + font-size: 0.875em; + padding: 0.125em 0.25em 0; + -webkit-border-radius: 3px; + border-radius: 3px; +} + +/* Labels */ +.label { + font-weight: bold; + text-align: center; + text-decoration: none; + line-height: 1; + white-space: nowrap; + display: inline-block; + position: relative; + padding: 0.1875em 0.625em 0.25em; + font-size: 0.875em; + background-color: gray; + color: #fff; +} +.label.radius { + -webkit-border-radius: 3px; + border-radius: 3px; +} +.label.round { + -webkit-border-radius: 1000px; + border-radius: 1000px; +} +.label.alert { + background-color: #c60f13; + color: #fff; +} +.label.success { + background-color: #5da423; + color: #fff; +} +.label.secondary { + background-color: #e9e9e9; + color: #333; +} + +/* Inline Lists */ +.inline-list { + margin: 0 auto 1.0625em auto; + margin-left: -1.375em; + margin-right: 0; + padding: 0; + list-style: none; + overflow: hidden; +} +.inline-list > li { + list-style: none; + float: left; + margin-left: 1.375em; + display: block; +} +.inline-list > li > * { + display: block; +} + +/* Default Pagination */ +ul.pagination { + display: block; + height: 1.5em; + margin-left: -0.3125em; +} +ul.pagination li { + height: 1.5em; + color: #222; + font-size: 0.875em; + margin-left: 0.3125em; +} +ul.pagination li a { + display: block; + padding: 0.0625em 0.4375em 0.0625em; + color: #999; +} +ul.pagination li:hover a, +ul.pagination li a:focus { + background: #e6e6e6; +} +ul.pagination li.unavailable a { + cursor: default; + color: #999; +} +ul.pagination li.unavailable:hover a, ul.pagination li.unavailable a:focus { + background: transparent; +} +ul.pagination li.current a { + background: gray; + color: #fff; + font-weight: bold; + cursor: default; +} +ul.pagination li.current a:hover, ul.pagination li.current a:focus { + background: gray; +} +ul.pagination li { + float: left; + display: block; +} + +/* Pagination centred wrapper */ +.pagination-centered { + text-align: center; +} +.pagination-centered ul.pagination li { + float: none; + display: inline-block; +} + +/* Panels */ +.panel { + border-style: solid; + border-width: 1px; + border-color: #d9d9d9; + margin-bottom: 1.25em; + padding: 1.25em; + background: #f2f2f2; +} +.panel > :first-child { + margin-top: 0; +} +.panel > :last-child { + margin-bottom: 0; +} +.panel h1, .panel h2, .panel h3, .panel h4, .panel h5, .panel h6, .panel p { + color: #333; +} +.panel h1, .panel h2, .panel h3, .panel h4, .panel h5, .panel h6 { + line-height: 1; + margin-bottom: 0.625em; +} +.panel h1.subheader, .panel h2.subheader, .panel h3.subheader, .panel h4.subheader, .panel h5.subheader, .panel h6.subheader { + line-height: 1.4; +} +.panel.callout { + border-style: solid; + border-width: 1px; + border-color: #666666; + margin-bottom: 1.25em; + padding: 1.25em; + background: gray; + -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5) inset; + box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5) inset; +} +.panel.callout > :first-child { + margin-top: 0; +} +.panel.callout > :last-child { + margin-bottom: 0; +} +.panel.callout h1, .panel.callout h2, .panel.callout h3, .panel.callout h4, .panel.callout h5, .panel.callout h6, .panel.callout p { + color: #333; +} +.panel.callout h1, .panel.callout h2, .panel.callout h3, .panel.callout h4, .panel.callout h5, .panel.callout h6 { + line-height: 1; + margin-bottom: 0.625em; +} +.panel.callout h1.subheader, .panel.callout h2.subheader, .panel.callout h3.subheader, .panel.callout h4.subheader, .panel.callout h5.subheader, .panel.callout h6.subheader { + line-height: 1.4; +} +.panel.callout a { + color: #fff; +} +.panel.radius { + -webkit-border-radius: 3px; + border-radius: 3px; +} + +/* Pricing Tables */ +.pricing-table { + border: solid 1px #ddd; + margin-left: 0; + margin-bottom: 1.25em; +} +.pricing-table * { + list-style: none; + line-height: 1; +} +.pricing-table .title { + background-color: #ddd; + padding: 0.9375em 1.25em; + text-align: center; + color: #333; + font-weight: bold; + font-size: 1em; +} +.pricing-table .price { + background-color: #eee; + padding: 0.9375em 1.25em; + text-align: center; + color: #333; + font-weight: normal; + font-size: 1.25em; +} +.pricing-table .description { + background-color: #fff; + padding: 0.9375em; + text-align: center; + color: #777; + font-size: 0.75em; + font-weight: normal; + line-height: 1.4; + border-bottom: dotted 1px #ddd; +} +.pricing-table .bullet-item { + background-color: #fff; + padding: 0.9375em; + text-align: center; + color: #333; + font-size: 0.875em; + font-weight: normal; + border-bottom: dotted 1px #ddd; +} +.pricing-table .cta-button { + background-color: #f5f5f5; + text-align: center; + padding: 1.25em 1.25em 0; +} + +/* Progress Bar */ +.progress { + background-color: transparent; + height: 1.5625em; + border: 1px solid #cccccc; + padding: 0.125em; + margin-bottom: 0.625em; +} +.progress .meter { + background: gray; + height: 100%; + display: block; +} +.progress.secondary .meter { + background: #e9e9e9; + height: 100%; + display: block; +} +.progress.success .meter { + background: #5da423; + height: 100%; + display: block; +} +.progress.alert .meter { + background: #c60f13; + height: 100%; + display: block; +} +.progress.radius { + -webkit-border-radius: 3px; + border-radius: 3px; +} +.progress.radius .meter { + -webkit-border-radius: 2px; + border-radius: 2px; +} +.progress.round { + -webkit-border-radius: 1000px; + border-radius: 1000px; +} +.progress.round .meter { + -webkit-border-radius: 999px; + border-radius: 999px; +} + +/* Side Nav */ +.side-nav { + display: block; + margin: 0; + padding: 0.875em 0; + list-style-type: none; + list-style-position: inside; +} +.side-nav li { + margin: 0 0 0.4375em 0; + font-size: 0.875em; +} +.side-nav li a { + display: block; + color: gray; +} +.side-nav li.active > a:first-child { + color: #4d4d4d; + font-weight: bold; +} +.side-nav li.divider { + border-top: 1px solid; + height: 0; + padding: 0; + list-style: none; + border-top-color: #e6e6e6; +} + +/* Side Nav */ +.sub-nav { + display: block; + width: auto; + overflow: hidden; + margin: -0.25em 0 1.125em; + padding-top: 0.25em; + margin-right: 0; + margin-left: -0.5625em; +} +.sub-nav dt, +.sub-nav dd, +.sub-nav li { + float: left; + display: inline; + margin-left: 0.5625em; + margin-bottom: 0.625em; + font-weight: normal; + font-size: 0.875em; +} +.sub-nav dt a, +.sub-nav dd a, +.sub-nav li a { + color: #999; + text-decoration: none; +} +.sub-nav dt.active a, +.sub-nav dd.active a, +.sub-nav li.active a { + -webkit-border-radius: 1000px; + border-radius: 1000px; + font-weight: bold; + background: gray; + padding: 0.1875em 0.5625em; + cursor: default; + color: #fff; +} + +/* Foundation Switches */ +@media only screen { + div.switch { + position: relative; + padding: 0; + display: block; + overflow: hidden; + border-style: solid; + border-width: 1px; + margin-bottom: 1.25em; + height: 2.25em; + background: #fff; + border-color: #cccccc; + } + div.switch label { + position: relative; + left: 0; + z-index: 2; + float: left; + width: 50%; + height: 100%; + margin: 0; + font-weight: bold; + text-align: left; + -webkit-transition: all 0.1s ease-out; + -moz-transition: all 0.1s ease-out; + transition: all 0.1s ease-out; + } + div.switch input { + position: absolute; + z-index: 3; + opacity: 0; + width: 100%; + height: 100%; + -moz-appearance: none; + } + div.switch input:hover, div.switch input:focus { + cursor: pointer; + } + div.switch span:last-child { + position: absolute; + top: -1px; + left: -1px; + z-index: 1; + display: block; + padding: 0; + border-width: 1px; + border-style: solid; + -webkit-transition: all 0.1s ease-out; + -moz-transition: all 0.1s ease-out; + transition: all 0.1s ease-out; + } + div.switch input:not(:checked) + label { + opacity: 0; + } + div.switch input:checked { + display: none !important; + } + div.switch input { + left: 0; + display: block !important; + } + div.switch input:first-of-type + label, + div.switch input:first-of-type + span + label { + left: -50%; + } + div.switch input:first-of-type:checked + label, + div.switch input:first-of-type:checked + span + label { + left: 0%; + } + div.switch input:last-of-type + label, + div.switch input:last-of-type + span + label { + right: -50%; + left: auto; + text-align: right; + } + div.switch input:last-of-type:checked + label, + div.switch input:last-of-type:checked + span + label { + right: 0%; + left: auto; + } + div.switch span.custom { + display: none !important; + } +} +@media only screen and (-webkit-min-device-pixel-ratio: 0) and (max-device-width: 480px) { + div.switch { + -webkit-animation: webkitSiblingBugfix infinite 1s; + } +} +@media only screen and (-webkit-min-device-pixel-ratio: 1.5) { + div.switch { + -webkit-animation: none 0; + } +} +@media only screen { + form.custom div.switch .hidden-field { + margin-left: auto; + position: absolute; + visibility: visible; + } + div.switch label { + padding: 0; + line-height: 2.3em; + font-size: 0.875em; + } + div.switch input:first-of-type:checked ~ span:last-child { + left: 100%; + margin-left: -2.1875em; + } + div.switch span:last-child { + width: 2.25em; + height: 2.25em; + } + div.switch span:last-child { + border-color: #b3b3b3; + background: #fff; + background: -moz-linear-gradient(top, #fff 0%, #f2f2f2 100%); + background: -webkit-linear-gradient(top, #fff 0%, #f2f2f2 100%); + background: linear-gradient(to bottom, #fff 0%, #f2f2f2 100%); + -webkit-box-shadow: 2px 0 10px 0 rgba(0, 0, 0, 0.07), 1000px 0 0 1000px #e1f5d1, -2px 0 10px 0 rgba(0, 0, 0, 0.07), -1000px 0 0 1000px #f5f5f5; + box-shadow: 2px 0 10px 0 rgba(0, 0, 0, 0.07), 1000px 0 0 980px #e1f5d1, -2px 0 10px 0 rgba(0, 0, 0, 0.07), -1000px 0 0 1000px #f5f5f5; + } + div.switch:hover span:last-child, div.switch:focus span:last-child { + background: #fff; + background: -moz-linear-gradient(top, #fff 0%, #e6e6e6 100%); + background: -webkit-linear-gradient(top, #fff 0%, #e6e6e6 100%); + background: linear-gradient(to bottom, #fff 0%, #e6e6e6 100%); + } + div.switch:active { + background: transparent; + } + div.switch.large { + height: 2.75em; + } + div.switch.large label { + padding: 0; + line-height: 2.3em; + font-size: 1.0625em; + } + div.switch.large input:first-of-type:checked ~ span:last-child { + left: 100%; + margin-left: -2.6875em; + } + div.switch.large span:last-child { + width: 2.75em; + height: 2.75em; + } + div.switch.small { + height: 1.75em; + } + div.switch.small label { + padding: 0; + line-height: 2.1em; + font-size: 0.75em; + } + div.switch.small input:first-of-type:checked ~ span:last-child { + left: 100%; + margin-left: -1.6875em; + } + div.switch.small span:last-child { + width: 1.75em; + height: 1.75em; + } + div.switch.tiny { + height: 1.375em; + } + div.switch.tiny label { + padding: 0; + line-height: 1.9em; + font-size: 0.6875em; + } + div.switch.tiny input:first-of-type:checked ~ span:last-child { + left: 100%; + margin-left: -1.3125em; + } + div.switch.tiny span:last-child { + width: 1.375em; + height: 1.375em; + } + div.switch.radius { + -webkit-border-radius: 4px; + border-radius: 4px; + } + div.switch.radius span:last-child { + -webkit-border-radius: 3px; + border-radius: 3px; + } + div.switch.round { + -webkit-border-radius: 1000px; + border-radius: 1000px; + } + div.switch.round span:last-child { + -webkit-border-radius: 999px; + border-radius: 999px; + } + div.switch.round label { + padding: 0 0.5625em; + } + + @-webkit-keyframes webkitSiblingBugfix { + from { + position: relative; + } + to { + position: relative; + } + } +} +[data-magellan-expedition] { + background: #fff; + z-index: 50; + min-width: 100%; + padding: 10px; +} +[data-magellan-expedition] .sub-nav { + margin-bottom: 0; +} +[data-magellan-expedition] .sub-nav dd { + margin-bottom: 0; +} + +/* Tables */ +table { + background: #fff; + margin-bottom: 1.25em; + border: solid 1px #ddd; +} +table thead, +table tfoot { + background: #f5f5f5; + font-weight: bold; +} +table thead tr th, +table thead tr td, +table tfoot tr th, +table tfoot tr td { + padding: 0.5em 0.625em 0.625em; + font-size: 0.875em; + color: #222; + text-align: left; +} +table tr th, +table tr td { + padding: 0.5625em 0.625em; + font-size: 0.875em; + color: #222; +} +table tr.even, table tr.alt, table tr:nth-of-type(even) { + background: #f9f9f9; +} +table thead tr th, +table tfoot tr th, +table tbody tr td, +table tr td, +table tfoot tr td { + display: table-cell; + line-height: 1.125em; +} + +/* Image Thumbnails */ +.th { + line-height: 0; + display: inline-block; + border: solid 4px #fff; + -webkit-box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.2); + box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.2); + -webkit-transition: all 200ms ease-out; + -moz-transition: all 200ms ease-out; + transition: all 200ms ease-out; +} +.th:hover, .th:focus { + -webkit-box-shadow: 0 0 6px 1px rgba(128, 128, 128, 0.5); + box-shadow: 0 0 6px 1px rgba(128, 128, 128, 0.5); +} +.th.radius { + -webkit-border-radius: 3px; + border-radius: 3px; +} + +a.th { + display: inline-block; + max-width: 100%; +} + +/* Tooltips */ +.has-tip { + border-bottom: dotted 1px #ccc; + cursor: help; + font-weight: bold; + color: #333; +} +.has-tip:hover, .has-tip:focus { + border-bottom: dotted 1px #4d4d4d; + color: gray; +} +.has-tip.tip-left, .has-tip.tip-right { + float: none !important; +} + +.tooltip { + display: none; + position: absolute; + z-index: 999; + font-weight: bold; + font-size: 0.9375em; + line-height: 1.3; + padding: 0.5em; + max-width: 85%; + left: 50%; + width: 100%; + color: #fff; + background: #000; + -webkit-border-radius: 3px; + border-radius: 3px; +} +.tooltip > .nub { + display: block; + left: 5px; + position: absolute; + width: 0; + height: 0; + border: solid 5px; + border-color: transparent transparent #000 transparent; + top: -10px; +} +.tooltip.opened { + color: gray !important; + border-bottom: dotted 1px #4d4d4d !important; +} + +.tap-to-close { + display: block; + font-size: 0.625em; + color: #888; + font-weight: normal; +} + +@media only screen and (min-width: 730px) { + .tooltip > .nub { + border-color: transparent transparent #000 transparent; + top: -10px; + } + .tooltip.tip-top > .nub { + border-color: #000 transparent transparent transparent; + top: auto; + bottom: -10px; + } + .tooltip.tip-left, .tooltip.tip-right { + float: none !important; + } + .tooltip.tip-left > .nub { + border-color: transparent transparent transparent #000; + right: -10px; + left: auto; + top: 50%; + margin-top: -5px; + } + .tooltip.tip-right > .nub { + border-color: transparent #000 transparent transparent; + right: auto; + left: -10px; + top: 50%; + margin-top: -5px; + } +} +@media only screen and (max-width: 767px) { + .f-dropdown { + max-width: 100%; + left: 0; + } +} +/* Foundation Dropdowns */ +.f-dropdown { + position: absolute; + top: -9999px; + list-style: none; + margin-left: 0; + width: 100%; + max-height: none; + height: auto; + background: #fff; + border: solid 1px #cccccc; + font-size: 16px; + z-index: 99; + margin-top: 2px; + max-width: 200px; +} +.f-dropdown > *:first-child { + margin-top: 0; +} +.f-dropdown > *:last-child { + margin-bottom: 0; +} +.f-dropdown:before { + content: ""; + display: block; + width: 0; + height: 0; + border: inset 6px; + border-color: transparent transparent #fff transparent; + border-bottom-style: solid; + position: absolute; + top: -12px; + left: 10px; + z-index: 99; +} +.f-dropdown:after { + content: ""; + display: block; + width: 0; + height: 0; + border: inset 7px; + border-color: transparent transparent #cccccc transparent; + border-bottom-style: solid; + position: absolute; + top: -14px; + left: 9px; + z-index: 98; +} +.f-dropdown.right:before { + left: auto; + right: 10px; +} +.f-dropdown.right:after { + left: auto; + right: 9px; +} +.f-dropdown li { + font-size: 0.875em; + cursor: pointer; + line-height: 1.125em; + margin: 0; +} +.f-dropdown li:hover, .f-dropdown li:focus { + background: #eeeeee; +} +.f-dropdown li a { + display: block; + padding: 0.5em; + color: #555; +} +.f-dropdown.content { + position: absolute; + top: -9999px; + list-style: none; + margin-left: 0; + padding: 1.25em; + width: 100%; + height: auto; + max-height: none; + background: #fff; + border: solid 1px #cccccc; + font-size: 16px; + z-index: 99; + max-width: 200px; +} +.f-dropdown.content > *:first-child { + margin-top: 0; +} +.f-dropdown.content > *:last-child { + margin-bottom: 0; +} +.f-dropdown.tiny { + max-width: 200px; +} +.f-dropdown.small { + max-width: 300px; +} +.f-dropdown.medium { + max-width: 500px; +} +.f-dropdown.large { + max-width: 800px; +} + +/* Each individual part that can be added in */ +.pagination.pager { + float: right; + margin-right: 10px; +} +.pagination.pager li { + border-left: 1px solid transparent; + padding: 0; + height: 33px; +} +.pagination.pager li.current a { + background: #267fda; +} +.pagination.pager li.current a:hover { + background: #267fda; +} +.pagination.pager li a { + background: #f6511d; + padding: 5px 10px; + color: #fff; + text-decoration: none; + width: 31px; + height: 33px; + padding: 0 !important; + text-decoration: none !important; + font-size: 17px; + line-height: 34px; +} +.pagination.pager li a:hover { + background: #267fda; +} +.pagination.pager li.arrow:nth-of-type(2) a { + color: transparent !important; + background: #f6511d url("../images/libraryzurb/left-arrow.png") no-repeat !important; + background-position: center 7px; + width: 31px; + height: 33px; + background-size: 18px; + border-radius: 12px 0px 0px 12px; +} +.pagination.pager li.arrow:nth-last-of-type(2) a { + color: transparent !important; + background: #f6511d url("../images/libraryzurb/right-arrow.png") no-repeat !important; + background-position: center 4px; + width: 31px; + height: 33px; + background-size: 18px; + border-radius: 0px 12px 12px 0px; +} +.pagination.pager li.arrow.first, .pagination.pager li.arrow.last { + display: none; +} + +.view .views-field-body { + font-family: arial !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; +} + +.page-patron ul.action-links { + display: none; +} + +.view-empty a { + display: inline-block; + margin-top: 10px; + background: #267fda !important; + color: #fff !important; + width: 100%; + margin-left: 0 !important; + border: none !important; + outline: none !important; +} +.view-empty a:hover { + background: #267fda !important; + color: #fff !important; + text-decoration: underline !important; +} + +h1#page-title { + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + color: #000; + font-size: 28px; +} + +.views-field-count { + padding-left: 17px; +} + +.more-link { + text-align: right; +} +.more-link a { + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + position: relative; + font-size: 17px; + text-transform: capitalize; + padding-right: 20px; +} +.more-link a:after { + content: ""; + width: 17px; + height: 17px; + display: block; + visibility: visible; + position: absolute; + top: 1px; + right: 0; + background: url("../images/libraryzurb/right-blue-arrow.png") no-repeat; + background-size: 15px; +} + +.page-user .alert-box:nth-of-type(2) { + display: none; +} + +@media screen and (max-width: 767px) { + .homebox-column-wrapper { + width: 100% !important; + } + .homebox-column-wrapper .homebox-column { + height: auto !important; + padding: 0 !important; + } +} + +.more-link { + text-align: right; + width: 100%; +} +.more-link a { + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + position: relative; + font-size: 17px; + text-transform: capitalize; + padding-right: 20px; +} +.more-link a:after { + content: ""; + width: 17px; + height: 17px; + display: block; + visibility: visible; + position: absolute; + top: 12%; + right: 0; + background: url("../images/libraryzurb/right-blue-arrow.png") no-repeat; + background-size: 15px; +} + +.page-patron .button-group:nth-of-type(1) li { + display: none; +} +.page-patron .button-group:nth-of-type(2) { + float: left; +} +.page-patron .button-group:nth-of-type(2) a { + font-size: 17px !important; + border: none !important; + outline: none !important; + background: #fdeb52 !important; +} +.page-patron .button-group:nth-of-type(2) a:hover { + background: #f7fc63; +} +.page-patron .button-group:nth-of-type(2) li:nth-of-type(1) { + display: none; +} +.page-patron #edit-profile-main-field-user-birthday { + width: 100%; + display: inline-block; +} + +/**css for login and signup button in unauthencated pages***/ +.not-logged-in .pre-header { + padding-bottom: 0 !important; +} +.not-logged-in .pre-header .pre-header-left .top-menu { + float: none !important; + width: 100% !important; +} +.not-logged-in .pre-header .pre-header-left .top-menu .block-menu-menu-authenticated-links { + float: right; + margin-bottom: 0; +} +.not-logged-in .pre-header .pre-header-left .top-menu .block-menu-menu-authenticated-links .menu li a { + color: #fff !important; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + background: #267fda !important; + border-radius: 10px; + padding: 9px 22px; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + border: none; + text-transform: capitalize; + font-size: 17px; + margin: 5px !important; +} +.not-logged-in .pre-header .pre-header-left .top-menu .block-menu-menu-authenticated-links .menu li a:hover, .not-logged-in .pre-header .pre-header-left .top-menu .block-menu-menu-authenticated-links .menu li a:focus { + color: #fff; + background: #267fda; + opacity: 1; + outline: none; +} + +form#user-pass span.form-required { + display: none; +} +form#user-pass div.user_pass_name:after { + content: "*"; + color: #cc0d25; +} + +.admin-menu .fixed { + top: 1.8125em; +} + +#status-messages.reveal-modal .alert-box { + margin-bottom: 0; +} + +.reveal-modal { + z-index: 999; +} + +.item-list .pager { + clear: none; +} + +.item-list .pager li { + padding: 0; + margin: 0; + display: inline-block; +} + +.contextual-links-region .contextual-links-wrapper a { + background-color: transparent; +} + +.contextual-links-region-active .contextual-links-trigger-active:hover { + background-color: transparent; +} +.contextual-links-region-active .contextual-links-active .contextual-links-trigger-active:hover { + background-color: #fff; +} + +.l-header { + background: #73A603; +} +.l-header .row.header-middle { + max-width: 100%; +} +.l-header .row.header-middle a#logo { + margin: 20px 20px 20px 0px; +} +.l-header .row.header-middle h1#site-name { + margin: 26px 0px 0px; +} +.l-header .row.header-middle h2#site-slogan { + margin: 2px 0px 0px; +} +.l-header .row.header-middle section.s-logoblock { + margin-bottom: 0px; +} +.l-header .row.header-middle section.s-logoblock p { + margin-bottom: 0px; +} +.l-header .row.header-middle section.block-menu-menu-secoundary-menu { + margin-bottom: 0; +} +@media (max-width: 767px) { + .l-header .row.header-middle section.block-menu-menu-secoundary-menu { + display: none; + } +} +.l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu { + float: right; + list-style: none; + position: relative; + bottom: 20px; +} +.l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li { + display: inline-block; + vertical-align: top; + height: 106px; + width: 100px; +} +@media screen and (min-width: 768px) and (max-width: 1025px) { + .l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li { + height: 70px; + width: 60px; + } +} +.l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a { + position: relative; + width: 100%; + height: 100%; + font-size: 0; +} +.l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a:after { + content: ""; + width: 94px; + height: 105px; + display: block; + visibility: visible; + position: absolute; + top: 0; + left: 0; + background-size: 100px; + -webkit-transition-duration: 0.8s; + -moz-transition-duration: 0.8s; + -o-transition-duration: 0.8s; + transition-duration: 0.8s; + -webkit-transition-property: -webkit-transform; + -moz-transition-property: -moz-transform; + -o-transition-property: -o-transform; + transition-property: transform; +} +@media (min-width: 768px) and (max-width: 1025px) { + .l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a:after { + content: ""; + width: 60px; + height: 70px; + display: block; + visibility: visible; + position: absolute; + top: 0; + left: 0; + } +} +.l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.current-program { + position: relative; +} +.l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.current-program:hover:after, .l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.current-program.active-trail:after { + background: url("../images/libraryzurb/currentprogs_hover.png") no-repeat; +} +@media (min-width: 768px) and (max-width: 1025px) { + .l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.current-program:hover:after, .l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.current-program.active-trail:after { + background-size: 100% !important; + } +} +.l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.current-program:after { + background: url("../images/libraryzurb/current-programs.png") no-repeat; +} +@media (min-width: 768px) and (max-width: 1025px) { + .l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.current-program:after { + background-size: 100% !important; + } +} +.l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.activities:hover:after, .l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.activities.active-trail:after { + background: url("../images/libraryzurb/activities_hover.png") no-repeat; +} +@media (min-width: 768px) and (max-width: 1025px) { + .l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.activities:hover:after, .l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.activities.active-trail:after { + background-size: 100% !important; + } +} +.l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.activities:after { + background: url("../images/libraryzurb/activities.png") no-repeat; +} +@media (min-width: 768px) and (max-width: 1025px) { + .l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.activities:after { + background-size: 100% !important; + } +} +.l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.rewards:hover:after, .l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.rewards.active-trail:after { + background: url("../images/libraryzurb/rewards_hover.png") no-repeat; +} +@media (min-width: 768px) and (max-width: 1025px) { + .l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.rewards:hover:after, .l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.rewards.active-trail:after { + background-size: 100% !important; + } +} +.l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.rewards:after { + background: url("../images/libraryzurb/rewards.png") no-repeat; +} +@media (min-width: 768px) and (max-width: 1025px) { + .l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.rewards:after { + background-size: 100% !important; + } +} +.l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.reviews:hover:after, .l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.reviews.active-trail:after { + background: url("../images/libraryzurb/reviewactive.png") no-repeat; +} +@media (min-width: 768px) and (max-width: 1025px) { + .l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.reviews:hover:after, .l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.reviews.active-trail:after { + background-size: 100% !important; + } +} +.l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.reviews:after { + background: url("../images/libraryzurb/reviews.png") no-repeat; +} +@media (min-width: 768px) and (max-width: 1025px) { + .l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.reviews:after { + background-size: 100% !important; + } +} +.l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.photos:hover:after, .l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.photos.active-trail:after { + background: url("../images/libraryzurb/photos_videos_hover.png") no-repeat; +} +@media (min-width: 768px) and (max-width: 1025px) { + .l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.photos:hover:after, .l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.photos.active-trail:after { + background-size: 100% !important; + } +} +.l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.photos:after { + background: url("../images/libraryzurb/photosnvideos.png") no-repeat; +} +@media (min-width: 768px) and (max-width: 1025px) { + .l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.photos:after { + background-size: 100% !important; + } +} +.l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.events:hover:after, .l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.events.active-trail:after { + background: url("../images/libraryzurb/events_hover.png") no-repeat; +} +@media (min-width: 768px) and (max-width: 1025px) { + .l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.events:hover:after, .l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.events.active-trail:after { + background-size: 100% !important; + } +} +.l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.events:after { + background: url("../images/libraryzurb/events.png") no-repeat; +} +@media (min-width: 768px) and (max-width: 1025px) { + .l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.events:after { + background-size: 100% !important; + } +} +.l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.progress { + border: none; +} +.l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.progress:hover:after, .l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.progress.active-trail:after { + background: url("../images/libraryzurb/progress_hover.png") no-repeat; +} +@media (min-width: 768px) and (max-width: 1025px) { + .l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.progress:hover:after, .l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.progress.active-trail:after { + background-size: 100% !important; + } +} +.l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.progress:after { + background: url("../images/libraryzurb/progress.png") no-repeat; +} +@media (min-width: 768px) and (max-width: 1025px) { + .l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.progress:after { + background-size: 100% !important; + } +} +.l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a:hover:after { + -webkit-transform: rotateY(360deg); + -moz-transform: rotateY(360deg); + -ms-transform: rotateY(360deg); + -o-transform: rotateY(360deg); + transform: rotateY(360deg); +} + +/**hide admin menu on mobile css**/ +@media (max-width: 767px) { + #admin-menu { + display: none; + } +} +@media (min-width: 768px) and (max-width: 1025px) { + #admin-menu { + display: none; + } +} +.media-youtube-video { + position: relative; + padding-bottom: 56.25%; + height: 0; + overflow: hidden; + max-width: 100%; +} +.media-youtube-video iframe, .media-youtube-video object, .media-youtube-video embed { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +@media (max-width: 767px) { + #citylinks { + display: none; + } +} + +@media (min-width: 768px) and (max-width: 1025px) { + #mobile-header { + display: none; + } +} +@media (min-width: 1026px) { + #mobile-header { + display: none; + } +} + +.block { + margin-bottom: 35px; +} +.block.block-private-msg-custom-homepage-slider { + background: #267fda !important; + overflow: hidden; + border-radius: 20px; + color: #fff; + position: relative; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + padding: 0 !important; +} +.block.block-private-msg-custom-homepage-slider ul { + list-style: none; + position: absolute; + right: 40px; + z-index: 1; + top: 28px; +} +.block.block-private-msg-custom-homepage-slider ul label { + width: 20px; + display: inline; + font-size: 10px; +} +.block.block-private-msg-custom-homepage-slider ul input[type=radio] { + visibility: hidden; + position: absolute; +} +.block.block-private-msg-custom-homepage-slider ul input[type=radio] + label:before { + height: 20px; + width: 20px; + margin-right: 10px; + content: " "; + display: inline-block; + vertical-align: baseline; + border: 1px solid #fff; + background: #fff; + border-radius: 100%; +} +.block.block-private-msg-custom-homepage-slider ul input[type=radio]:checked + label:before { + background: #267fda; + border: 1px solid #267fda; +} +.block.block-private-msg-custom-homepage-slider .slide { + padding-bottom: 50px; +} +.block.block-private-msg-custom-homepage-slider .slide .view .view-header { + color: #fff; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + padding-top: 26px; + padding-bottom: 25px; + font-size: 28px; + height: 110px; + border-bottom: medium none; + margin-top: -1px; + padding-left: 36px; + z-index: 0; + position: relative; + border-radius: 20px; + overflow: hidden; +} +@media (max-width: 767px) { + .block.block-private-msg-custom-homepage-slider .slide .view .view-header { + font-size: 22px; + } +} +.block.block-private-msg-custom-homepage-slider .slide .view .view-header:after { + content: ""; + width: 100%; + height: 110px; + display: block; + visibility: visible; + position: absolute; + top: 0; + left: 0; + background: url("../images/libraryzurb/background-saffron.png") no-repeat; + background-position: -35px 10px; + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -ms-transform: rotate(180deg); + -o-transform: rotate(180deg); + transform: rotate(180deg); + z-index: -1; +} +.block.block-private-msg-custom-homepage-slider .slide .view .view-content { + padding-top: 17px; +} +.block.block-private-msg-custom-homepage-slider .slide .view .view-footer { + position: relative; + top: 30px; + left: 22px; +} +.block.block-private-msg-custom-homepage-slider .owl-controls { + position: absolute; + top: 36%; + width: 100%; + height: 0; +} +.block.block-private-msg-custom-homepage-slider .owl-controls .owl-pagination { + display: none; +} +.block.block-private-msg-custom-homepage-slider .owl-controls .owl-buttons .owl-prev { + float: left; + background: url("../images/libraryzurb/left-arrow.png") no-repeat; + opacity: 1; + color: transparent; + border-radius: 0; + margin-left: -28px; + padding: 10px; +} +.block.block-private-msg-custom-homepage-slider .owl-controls .owl-buttons .owl-next { + float: right; + background: url("../images/libraryzurb/right-arrow.png") no-repeat; + opacity: 1; + color: transparent; + border-radius: 0; + margin-right: -45px; + padding: 10px; +} +.block.block-private-msg-custom-homepage-slider .slide { + padding-bottom: 50px; +} +.block.block-private-msg-custom-homepage-slider .slide .view .view-header { + color: #fff; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + padding-top: 26px; + padding-bottom: 25px; + font-size: 28px; + height: 110px; + border-bottom: medium none; + margin-top: -1px; + padding-left: 36px; + z-index: 0; + position: relative; + border-radius: 20px; + overflow: hidden; + text-transform: capitalize; +} +@media (max-width: 767px) { + .block.block-private-msg-custom-homepage-slider .slide .view .view-header { + font-size: 22px; + } +} +.block.block-private-msg-custom-homepage-slider .slide .view .view-header:after { + content: ""; + width: 100%; + height: 110px; + display: block; + visibility: visible; + position: absolute; + top: 0; + left: 0; + background: url("../images/libraryzurb/background-saffron.png") no-repeat; + background-position: -35px 10px; + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -ms-transform: rotate(180deg); + -o-transform: rotate(180deg); + transform: rotate(180deg); + z-index: -1; +} +.block.block-private-msg-custom-homepage-slider .owl-controls { + position: absolute; + top: 36%; + width: 100%; + height: 0; +} +.block.block-private-msg-custom-homepage-slider .owl-controls .owl-pagination { + display: none; +} +.block.block-private-msg-custom-homepage-slider .owl-controls .owl-buttons .owl-prev { + float: left; + background: url("../images/libraryzurb/left-arrow.png") no-repeat; + opacity: 1; + color: transparent; + border-radius: 0; + margin-left: -28px; + padding: 10px; +} +.block.block-private-msg-custom-homepage-slider .owl-controls .owl-buttons .owl-next { + float: right; + background: url("../images/libraryzurb/right-arrow.png") no-repeat; + opacity: 1; + color: transparent; + border-radius: 0; + margin-right: -45px; + padding: 10px; +} +.block.block-auto-role-allocation-calendar-data.header { + display: none; +} +@media (max-width: 767px) { + .block { + margin-bottom: 25px; + } +} +.block.block-views-event-activities-block-1 { + background: #267fda !important; + overflow: hidden; + border-radius: 20px; + color: #fff; + position: relative; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + padding: 10px 22px; +} +.block.block-views-event-activities-block-1 .block-title { + font-size: 22px; + color: #fff; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; +} +.block.block-views-event-activities-block-1 .view-event-activities a { + font-size: 17px; + color: #fff; + text-decoration: underline; + font-family: arial !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; +} +.block.badge-reward-list { + margin-bottom: 0 !important; +} +.block.badge-reward-list .badge_list { + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + font-size: 28px; +} +.block.dashboard-block { + background: #267fda; + overflow: hidden; + border-radius: 20px; + color: #fff; + position: relative; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); +} +.block.dashboard-block .pagination.pager li { + border: none !important; + outline: none !important; +} +.block.dashboard-block .block-title, .block.dashboard-block h2 { + color: #fff; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + padding-top: 26px; + padding-bottom: 25px; + font-size: 28px; + height: 110px; + border-bottom: medium none; + margin-top: -1px; + padding-left: 36px; + z-index: 0; + position: relative; + font-weight: normal !important; + border-radius: 20px; + overflow: hidden; +} +@media (max-width: 767px) { + .block.dashboard-block .block-title, .block.dashboard-block h2 { + font-size: 22px; + } +} +.block.dashboard-block .block-title:after, .block.dashboard-block h2:after { + content: ""; + width: 100%; + height: 110px; + display: block; + visibility: visible; + position: absolute; + top: 0; + left: 0; + background: url("../images/libraryzurb/background-saffron.png") no-repeat; + background-position: -35px 10px; + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -ms-transform: rotate(180deg); + -o-transform: rotate(180deg); + transform: rotate(180deg); + z-index: -1; +} +.block.dashboard-block .view { + display: table; + width: 100%; + padding: 12px 2.3%; + position: relative; +} +.block.dashboard-block .view .attachment { + width: 50%; + display: table-cell; + position: relative; + bottom: 26px; +} +.block.dashboard-block .view .attachment .view { + padding: 0 !important; + display: inline-block; +} +.block.dashboard-block .view .attachment .view .view-content { + float: left; + display: inline-block; + width: 100%; +} +.block.dashboard-block .view .attachment .view .view-content .views-row { + display: table; + margin-bottom: 0; +} +.block.dashboard-block .view .attachment .view .view-content .views-row img { + margin: 0px 5px 0px 0px; + border: none !important; + outline: none !important; + background: #fff; +} +.block.dashboard-block .view .attachment .view .view-content .views-row .views-field { + display: table-cell; + height: 100%; + vertical-align: bottom; +} +.block.dashboard-block .view .attachment .view .view-content .views-row .views-field.views-field-name a { + color: #fff; + font-family: Arialbold !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + -moz-font-smoothing: grayscale !important; +} +.block.dashboard-block .view .view-content { + width: 50%; + float: right; + display: table-cell; +} +.block.dashboard-block .view .view-content table { + float: right; +} +.block.dashboard-block .view .view-content table, .block.dashboard-block .view .view-content table tr.even, .block.dashboard-block .view .view-content table tr.alt, .block.dashboard-block .view .view-content table tr:nth-of-type(2n) { + background: none !important; + border: none !important; + outline: none !important; +} +.block.dashboard-block .view .view-content table tr td .views-field h2 { + display: none; +} +.block.dashboard-block .view .view-content table tr td .views-field .content { + display: inline-block; + background: #fff; +} +.block.dashboard-block .view .item-list { + position: absolute; + top: -17px; + right: 4%; + display: block; +} +.block.dashboard-block .view .item-list .pagination li { + margin-left: 10px; +} +.block.dashboard-block .view .item-list .pagination li a { + color: transparent !important; + position: relative; + background: transparent; +} +.block.dashboard-block .view .item-list .pagination li a:hover { + background: transparent; +} +.block.dashboard-block .view .item-list .pagination li a:after { + content: ""; + width: 20px; + height: 20px; + display: block; + visibility: visible; + position: absolute; + top: 0; + left: 0; + border-radius: 100%; + background: #fff; +} +.block.dashboard-block .view .item-list .pagination li.current a:after { + background: #f6511d !important; +} +.block.dashboard-block .view .item-list .pagination li.arrow { + display: none; +} +.block.block-views-booklist-slideshow-block-2 h2.block-title { + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + font-size: 25px; + color: #000; + border: none !important; + outline: none !important; + margin-bottom: 33px; +} +.block.bordr-bottom { + border-bottom: 1px solid #cccccc; + padding-bottom: 20px; +} +.block.block-private-msg-custom { + color: #fff; + border-radius: 20px; + background: #fdeb52; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + padding: 35px; + width: 100%; + display: inline-block; +} +.block.block-private-msg-custom h2 { + color: #000; + margin-top: 0; + font-size: 28px; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + border: none !important; + outline: none !important; +} +.block.block-private-msg-custom .pm-custom { + width: 100%; + display: inline-block; + position: relative; +} +.block.block-private-msg-custom .pm-custom .pm-view { + position: absolute; + top: 29%; + right: -6px; + padding: 12px 22px; + color: #fff !important; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + background: #267fda !important; + border-radius: 10px; + padding: 9px 22px; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + border: none; + text-transform: capitalize; + font-size: 17px; +} +.block.block-private-msg-custom .pm-custom .pm-view:hover, .block.block-private-msg-custom .pm-custom .pm-view:focus { + color: #fff; + background: #267fda; + opacity: 1; + outline: none; +} +.block.block-private-msg-custom .pm-custom .pm { + width: 90%; + display: inline-block; + margin-bottom: 25px; +} +.block.block-private-msg-custom .pm-custom .pm .pm-subject { + width: 60%; + float: left; + color: #cc0d25; + font-size: 17px; + font-family: Arialbold !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + -moz-font-smoothing: grayscale !important; +} +.block.block-private-msg-custom .pm-custom .pm .pm-subject a { + color: #000; + line-height: 1; +} +.block.block-private-msg-custom .pm-custom .pm .pm-subject .pm-new { + float: left; + padding-right: 10px; + color: #cc0d25; + position: relative; + top: 5px; +} +.block.block-private-msg-custom .pm-custom .pm .pm-admin { + width: 19%; + float: left; + font-size: 17px; + font-family: arial !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; + color: #000; +} +.block.block-private-msg-custom .pm-custom .pm .pm-date { + float: left; + width: 19%; + color: #000; + font-size: 17px; + font-family: arial !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; +} +.block.block-user-login { + background: #267fda; + overflow: hidden; + border-radius: 20px; + color: #fff; + position: relative; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); +} +.block.block-user-login .block-title, .block.block-user-login h2 { + color: #fff; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + padding-top: 26px; + padding-bottom: 25px; + font-size: 28px; + height: 110px; + border-bottom: medium none; + margin-top: -1px; + padding-left: 36px; + z-index: 0; + position: relative; + font-weight: normal !important; + border-radius: 20px; + overflow: hidden; +} +@media (max-width: 767px) { + .block.block-user-login .block-title, .block.block-user-login h2 { + font-size: 22px; + } +} +.block.block-user-login .block-title:after, .block.block-user-login h2:after { + content: ""; + width: 100%; + height: 110px; + display: block; + visibility: visible; + position: absolute; + top: 0; + left: 0; + background: url("../images/libraryzurb/background-saffron.png") no-repeat; + background-position: -35px 10px; + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -ms-transform: rotate(180deg); + -o-transform: rotate(180deg); + transform: rotate(180deg); + z-index: -1; +} +.block.block-user-login .block-title { + padding-left: 11.5%; +} +.block.block-user-login form { + width: 100%; + max-width: 77%; + margin: 0 auto; +} +.block.block-user-login form label { + color: #fff !important; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; +} +.block.block-user-login form ul { + list-style: none; +} +.block.block-user-login form ul li { + margin-left: 0; +} +.block.block-user-login form ul li a { + color: #fff !important; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; +} +.block.block-user-login form button { + color: #000; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + border-radius: 10px; + background: #fdeb52 !important; + text-transform: capitalize; + border: none; + padding: 0.5625em 20px; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + margin-left: 0; +} +.block.block-user-login form button:hover { + color: #000; + background: #f7fc63 !important; + opacity: 1; + outline: none; + text-decoration: none !important; +} +.block.block-user-login form button:focus, .block.block-user-login form button.active { + color: #000; + background: #f0f811 !important; + outline: 1; + opacity: 1; + text-decoration: none !important; +} +.block.review-booklist-block { + background: #fff; + border-radius: 20px; + padding-left: 10px; + padding-right: 10px; + margin-bottom: 48px; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; +} +.block.review-booklist-block .block-title { + border-top: none; + padding: 10px; + padding-left: 22.6%; +} +.block.review-booklist-block .block-title a { + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + font-size: 22px; + color: #000; + position: relative; +} +.block.review-booklist-block .block-title a.active { + color: #f6511d !important; +} +.block.review-booklist-block .block-title a.active:before { + content: ""; + width: 25px; + height: 25px; + display: block; + visibility: visible; + position: absolute; + top: 3px; + left: -31px; + background: url("../images/libraryzurb/star.png") no-repeat; +} +.block.review-booklist-block ul.menu { + margin-bottom: 6px; +} +.block.review-booklist-block ul.menu li { + padding: 6px 0px 0px 22.6%; +} +.block.review-booklist-block ul.menu li a { + color: #000; + font-size: 22px; +} +.block.review-booklist-block ul.menu li a:focus { + outline: none; +} +.block.review-booklist-block ul.menu li.active a { + color: #f6511d !important; + position: relative; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; +} +.block.review-booklist-block ul.menu li.active a:before { + content: ""; + width: 25px; + height: 25px; + display: block; + visibility: visible; + position: absolute; + top: 3px; + left: -31px; + background: url("../images/libraryzurb/star.png") no-repeat; +} +.block.write-book-review { + margin-bottom: 0 !important; +} +.block.write-book-review h2.block-title { + margin-bottom: 25px; +} +.block.block-views-reward-earn-block, .block.block-views-reward-earn-block-1 { + background: #267fda; + overflow: hidden; + border-radius: 20px; + color: #fff; + position: relative; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); +} +.block.block-views-reward-earn-block .block-title, .block.block-views-reward-earn-block h2, .block.block-views-reward-earn-block-1 .block-title, .block.block-views-reward-earn-block-1 h2 { + color: #fff; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + padding-top: 26px; + padding-bottom: 25px; + font-size: 28px; + height: 110px; + border-bottom: medium none; + margin-top: -1px; + padding-left: 36px; + z-index: 0; + position: relative; + font-weight: normal !important; + border-radius: 20px; + overflow: hidden; +} +@media (max-width: 767px) { + .block.block-views-reward-earn-block .block-title, .block.block-views-reward-earn-block h2, .block.block-views-reward-earn-block-1 .block-title, .block.block-views-reward-earn-block-1 h2 { + font-size: 22px; + } +} +.block.block-views-reward-earn-block .block-title:after, .block.block-views-reward-earn-block h2:after, .block.block-views-reward-earn-block-1 .block-title:after, .block.block-views-reward-earn-block-1 h2:after { + content: ""; + width: 100%; + height: 110px; + display: block; + visibility: visible; + position: absolute; + top: 0; + left: 0; + background: url("../images/libraryzurb/background-saffron.png") no-repeat; + background-position: -35px 10px; + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -ms-transform: rotate(180deg); + -o-transform: rotate(180deg); + transform: rotate(180deg); + z-index: -1; +} +.block.block-views-reward-earn-block .view, .block.block-views-reward-earn-block-1 .view { + display: table; + width: 100%; +} +.block.block-views-reward-earn-block .view .views-row, .block.block-views-reward-earn-block-1 .view .views-row { + display: table-row; + width: 100%; +} +.block.block-views-reward-earn-block .view .views-row .views-field.views-field-field-badge-image, .block.block-views-reward-earn-block-1 .view .views-row .views-field.views-field-field-badge-image { + width: 40%; + display: table-cell; + padding-left: 15px; +} +.block.block-views-reward-earn-block .view .views-row .views-field.views-field-field-badge-image .field-content img, .block.block-views-reward-earn-block-1 .view .views-row .views-field.views-field-field-badge-image .field-content img { + margin-bottom: 10px; +} +.block.block-views-reward-earn-block .view .views-row .views-field.views-field-title, .block.block-views-reward-earn-block-1 .view .views-row .views-field.views-field-title { + float: none; + width: 50%; + display: table-cell; + vertical-align: middle; + padding-left: 2%; +} +.block.block-views-reward-earn-block .view-footer, .block.block-views-reward-earn-block-1 .view-footer { + padding-left: 15px; +} +.block.announcement { + background: #fdeb52 url("../images/libraryzurb/annocement.png") no-repeat; + background-size: 100%; + background-position: center center; + color: #000; + border-radius: 20px; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); +} +.block.announcement .block-title { + padding: 26px 36px; + border: none; + color: #000; + font-size: 28px; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; +} +@media (max-width: 767px) { + .block.announcement .block-title { + font-size: 18px; + } +} +.block.announcement .views-field-body p { + padding-left: 36px; + font-family: Arialbold !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + -moz-font-smoothing: grayscale !important; +} +@media (max-width: 767px) { + .block.announcement .views-field-body p { + font-size: 14px; + } +} +.block.announcement .views-field-body ol { + margin-left: 70px; + padding-bottom: 40px; + list-style: none; +} +.block.announcement .views-field-body ol li { + position: relative; + font-size: 18px; + font-family: arial !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; +} +@media (max-width: 767px) { + .block.announcement .views-field-body ol li { + font-size: 14px; + } +} +.block.announcement .views-field-body ol li:after { + content: ""; + width: 47px; + height: 21px; + display: block; + visibility: visible; + position: absolute; + top: 3px; + left: -32px; + background: url("../images/libraryzurb/arrow-list.png") no-repeat; +} +.block.homepage-blocks { + background: #267fda; + overflow: hidden; + border-radius: 20px; + color: #fff; + position: relative; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); +} +.block.homepage-blocks.playlib-books .owl-carousel { + position: inherit; +} +.block.homepage-blocks.playlib-books .owl-carousel .owl-item .views-field { + display: flex; + align-items: center; + justify-content: center; + height: 240px; +} +.block.homepage-blocks.playlib-books .owl-carousel .owl-item .views-field img { + width: 100%; +} +.block.homepage-blocks.playlib-books .owl-carousel .owl-controls { + position: absolute; + top: 20px; + right: 30px; +} +.block.homepage-blocks.playlib-books .owl-carousel .owl-controls .owl-pagination .owl-page.active span { + background: #267fda; +} +.block.homepage-blocks.playlib-books .owl-carousel .owl-controls .owl-pagination .owl-page span { + opacity: 1; + width: 20px; + height: 20px; + background: #fff; +} +.block.homepage-blocks.playlib-books .owl-carousel .owl-controls .owl-buttons { + display: none; +} +.block.homepage-blocks.playlib-media .owl-carousel .owl-item { + text-align: center; +} +.block.homepage-blocks.playlib-media .owl-carousel .views-field.views-field-field-video-link { + width: 136px; +} +.block.homepage-blocks.playlib-media .owl-carousel .flickr-wrap .flickr-photo-img:hover, .block.homepage-blocks.playlib-media .owl-carousel img.flickr-photoset-img:hover { + transform: none; + top: 0; + border: none; +} +.block.homepage-blocks.playlib-media .owl-carousel span.flickr-credit, .block.homepage-blocks.playlib-media .owl-carousel .flickr-citation { + display: none; +} +.block.homepage-blocks.playlib-media .owl-carousel .flickr-photo-img, .block.homepage-blocks.playlib-media .owl-carousel img.flickr-photoset-img { + box-shadow: none; + border: none; + border-radius: 0; + height: 100px; + width: 136px; +} +.block.homepage-blocks.playlib-media .owl-carousel .owl-controls { + position: absolute; + top: 20%; + width: 100%; + height: 0; +} +.block.homepage-blocks.playlib-media .owl-carousel .owl-controls .owl-pagination { + display: none; +} +.block.homepage-blocks.playlib-media .owl-carousel .owl-controls .owl-buttons .owl-prev { + float: left; + background: url("../images/libraryzurb/left-arrow.png") no-repeat; + opacity: 1; + color: transparent; + border-radius: 0; + margin-left: -28px; + padding: 10px; +} +.block.homepage-blocks.playlib-media .owl-carousel .owl-controls .owl-buttons .owl-next { + float: right; + background: url("../images/libraryzurb/right-arrow.png") no-repeat; + opacity: 1; + color: transparent; + border-radius: 0; + margin-right: -45px; + padding: 10px; +} +.block.homepage-blocks .block-title { + color: #fff; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + padding-top: 26px; + padding-bottom: 25px; + font-size: 28px; + height: 110px; + border-bottom: medium none; + margin-top: -1px; + padding-left: 36px; + z-index: 0; + position: relative; + border-radius: 20px; + overflow: hidden; +} +@media (max-width: 767px) { + .block.homepage-blocks .block-title { + font-size: 22px; + } +} +.block.homepage-blocks .block-title:after { + content: ""; + width: 100%; + height: 110px; + display: block; + visibility: visible; + position: absolute; + top: 0; + left: 0; + background: url("../images/libraryzurb/background-saffron.png") no-repeat; + background-position: -35px 10px; + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -ms-transform: rotate(180deg); + -o-transform: rotate(180deg); + transform: rotate(180deg); + z-index: -1; +} +.block.homepage-blocks p { + padding-left: 40px; + padding-right: 40px; + font-size: 18px; + line-height: 1.4; +} +.block.footer-playlibdetails, .block.playlib-copyright, .block.footer-playlibpolicies { + width: 100%; + text-align: left !important; + float: none !important; + clear: both; +} +.block.footer-playlibdetails { + margin-bottom: 25px !important; +} +@media (max-width: 767px) { + .block.footer-playlibdetails { + margin-top: 50px; + } +} +.block.footer-playlibdetails, .block.footer-playlibpolicies { + font-size: 14px !important; + font-family: Arialbold !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + -moz-font-smoothing: grayscale !important; +} +.block.playlib-copyright { + position: relative; +} +.block.playlib-copyright span#at-rate { + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + font-size: 22px !important; + height: 0; + position: relative; + top: 3px; +} +.block.playlib-copyright span#year-lib { + font-family: arial !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; + font-size: 12px !important; +} +.block.block-menu-menu-social-sharing-icons { + position: absolute; + top: 0; + right: 0; +} +@media (max-width: 767px) { + .block.block-menu-menu-social-sharing-icons { + left: 0 !important; + width: 100%; + } +} +.block.block-menu-menu-social-sharing-icons .block-title { + display: none; + border-bottom: none; +} +@media (max-width: 767px) { + .block.block-menu-menu-social-sharing-icons ul.menu { + width: 100%; + max-width: 225px; + margin: 0 auto; + } +} +.block.block-menu-menu-social-sharing-icons ul.menu li { + border-right: none !important; + width: 50px; + float: left; +} +.block.block-menu-menu-social-sharing-icons ul.menu li a { + color: transparent !important; + position: relative; +} +.block.block-menu-menu-social-sharing-icons ul.menu li a:after { + content: ""; + width: 38px; + height: 38px; + display: block; + visibility: visible; + position: absolute; + top: 0; + left: 0; + -webkit-transition-duration: 0.8s; + -moz-transition-duration: 0.8s; + -o-transition-duration: 0.8s; + transition-duration: 0.8s; + -webkit-transition-property: -webkit-transform; + -moz-transition-property: -moz-transform; + -o-transition-property: -o-transform; + transition-property: transform; + border-radius: 100%; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); +} +.block.block-menu-menu-social-sharing-icons ul.menu li a.fb:after { + background: url("../images/libraryzurb/facebook.png") no-repeat; + background-position: center; + background-size: 100%; +} +.block.block-menu-menu-social-sharing-icons ul.menu li a.twit:after { + background: url("../images/libraryzurb/twitter.png") no-repeat; + background-position: center; + background-size: 100%; +} +.block.block-menu-menu-social-sharing-icons ul.menu li a.tmblr:after { + background: url("../images/libraryzurb/tumbir.png") no-repeat; + background-position: center; + background-size: 100%; +} +.block.block-menu-menu-social-sharing-icons ul.menu li a.pntrst:after { + background: url("../images/libraryzurb/pinterest.png") no-repeat; + background-position: center; + background-size: 100%; +} +.block.block-menu-menu-social-sharing-icons ul.menu li a:hover:after { + -webkit-transform: rotate(360deg); + -moz-transform: rotate(360deg); + -ms-transform: rotate(360deg); + -o-transform: rotate(360deg); + transform: rotate(360deg); +} + +.block-title { + font-weight: normal !important; + text-transform: capitalize; +} + +.view.view-media-photos-videos- .view-footer button { + margin-top: 20px; +} + +.owl-carousel { + max-width: 89%; + margin: 0 auto; +} + +/** + * Styles for the Brand area. + */ +.brand a { + /* color: $color_gray_dark; */ +} +.brand a:focus, .brand a:hover { + /* background-color: transparent; + color: $color_gray_dark; */ +} + +#logo { + float: left; + margin: 0.75em 0.5em 0.75em 0; + width: 64px; +} +@media only screen and (max-width: 769px) { + #logo { + width: 64px; + } +} + +#site-name { + font-size: 1.5em; + line-height: 1em; + margin: 0.75em 0 0 0; +} +#site-name a { + color: #fff; + font-size: 36px; + font-family: Pt-seriefbold; +} +@media only screen and (max-width: 769px) { + #site-name { + margin-top: 0.75em; + } +} + +#site-slogan { + font-size: 23px; + line-height: 1em; + margin: 0.25em 0 0 0; + padding-left: 0.25em; + color: #fff; + font-family: Pt-seriefregular; +} + +/** + * Styles for buttons. + */ +button, +.button { + padding: 0.5625em 20px; + background: #fdeb52; + color: #000; + margin-left: 20px; + border: 1px solid #fdeb52; + border-radius: 10px; + font-size: 17px; + text-transform: capitalize; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); +} +button:hover, +.button:hover { + background: #f7fc63; + color: #000; + outline: none; + text-decoration: none; +} +button:focus, button.active, +.button:focus, +.button.active { + background: #f0f811; + color: #000; + outline: none; +} +button a, +.button a { + color: #000; + font-size: 17px; + text-transform: capitalize; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; +} +button a:hover, +.button a:hover { + outline: none; + color: #000; + background: #f7fc63; + text-decoration: none; + border: none !important; + outline: none !important; +} +button a:focus, button a.active, +.button a:focus, +.button a.active { + outline: none; + text-decoration: none; + color: #000; + background: #f0f811; +} + +/* + * Foundation Icons v 3.0 + * Made by ZURB 2013 http://zurb.com/playground/foundation-icon-fonts-3 + * MIT License + */ +@font-face { + font-family: "foundation-icons"; + src: url("../fonts/foundation-icons/foundation-icons.eot"); + src: url("../fonts/foundation-icons/foundation-icons.eot?#iefix") format("embedded-opentype"), url("../fonts/foundation-icons/foundation-icons.woff") format("woff"), url("../fonts/foundation-icons/foundation-icons.ttf") format("truetype"), url("../fonts/foundation-icons/foundation-icons.svg#fontcustom") format("svg"); + font-weight: normal; + font-style: normal; +} +.fi-address-book:before, +.fi-alert:before, +.fi-align-center:before, +.fi-align-justify:before, +.fi-align-left:before, +.fi-align-right:before, +.fi-anchor:before, +.fi-annotate:before, +.fi-archive:before, +.fi-arrow-down:before, +.fi-arrow-left:before, +.fi-arrow-right:before, +.fi-arrow-up:before, +.fi-arrows-compress:before, +.fi-arrows-expand:before, +.fi-arrows-in:before, +.fi-arrows-out:before, +.fi-asl:before, +.fi-asterisk:before, +.fi-at-sign:before, +.fi-background-color:before, +.fi-battery-empty:before, +.fi-battery-full:before, +.fi-battery-half:before, +.fi-bitcoin-circle:before, +.fi-bitcoin:before, +.fi-blind:before, +.fi-bluetooth:before, +.fi-bold:before, +.fi-book-bookmark:before, +.fi-book:before, +.fi-bookmark:before, +.fi-braille:before, +.fi-burst-new:before, +.fi-burst-sale:before, +.fi-burst:before, +.fi-calendar:before, +.fi-camera:before, +.fi-check:before, +.fi-checkbox:before, +.fi-clipboard-notes:before, +.fi-clipboard-pencil:before, +.fi-clipboard:before, +.fi-clock:before, +.fi-closed-caption:before, +.fi-cloud:before, +.fi-comment-minus:before, +.fi-comment-quotes:before, +.fi-comment-video:before, +.fi-comment:before, +.fi-comments:before, +.fi-compass:before, +.fi-contrast:before, +.fi-credit-card:before, +.fi-crop:before, +.fi-crown:before, +.fi-css3:before, +.fi-database:before, +.fi-die-five:before, +.fi-die-four:before, +.fi-die-one:before, +.fi-die-six:before, +.fi-die-three:before, +.fi-die-two:before, +.fi-dislike:before, +.fi-dollar-bill:before, +.fi-dollar:before, +.fi-download:before, +.fi-eject:before, +.fi-elevator:before, +.fi-euro:before, +.fi-eye:before, +.fi-fast-forward:before, +.fi-female-symbol:before, +.fi-female:before, +.fi-filter:before, +.fi-first-aid:before, +.fi-flag:before, +.fi-folder-add:before, +.fi-folder-lock:before, +.fi-folder:before, +.fi-foot:before, +.fi-foundation:before, +.fi-graph-bar:before, +.fi-graph-horizontal:before, +.fi-graph-pie:before, +.fi-graph-trend:before, +.fi-guide-dog:before, +.fi-hearing-aid:before, +.fi-heart:before, +.fi-home:before, +.fi-html5:before, +.fi-indent-less:before, +.fi-indent-more:before, +.fi-info:before, +.fi-italic:before, +.fi-key:before, +.fi-laptop:before, +.fi-layout:before, +.fi-lightbulb:before, +.fi-like:before, +.fi-link:before, +.fi-list-bullet:before, +.fi-list-number:before, +.fi-list-thumbnails:before, +.fi-list:before, +.fi-lock:before, +.fi-loop:before, +.fi-magnifying-glass:before, +.fi-mail:before, +.fi-male-female:before, +.fi-male-symbol:before, +.fi-male:before, +.fi-map:before, +.fi-marker:before, +.fi-megaphone:before, +.fi-microphone:before, +.fi-minus-circle:before, +.fi-minus:before, +.fi-mobile-signal:before, +.fi-mobile:before, +.fi-monitor:before, +.fi-mountains:before, +.fi-music:before, +.fi-next:before, +.fi-no-dogs:before, +.fi-no-smoking:before, +.fi-page-add:before, +.fi-page-copy:before, +.fi-page-csv:before, +.fi-page-delete:before, +.fi-page-doc:before, +.fi-page-edit:before, +.fi-page-export-csv:before, +.fi-page-export-doc:before, +.fi-page-export-pdf:before, +.fi-page-export:before, +.fi-page-filled:before, +.fi-page-multiple:before, +.fi-page-pdf:before, +.fi-page-remove:before, +.fi-page-search:before, +.fi-page:before, +.fi-paint-bucket:before, +.fi-paperclip:before, +.fi-pause:before, +.fi-paw:before, +.fi-paypal:before, +.fi-pencil:before, +.fi-photo:before, +.fi-play-circle:before, +.fi-play-video:before, +.fi-play:before, +.fi-plus:before, +.fi-pound:before, +.fi-power:before, +.fi-previous:before, +.fi-price-tag:before, +.fi-pricetag-multiple:before, +.fi-print:before, +.fi-prohibited:before, +.fi-projection-screen:before, +.fi-puzzle:before, +.fi-quote:before, +.fi-record:before, +.fi-refresh:before, +.fi-results-demographics:before, +.fi-results:before, +.fi-rewind-ten:before, +.fi-rewind:before, +.fi-rss:before, +.fi-safety-cone:before, +.fi-save:before, +.fi-share:before, +.fi-sheriff-badge:before, +.fi-shield:before, +.fi-shopping-bag:before, +.fi-shopping-cart:before, +.fi-shuffle:before, +.fi-skull:before, +.fi-social-500px:before, +.fi-social-adobe:before, +.fi-social-amazon:before, +.fi-social-android:before, +.fi-social-apple:before, +.fi-social-behance:before, +.fi-social-bing:before, +.fi-social-blogger:before, +.fi-social-delicious:before, +.fi-social-designer-news:before, +.fi-social-deviant-art:before, +.fi-social-digg:before, +.fi-social-dribbble:before, +.fi-social-drive:before, +.fi-social-dropbox:before, +.fi-social-evernote:before, +.fi-social-facebook:before, +.fi-social-flickr:before, +.fi-social-forrst:before, +.fi-social-foursquare:before, +.fi-social-game-center:before, +.fi-social-github:before, +.fi-social-google-plus:before, +.fi-social-hacker-news:before, +.fi-social-hi5:before, +.fi-social-instagram:before, +.fi-social-joomla:before, +.fi-social-lastfm:before, +.fi-social-linkedin:before, +.fi-social-medium:before, +.fi-social-myspace:before, +.fi-social-orkut:before, +.fi-social-path:before, +.fi-social-picasa:before, +.fi-social-pinterest:before, +.fi-social-rdio:before, +.fi-social-reddit:before, +.fi-social-skillshare:before, +.fi-social-skype:before, +.fi-social-smashing-mag:before, +.fi-social-snapchat:before, +.fi-social-spotify:before, +.fi-social-squidoo:before, +.fi-social-stack-overflow:before, +.fi-social-steam:before, +.fi-social-stumbleupon:before, +.fi-social-treehouse:before, +.fi-social-tumblr:before, +.fi-social-twitter:before, +.fi-social-vimeo:before, +.fi-social-windows:before, +.fi-social-xbox:before, +.fi-social-yahoo:before, +.fi-social-yelp:before, +.fi-social-youtube:before, +.fi-social-zerply:before, +.fi-social-zurb:before, +.fi-sound:before, +.fi-star:before, +.fi-stop:before, +.fi-strikethrough:before, +.fi-subscript:before, +.fi-superscript:before, +.fi-tablet-landscape:before, +.fi-tablet-portrait:before, +.fi-target-two:before, +.fi-target:before, +.fi-telephone-accessible:before, +.fi-telephone:before, +.fi-text-color:before, +.fi-thumbnails:before, +.fi-ticket:before, +.fi-torso-business:before, +.fi-torso-female:before, +.fi-torso:before, +.fi-torsos-all-female:before, +.fi-torsos-all:before, +.fi-torsos-female-male:before, +.fi-torsos-male-female:before, +.fi-torsos:before, +.fi-trash:before, +.fi-trees:before, +.fi-trophy:before, +.fi-underline:before, +.fi-universal-access:before, +.fi-unlink:before, +.fi-unlock:before, +.fi-upload-cloud:before, +.fi-upload:before, +.fi-usb:before, +.fi-video:before, +.fi-volume-none:before, +.fi-volume-strike:before, +.fi-volume:before, +.fi-web:before, +.fi-wheelchair:before, +.fi-widget:before, +.fi-wrench:before, +.fi-x-circle:before, +.fi-x:before, +.fi-yen:before, +.fi-zoom-in:before, +.fi-zoom-out:before { + font-family: "foundation-icons"; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + -webkit-font-smoothing: antialiased; + display: inline-block; + text-decoration: inherit; +} + +.fi-address-book:before { + content: "\f100"; +} + +.fi-alert:before { + content: "\f101"; +} + +.fi-align-center:before { + content: "\f102"; +} + +.fi-align-justify:before { + content: "\f103"; +} + +.fi-align-left:before { + content: "\f104"; +} + +.fi-align-right:before { + content: "\f105"; +} + +.fi-anchor:before { + content: "\f106"; +} + +.fi-annotate:before { + content: "\f107"; +} + +.fi-archive:before { + content: "\f108"; +} + +.fi-arrow-down:before { + content: "\f109"; +} + +.fi-arrow-left:before { + content: "\f10a"; +} + +.fi-arrow-right:before { + content: "\f10b"; +} + +.fi-arrow-up:before { + content: "\f10c"; +} + +.fi-arrows-compress:before { + content: "\f10d"; +} + +.fi-arrows-expand:before { + content: "\f10e"; +} + +.fi-arrows-in:before { + content: "\f10f"; +} + +.fi-arrows-out:before { + content: "\f110"; +} + +.fi-asl:before { + content: "\f111"; +} + +.fi-asterisk:before { + content: "\f112"; +} + +.fi-at-sign:before { + content: "\f113"; +} + +.fi-background-color:before { + content: "\f114"; +} + +.fi-battery-empty:before { + content: "\f115"; +} + +.fi-battery-full:before { + content: "\f116"; +} + +.fi-battery-half:before { + content: "\f117"; +} + +.fi-bitcoin-circle:before { + content: "\f118"; +} + +.fi-bitcoin:before { + content: "\f119"; +} + +.fi-blind:before { + content: "\f11a"; +} + +.fi-bluetooth:before { + content: "\f11b"; +} + +.fi-bold:before { + content: "\f11c"; +} + +.fi-book-bookmark:before { + content: "\f11d"; +} + +.fi-book:before { + content: "\f11e"; +} + +.fi-bookmark:before { + content: "\f11f"; +} + +.fi-braille:before { + content: "\f120"; +} + +.fi-burst-new:before { + content: "\f121"; +} + +.fi-burst-sale:before { + content: "\f122"; +} + +.fi-burst:before { + content: "\f123"; +} + +.fi-calendar:before { + content: "\f124"; +} + +.fi-camera:before { + content: "\f125"; +} + +.fi-check:before { + content: "\f126"; +} + +.fi-checkbox:before { + content: "\f127"; +} + +.fi-clipboard-notes:before { + content: "\f128"; +} + +.fi-clipboard-pencil:before { + content: "\f129"; +} + +.fi-clipboard:before { + content: "\f12a"; +} + +.fi-clock:before { + content: "\f12b"; +} + +.fi-closed-caption:before { + content: "\f12c"; +} + +.fi-cloud:before { + content: "\f12d"; +} + +.fi-comment-minus:before { + content: "\f12e"; +} + +.fi-comment-quotes:before { + content: "\f12f"; +} + +.fi-comment-video:before { + content: "\f130"; +} + +.fi-comment:before { + content: "\f131"; +} + +.fi-comments:before { + content: "\f132"; +} + +.fi-compass:before { + content: "\f133"; +} + +.fi-contrast:before { + content: "\f134"; +} + +.fi-credit-card:before { + content: "\f135"; +} + +.fi-crop:before { + content: "\f136"; +} + +.fi-crown:before { + content: "\f137"; +} + +.fi-css3:before { + content: "\f138"; +} + +.fi-database:before { + content: "\f139"; +} + +.fi-die-five:before { + content: "\f13a"; +} + +.fi-die-four:before { + content: "\f13b"; +} + +.fi-die-one:before { + content: "\f13c"; +} + +.fi-die-six:before { + content: "\f13d"; +} + +.fi-die-three:before { + content: "\f13e"; +} + +.fi-die-two:before { + content: "\f13f"; +} + +.fi-dislike:before { + content: "\f140"; +} + +.fi-dollar-bill:before { + content: "\f141"; +} + +.fi-dollar:before { + content: "\f142"; +} + +.fi-download:before { + content: "\f143"; +} + +.fi-eject:before { + content: "\f144"; +} + +.fi-elevator:before { + content: "\f145"; +} + +.fi-euro:before { + content: "\f146"; +} + +.fi-eye:before { + content: "\f147"; +} + +.fi-fast-forward:before { + content: "\f148"; +} + +.fi-female-symbol:before { + content: "\f149"; +} + +.fi-female:before { + content: "\f14a"; +} + +.fi-filter:before { + content: "\f14b"; +} + +.fi-first-aid:before { + content: "\f14c"; +} + +.fi-flag:before { + content: "\f14d"; +} + +.fi-folder-add:before { + content: "\f14e"; +} + +.fi-folder-lock:before { + content: "\f14f"; +} + +.fi-folder:before { + content: "\f150"; +} + +.fi-foot:before { + content: "\f151"; +} + +.fi-foundation:before { + content: "\f152"; +} + +.fi-graph-bar:before { + content: "\f153"; +} + +.fi-graph-horizontal:before { + content: "\f154"; +} + +.fi-graph-pie:before { + content: "\f155"; +} + +.fi-graph-trend:before { + content: "\f156"; +} + +.fi-guide-dog:before { + content: "\f157"; +} + +.fi-hearing-aid:before { + content: "\f158"; +} + +.fi-heart:before { + content: "\f159"; +} + +.fi-home:before { + content: "\f15a"; +} + +.fi-html5:before { + content: "\f15b"; +} + +.fi-indent-less:before { + content: "\f15c"; +} + +.fi-indent-more:before { + content: "\f15d"; +} + +.fi-info:before { + content: "\f15e"; +} + +.fi-italic:before { + content: "\f15f"; +} + +.fi-key:before { + content: "\f160"; +} + +.fi-laptop:before { + content: "\f161"; +} + +.fi-layout:before { + content: "\f162"; +} + +.fi-lightbulb:before { + content: "\f163"; +} + +.fi-like:before { + content: "\f164"; +} + +.fi-link:before { + content: "\f165"; +} + +.fi-list-bullet:before { + content: "\f166"; +} + +.fi-list-number:before { + content: "\f167"; +} + +.fi-list-thumbnails:before { + content: "\f168"; +} + +.fi-list:before { + content: "\f169"; +} + +.fi-lock:before { + content: "\f16a"; +} + +.fi-loop:before { + content: "\f16b"; +} + +.fi-magnifying-glass:before { + content: "\f16c"; +} + +.fi-mail:before { + content: "\f16d"; +} + +.fi-male-female:before { + content: "\f16e"; +} + +.fi-male-symbol:before { + content: "\f16f"; +} + +.fi-male:before { + content: "\f170"; +} + +.fi-map:before { + content: "\f171"; +} + +.fi-marker:before { + content: "\f172"; +} + +.fi-megaphone:before { + content: "\f173"; +} + +.fi-microphone:before { + content: "\f174"; +} + +.fi-minus-circle:before { + content: "\f175"; +} + +.fi-minus:before { + content: "\f176"; +} + +.fi-mobile-signal:before { + content: "\f177"; +} + +.fi-mobile:before { + content: "\f178"; +} + +.fi-monitor:before { + content: "\f179"; +} + +.fi-mountains:before { + content: "\f17a"; +} + +.fi-music:before { + content: "\f17b"; +} + +.fi-next:before { + content: "\f17c"; +} + +.fi-no-dogs:before { + content: "\f17d"; +} + +.fi-no-smoking:before { + content: "\f17e"; +} + +.fi-page-add:before { + content: "\f17f"; +} + +.fi-page-copy:before { + content: "\f180"; +} + +.fi-page-csv:before { + content: "\f181"; +} + +.fi-page-delete:before { + content: "\f182"; +} + +.fi-page-doc:before { + content: "\f183"; +} + +.fi-page-edit:before { + content: "\f184"; +} + +.fi-page-export-csv:before { + content: "\f185"; +} + +.fi-page-export-doc:before { + content: "\f186"; +} + +.fi-page-export-pdf:before { + content: "\f187"; +} + +.fi-page-export:before { + content: "\f188"; +} + +.fi-page-filled:before { + content: "\f189"; +} + +.fi-page-multiple:before { + content: "\f18a"; +} + +.fi-page-pdf:before { + content: "\f18b"; +} + +.fi-page-remove:before { + content: "\f18c"; +} + +.fi-page-search:before { + content: "\f18d"; +} + +.fi-page:before { + content: "\f18e"; +} + +.fi-paint-bucket:before { + content: "\f18f"; +} + +.fi-paperclip:before { + content: "\f190"; +} + +.fi-pause:before { + content: "\f191"; +} + +.fi-paw:before { + content: "\f192"; +} + +.fi-paypal:before { + content: "\f193"; +} + +.fi-pencil:before { + content: "\f194"; +} + +.fi-photo:before { + content: "\f195"; +} + +.fi-play-circle:before { + content: "\f196"; +} + +.fi-play-video:before { + content: "\f197"; +} + +.fi-play:before { + content: "\f198"; +} + +.fi-plus:before { + content: "\f199"; +} + +.fi-pound:before { + content: "\f19a"; +} + +.fi-power:before { + content: "\f19b"; +} + +.fi-previous:before { + content: "\f19c"; +} + +.fi-price-tag:before { + content: "\f19d"; +} + +.fi-pricetag-multiple:before { + content: "\f19e"; +} + +.fi-print:before { + content: "\f19f"; +} + +.fi-prohibited:before { + content: "\f1a0"; +} + +.fi-projection-screen:before { + content: "\f1a1"; +} + +.fi-puzzle:before { + content: "\f1a2"; +} + +.fi-quote:before { + content: "\f1a3"; +} + +.fi-record:before { + content: "\f1a4"; +} + +.fi-refresh:before { + content: "\f1a5"; +} + +.fi-results-demographics:before { + content: "\f1a6"; +} + +.fi-results:before { + content: "\f1a7"; +} + +.fi-rewind-ten:before { + content: "\f1a8"; +} + +.fi-rewind:before { + content: "\f1a9"; +} + +.fi-rss:before { + content: "\f1aa"; +} + +.fi-safety-cone:before { + content: "\f1ab"; +} + +.fi-save:before { + content: "\f1ac"; +} + +.fi-share:before { + content: "\f1ad"; +} + +.fi-sheriff-badge:before { + content: "\f1ae"; +} + +.fi-shield:before { + content: "\f1af"; +} + +.fi-shopping-bag:before { + content: "\f1b0"; +} + +.fi-shopping-cart:before { + content: "\f1b1"; +} + +.fi-shuffle:before { + content: "\f1b2"; +} + +.fi-skull:before { + content: "\f1b3"; +} + +.fi-social-500px:before { + content: "\f1b4"; +} + +.fi-social-adobe:before { + content: "\f1b5"; +} + +.fi-social-amazon:before { + content: "\f1b6"; +} + +.fi-social-android:before { + content: "\f1b7"; +} + +.fi-social-apple:before { + content: "\f1b8"; +} + +.fi-social-behance:before { + content: "\f1b9"; +} + +.fi-social-bing:before { + content: "\f1ba"; +} + +.fi-social-blogger:before { + content: "\f1bb"; +} + +.fi-social-delicious:before { + content: "\f1bc"; +} + +.fi-social-designer-news:before { + content: "\f1bd"; +} + +.fi-social-deviant-art:before { + content: "\f1be"; +} + +.fi-social-digg:before { + content: "\f1bf"; +} + +.fi-social-dribbble:before { + content: "\f1c0"; +} + +.fi-social-drive:before { + content: "\f1c1"; +} + +.fi-social-dropbox:before { + content: "\f1c2"; +} + +.fi-social-evernote:before { + content: "\f1c3"; +} + +.fi-social-facebook:before { + content: "\f1c4"; +} + +.fi-social-flickr:before { + content: "\f1c5"; +} + +.fi-social-forrst:before { + content: "\f1c6"; +} + +.fi-social-foursquare:before { + content: "\f1c7"; +} + +.fi-social-game-center:before { + content: "\f1c8"; +} + +.fi-social-github:before { + content: "\f1c9"; +} + +.fi-social-google-plus:before { + content: "\f1ca"; +} + +.fi-social-hacker-news:before { + content: "\f1cb"; +} + +.fi-social-hi5:before { + content: "\f1cc"; +} + +.fi-social-instagram:before { + content: "\f1cd"; +} + +.fi-social-joomla:before { + content: "\f1ce"; +} + +.fi-social-lastfm:before { + content: "\f1cf"; +} + +.fi-social-linkedin:before { + content: "\f1d0"; +} + +.fi-social-medium:before { + content: "\f1d1"; +} + +.fi-social-myspace:before { + content: "\f1d2"; +} + +.fi-social-orkut:before { + content: "\f1d3"; +} + +.fi-social-path:before { + content: "\f1d4"; +} + +.fi-social-picasa:before { + content: "\f1d5"; +} + +.fi-social-pinterest:before { + content: "\f1d6"; +} + +.fi-social-rdio:before { + content: "\f1d7"; +} + +.fi-social-reddit:before { + content: "\f1d8"; +} + +.fi-social-skillshare:before { + content: "\f1d9"; +} + +.fi-social-skype:before { + content: "\f1da"; +} + +.fi-social-smashing-mag:before { + content: "\f1db"; +} + +.fi-social-snapchat:before { + content: "\f1dc"; +} + +.fi-social-spotify:before { + content: "\f1dd"; +} + +.fi-social-squidoo:before { + content: "\f1de"; +} + +.fi-social-stack-overflow:before { + content: "\f1df"; +} + +.fi-social-steam:before { + content: "\f1e0"; +} + +.fi-social-stumbleupon:before { + content: "\f1e1"; +} + +.fi-social-treehouse:before { + content: "\f1e2"; +} + +.fi-social-tumblr:before { + content: "\f1e3"; +} + +.fi-social-twitter:before { + content: "\f1e4"; +} + +.fi-social-vimeo:before { + content: "\f1e5"; +} + +.fi-social-windows:before { + content: "\f1e6"; +} + +.fi-social-xbox:before { + content: "\f1e7"; +} + +.fi-social-yahoo:before { + content: "\f1e8"; +} + +.fi-social-yelp:before { + content: "\f1e9"; +} + +.fi-social-youtube:before { + content: "\f1ea"; +} + +.fi-social-zerply:before { + content: "\f1eb"; +} + +.fi-social-zurb:before { + content: "\f1ec"; +} + +.fi-sound:before { + content: "\f1ed"; +} + +.fi-star:before { + content: "\f1ee"; +} + +.fi-stop:before { + content: "\f1ef"; +} + +.fi-strikethrough:before { + content: "\f1f0"; +} + +.fi-subscript:before { + content: "\f1f1"; +} + +.fi-superscript:before { + content: "\f1f2"; +} + +.fi-tablet-landscape:before { + content: "\f1f3"; +} + +.fi-tablet-portrait:before { + content: "\f1f4"; +} + +.fi-target-two:before { + content: "\f1f5"; +} + +.fi-target:before { + content: "\f1f6"; +} + +.fi-telephone-accessible:before { + content: "\f1f7"; +} + +.fi-telephone:before { + content: "\f1f8"; +} + +.fi-text-color:before { + content: "\f1f9"; +} + +.fi-thumbnails:before { + content: "\f1fa"; +} + +.fi-ticket:before { + content: "\f1fb"; +} + +.fi-torso-business:before { + content: "\f1fc"; +} + +.fi-torso-female:before { + content: "\f1fd"; +} + +.fi-torso:before { + content: "\f1fe"; +} + +.fi-torsos-all-female:before { + content: "\f1ff"; +} + +.fi-torsos-all:before { + content: "\f200"; +} + +.fi-torsos-female-male:before { + content: "\f201"; +} + +.fi-torsos-male-female:before { + content: "\f202"; +} + +.fi-torsos:before { + content: "\f203"; +} + +.fi-trash:before { + content: "\f204"; +} + +.fi-trees:before { + content: "\f205"; +} + +.fi-trophy:before { + content: "\f206"; +} + +.fi-underline:before { + content: "\f207"; +} + +.fi-universal-access:before { + content: "\f208"; +} + +.fi-unlink:before { + content: "\f209"; +} + +.fi-unlock:before { + content: "\f20a"; +} + +.fi-upload-cloud:before { + content: "\f20b"; +} + +.fi-upload:before { + content: "\f20c"; +} + +.fi-usb:before { + content: "\f20d"; +} + +.fi-video:before { + content: "\f20e"; +} + +.fi-volume-none:before { + content: "\f20f"; +} + +.fi-volume-strike:before { + content: "\f210"; +} + +.fi-volume:before { + content: "\f211"; +} + +.fi-web:before { + content: "\f212"; +} + +.fi-wheelchair:before { + content: "\f213"; +} + +.fi-widget:before { + content: "\f214"; +} + +.fi-wrench:before { + content: "\f215"; +} + +.fi-x-circle:before { + content: "\f216"; +} + +.fi-x:before { + content: "\f217"; +} + +.fi-yen:before { + content: "\f218"; +} + +.fi-zoom-in:before { + content: "\f219"; +} + +.fi-zoom-out:before { + content: "\f21a"; +} + +html { + background: #efefef; +} + +body { + width: 100%; + height: 100%; + font-family: arial !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; + -webkit-font-smoothing: antialiased; + font-size: 18px; + line-height: 1.5; + color: #000; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + background: #fff; +} +body.front, body.not-front { + max-width: 1280px; + margin: 0 auto; +} +body .main { + margin-top: -5px; +} +body input[type="password"] { + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; +} +body .alert-box.success { + opacity: 1; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; +} +body .alert-box.success a { + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + opacity: 1; + color: #cc0d25 !important; +} +body .alert-box.success a.close { + color: #fff !important; + opacity: 1; +} +body .alert-box.success a.close:hover { + text-decoration: none !important; +} + +.row.l-main { + max-width: 94.6%; +} +@media screen and (max-width: 767px) { + .row.l-main { + max-width: 91.8%; + } +} + +@media screen and (min-width: 1026px) { + .large-3 { + width: 31.87%; + } +} +@media only screen and (min-width: 768px) and (max-width: 1025px) { + .large-3 { + width: 38%; + padding-left: 0; + padding-right: 0; + } +} +@media screen and (max-width: 767px) { + .large-3 { + width: 100%; + display: inline-block; + } +} + +@media screen and (min-width: 1026px) { + .large-9 { + width: 68.12%; + } +} +@media only screen and (min-width: 768px) and (max-width: 1025px) { + .large-9 { + width: 62%; + padding-left: 0; + padding-right: 0; + } +} +@media screen and (max-width: 767px) { + .large-9 { + width: 100%; + display: inline-block; + } +} + +@media screen and (min-width: 1026px) { + .pull-9 { + right: 68.4%; + } +} +@media only screen and (min-width: 768px) and (max-width: 1025px) { + .pull-9 { + right: 63.4%; + } +} +@media screen and (max-width: 767px) { + .pull-9 { + right: 0; + } +} + +@media screen and (min-width: 1026px) { + .push-3 { + left: 31.9%; + } +} +@media only screen and (min-width: 768px) and (max-width: 1025px) { + .push-3 { + left: 38.9%; + } +} +@media screen and (max-width: 767px) { + .push-3 { + left: 0; + } +} + +@media screen and (max-width: 767px) { + .main.columns, .sidebar-first.columns { + padding-left: 0; + padding-right: 0; + } +} + +/**open single msg**/ +.page-messages-view .privatemsg-message-participants { + width: 100%; + max-width: 80%; + margin: 0 auto; + color: #000; + border: none !important; + outline: none !important; +} +.page-messages-view .privatemsg-message-participants a.username { + color: #fff; + padding-left: 5px; +} +.page-messages-view .privatemsg-message { + max-width: 80%; + margin: 0 auto; +} +.page-messages-view .privatemsg-message .privatemsg-message-information { + border: none !important; + outline: none !important; +} +.page-messages-view .privatemsg-message .privatemsg-message-information .privatemsg-author-name { + position: relative; + padding-left: 30px; +} +.page-messages-view .privatemsg-message .privatemsg-message-information .privatemsg-author-name:before { + content: ""; + width: 47px; + height: 21px; + display: block; + visibility: visible; + position: absolute; + top: -3px; + left: 0; + background: url("../images/libraryzurb/arrow-list.png") no-repeat; +} +.page-messages-view .privatemsg-message .privatemsg-message-information a.username { + color: #000; +} +.page-messages-view .privatemsg-message .privatemsg-message-information span.privatemsg-message-date { + color: #fff; +} +.page-messages-view .privatemsg-message .privatemsg-message-information ul { + list-style: none; + margin-top: 1.25em; +} +.page-messages-view .privatemsg-message .privatemsg-message-information ul li a { + color: #000; + padding: 5px 20px; + background: #fdeb52; + border-radius: 10px; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); +} +.page-messages-view .privatemsg-message .privatemsg-message-information ul li a:hover { + text-decoration: none; +} +.page-messages-view .privatemsg-message .privatemsg-message-body p a { + color: #000; +} +.page-messages-view .privatemsg-reply { + color: #fff; + border: none !important; + outline: none !important; +} +.page-messages-view .form-submit { + margin-top: 10px !important; +} + +/**end**/ +/**css for photos n vedios page***/ +.section-media .block-title { + font-size: 28px; + color: #000; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + border: none !important; + outline: none !important; +} +.section-media .block-views-media-photos-videos-block-6 .view .views-row { + width: 32%; +} +@media (max-width: 767px) { + .section-media .block-views-media-photos-videos-block-6 .view .views-row { + width: 100%; + } +} +.section-media .block-views-media-photos-videos-block-3 .view .views-row { + width: 24%; +} +@media (max-width: 767px) { + .section-media .block-views-media-photos-videos-block-3 .view .views-row { + width: 100%; + } +} +@media (min-width: 768px) and (max-width: 1025px) { + .section-media .block-views-media-photos-videos-block-3 .view .views-row { + width: 32%; + } +} +.section-media .main .view { + display: table; + width: 100%; +} +.section-media .main .view .views-row { + display: table-row; + float: left; + padding-left: 1%; + clear: none !important; +} +@media (max-width: 767px) { + .section-media .main .view .views-row { + padding-left: 0; + } +} +.section-media .main .view .views-row .flickr-photoset-img { + text-align: center; +} +.section-media .main .view .views-row .flickr-photoset-img img { + width: 160px; + height: 160px; +} +.section-media .main .view .views-row .flickr-photoset-img img:hover { + transform: none; + top: 0; +} +.section-media .main .view .views-row .flickr-citation { + margin-top: 23px; + margin-bottom: 35px; + text-align: center; +} +.section-media .main .view .views-row .flickr-citation a { + color: transparent; + position: relative; + display: inline-block; + width: 80%; +} +@media (min-width: 768px) and (max-width: 1025px) { + .section-media .main .view .views-row .flickr-citation a { + width: 139px; + } +} +.section-media .main .view .views-row .flickr-citation a:after { + content: "view album"; + height: 38px; + line-height: 40px; + width: 100%; + background: #fdeb52 url("../images/libraryzurb/view-album.png") no-repeat; + color: #000; + border-radius: 10px; + text-align: center; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + text-transform: capitalize; + position: absolute; + top: 0; + left: 0; + text-align: right; + padding-right: 20px; +} +@media (min-width: 1026px) { + .section-media .main .view .views-row .flickr-citation a:after { + background-position: 37px center !important; + } +} +@media (min-width: 768px) and (max-width: 1025px) { + .section-media .main .view .views-row .flickr-citation a:after { + padding-right: 5px; + background-position: 8px center !important; + background-size: 17px !important; + } +} +.section-media .main .view .views-row .flickr-citation a:hover:after { + background: #f7fc63 url("../images/libraryzurb/view-album.png") no-repeat; +} +.section-media .main .view .views-row .flickr-citation a:focus:after { + background: #f0f811 url("../images/libraryzurb/view-album.png") no-repeat; +} +.section-media .main .view .views-row .views-field-field-video-description .views-label { + display: none; +} +.section-media .main .view .views-row .views-field-field-video-description .field-content { + padding-top: 10px; + font-size: 12px; + line-height: 1; + font-family: arial !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; +} +.section-media .main .view .view-footer { + width: 100%; + display: inline-block; +} + +/**end photos n vedios***/ +/**css for reward page***/ +.page-rewards .pull-9.sidebar { + width: 29.53%; + right: 69.4%; + padding: 35px 2.65% 0px; + margin-bottom: 25px; + background: #267fda !important; + overflow: hidden; + border-radius: 20px; + color: #fff; + position: relative; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); +} +@media (max-width: 767px) { + .page-rewards .pull-9.sidebar { + width: 100%; + right: 0; + } +} +@media (min-width: 768px) and (max-width: 1025px) { + .page-rewards .pull-9.sidebar { + width: 38%; + right: 63.4%; + } +} +.page-rewards .pull-9.sidebar .block .block-title, .page-rewards .pull-9.sidebar .block .view-header, .page-rewards .pull-9.sidebar .block .view-header p { + font-size: 22px; + color: #fff !important; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; +} +.page-rewards .pull-9.sidebar .block.block-views-my-rewards-block .views-field-field-image-upload { + float: left; + display: table-row; + margin-right: 19px; +} +.page-rewards .pull-9.sidebar .block.block-views-my-badges-block-1 .view { + display: table; + width: 100%; + counter-reset: section; +} +.page-rewards .pull-9.sidebar .block.block-views-my-badges-block-1 .view .views-row { + display: table-row; + width: 100%; +} +.page-rewards .pull-9.sidebar .block.block-views-my-badges-block-1 .view .views-row .views-field { + display: table-cell; + vertical-align: middle; +} +.page-rewards .pull-9.sidebar .block.block-views-my-badges-block-1 .view .views-row .views-field.views-field-field-badge-image { + padding-right: 10px; + position: relative; +} +.page-rewards .pull-9.sidebar .block.block-views-my-badges-block-1 .view .views-row .views-field.views-field-field-badge-image:before { + /* @include counter; + position: absolute; + left: -14px; + top: 15px; */ +} +.page-rewards .pull-9.sidebar .block.block-views-my-badges-block-1 .view .views-row .views-field.views-field-title { + padding-left: 10px; +} +.page-rewards .pull-9.sidebar .block .views-row .views-field-nothing .badges img { + float: left; + margin: 0.5em 1em 0.5em 0; +} +.page-rewards .main #page-title { + display: none; +} +.page-rewards .main .view-badges .view-header h2 { + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + font-size: 28px; + color: #000; + border: none !important; + outline: none !important; +} +.page-rewards .main .view-badges .view-content div.badges img { + margin-right: 6%; +} +.page-rewards .main .block .block-title { + border: none !important; + outline: none !important; + font-size: 18px; + color: #f6511d; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; +} +.page-rewards .main .block .view { + display: table; + width: 100%; +} +.page-rewards .main .block .view .view-content { + display: table-row; + width: 100%; +} +.page-rewards .main .block .view .view-content .views-row { + display: table-cell; + padding-right: 10px; +} +@media (min-width: 768px) and (max-width: 1025px) { + .page-rewards .main .block .view .view-content .views-row { + display: inline-block; + width: 19%; + vertical-align: top; + } +} +.page-rewards .main .block .view .view-content .views-row .views-field { + width: 100%; + display: inline-block; + font-family: 17px; + font-family: arial !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; +} + +/**end css of reward page**/ +/**css for reward-winner page**/ +.page-node-add .block-system form .form-textarea-wrapper table tbody tr td.mceIframeContainer { + position: relative; + padding-bottom: 56.25%; + height: 0; + overflow: hidden; + max-width: 100%; +} +.page-node-add .block-system form .form-textarea-wrapper table tbody tr td.mceIframeContainer iframe, .page-node-add .block-system form .form-textarea-wrapper table tbody tr td.mceIframeContainer object, .page-node-add .block-system form .form-textarea-wrapper table tbody tr td.mceIframeContainer embed { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.page-reward-winners { + font-family: arial !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; +} +.page-reward-winners #page-title { + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; +} +.page-reward-winners table { + width: 100% !important; +} + +/**end reward-winners page**/ +/**css for program page***/ +/**css for unauthenticated program page***/ +.not-logged-in.section-programs .pull-9.sidebar { + right: 70.4%; +} +@media (max-width: 767px) { + .not-logged-in.section-programs .pull-9.sidebar { + right: 0; + } +} +@media (min-width: 768px) and (max-width: 1025px) { + .not-logged-in.section-programs .pull-9.sidebar { + width: 38%; + right: 63.4%; + padding-left: 2%; + padding-right: 2%; + } +} +.not-logged-in.section-programs .block-views-reward-earn-block-1 .block-title:after { + background: none; +} + +/*end unauthenticated program page css**/ +/**css for authunticated program page***/ +.logged-in.section-programs .block-views-reward-earn-block-1 { + display: none; +} +.logged-in.section-programs .pull-9.sidebar { + width: 29.53%; + right: 69.4%; + padding-left: 2.65%; + padding-right: 2.65%; + margin-bottom: 35px; +} +@media (max-width: 767px) { + .logged-in.section-programs .pull-9.sidebar { + width: 100%; + right: 0; + } +} +@media (min-width: 768px) and (max-width: 1025px) { + .logged-in.section-programs .pull-9.sidebar { + width: 38%; + right: 63.4%; + padding-left: 2%; + padding-right: 2%; + } +} +@media (max-width: 767px) { + .logged-in.section-programs .pull-9.sidebar { + margin-bottom: 25px; + } +} +.logged-in.section-programs .sidebar { + background: #267fda; + color: #fff; + padding-top: 25px; + padding-bottom: 25px; + border-radius: 20px; +} +.logged-in.section-programs .sidebar .block .block-title { + color: #fff; + font-size: 22px; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; +} +.logged-in.section-programs .sidebar .block .view .views-field-title a { + color: #fff; + font-size: 17px; + font-family: arial !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; +} +.logged-in.section-programs .sidebar .block.block-auto-role-allocation { + position: relative; +} +.logged-in.section-programs .sidebar .block.block-auto-role-allocation > div { + display: inline-block; +} +.logged-in.section-programs .sidebar .block.block-auto-role-allocation > div > div a { + width: 100%; + display: inline-block; + position: relative; + margin-top: 80px; +} +@media (min-width: 1026px) { + .logged-in.section-programs .sidebar .block.block-auto-role-allocation > div > div a { + color: #000; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + border-radius: 10px; + background: #fdeb52 !important; + text-transform: capitalize; + border: none; + padding: 0.5625em 20px; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + } + .logged-in.section-programs .sidebar .block.block-auto-role-allocation > div > div a:hover { + color: #000; + background: #f7fc63 !important; + opacity: 1; + outline: none; + text-decoration: none !important; + } + .logged-in.section-programs .sidebar .block.block-auto-role-allocation > div > div a:focus, .logged-in.section-programs .sidebar .block.block-auto-role-allocation > div > div a.active { + color: #000; + background: #f0f811 !important; + outline: 1; + opacity: 1; + text-decoration: none !important; + } +} +@media (max-width: 767px) { + .logged-in.section-programs .sidebar .block.block-auto-role-allocation > div > div a { + color: #000; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + border-radius: 10px; + background: #fdeb52 !important; + text-transform: capitalize; + border: none; + padding: 0.5625em 20px; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + } + .logged-in.section-programs .sidebar .block.block-auto-role-allocation > div > div a:hover { + color: #000; + background: #f7fc63 !important; + opacity: 1; + outline: none; + text-decoration: none !important; + } + .logged-in.section-programs .sidebar .block.block-auto-role-allocation > div > div a:focus, .logged-in.section-programs .sidebar .block.block-auto-role-allocation > div > div a.active { + color: #000; + background: #f0f811 !important; + outline: 1; + opacity: 1; + text-decoration: none !important; + } +} +@media (min-width: 768px) and (max-width: 1025px) { + .logged-in.section-programs .sidebar .block.block-auto-role-allocation > div > div a { + color: #000; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + border-radius: 10px; + background: #fdeb52 !important; + text-transform: capitalize; + border: none; + padding: 0.5625em 10px; + word-spacing: -2px; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + } + .logged-in.section-programs .sidebar .block.block-auto-role-allocation > div > div a:hover { + color: #000; + background: #f7fc63 !important; + opacity: 1; + outline: none; + text-decoration: none !important; + } + .logged-in.section-programs .sidebar .block.block-auto-role-allocation > div > div a:focus, .logged-in.section-programs .sidebar .block.block-auto-role-allocation > div > div a.active { + color: #000; + background: #f0f811 !important; + outline: 1; + opacity: 1; + text-decoration: none !important; + } +} +.logged-in.section-programs .sidebar .block.block-auto-role-allocation span { + padding-left: 32%; + font-family: Arialbold !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + -moz-font-smoothing: grayscale !important; + font-size: 17px; +} +.logged-in.section-programs .sidebar .block.block-auto-role-allocation div.days-left, .logged-in.section-programs .sidebar .block.block-auto-role-allocation div.all_rewrad_won { + padding-left: 32%; + line-height: 1; +} +.logged-in.section-programs .sidebar .block.block-auto-role-allocation:before { + content: ""; + width: 100px; + height: 100px; + display: block; + visibility: visible; + position: absolute; + top: 19px; + left: 0; + background: url("../images/libraryzurb/white-calender.png") no-repeat; + background-position: left; +} + +/**end css authenticated program page**/ +.section-programs .pull-9.sidebar2 { + width: 29.53%; + right: 71.4%; + padding-left: 0; + padding-right: 0; +} +.section-programs .main .current-program { + background: #267fda; + overflow: hidden; + border-radius: 20px; + color: #fff; + position: relative; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); +} +.section-programs .main .current-program .block-title, .section-programs .main .current-program h2 { + color: #fff; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + padding-top: 26px; + padding-bottom: 25px; + font-size: 28px; + height: 110px; + border-bottom: medium none; + margin-top: -1px; + padding-left: 36px; + z-index: 0; + position: relative; + font-weight: normal !important; + border-radius: 20px; + overflow: hidden; +} +@media (max-width: 767px) { + .section-programs .main .current-program .block-title, .section-programs .main .current-program h2 { + font-size: 22px; + } +} +.section-programs .main .current-program .block-title:after, .section-programs .main .current-program h2:after { + content: ""; + width: 100%; + height: 110px; + display: block; + visibility: visible; + position: absolute; + top: 0; + left: 0; + background: url("../images/libraryzurb/background-saffron.png") no-repeat; + background-position: -35px 10px; + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -ms-transform: rotate(180deg); + -o-transform: rotate(180deg); + transform: rotate(180deg); + z-index: -1; +} +.section-programs .main .current-program .view { + display: inline-block; + width: 100%; + padding: 10px 4%; +} +.section-programs .main .current-program .view .view-content { + display: table; + width: 100%; +} +.section-programs .main .current-program .view .views-row { + display: table-row; + width: 100%; +} +.section-programs .main .current-program .view .views-row .views-field.views-field-field-program-image { + width: 20%; + display: table-cell; + vertical-align: middle; + float: none !important; +} +.section-programs .main .current-program .view .views-row .views-field.views-field-body { + width: 78%; + padding-left: 2%; + display: table-cell; + float: none !important; + font-family: arial !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; + font-size: 17px; +} +.section-programs .main .current-program .view .views-row .views-field.views-field-title, .section-programs .main .current-program .view .views-row .views-field.views-field-field-sign-up { + display: none; +} +.section-programs .main .view .view-header, .section-programs .main .view .view-header p { + font-size: 28px !important; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + color: #000; +} +.section-programs .main .view .view-content .views-row { + display: table; + width: 100%; +} +.section-programs .main .view .view-content .views-row .views-field { + display: table-row; + padding-bottom: 23px; +} +.section-programs .main .view .view-content .views-row .views-field.views-field-field-program-image { + width: 20%; + float: left; +} +.section-programs .main .view .view-content .views-row .views-field.views-field-title, .section-programs .main .view .view-content .views-row .views-field.views-field-field-sign-up, .section-programs .main .view .view-content .views-row .views-field.views-field-body { + width: 78%; + float: right; +} +.section-programs .main .view .view-content .views-row .views-field.views-field-title { + padding-bottom: 23px; +} +.section-programs .main .view .view-content .views-row .views-field.views-field-title a { + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + color: #f6511d; + font-size: 20px; +} +.section-programs .main .view .view-content .views-row .views-field.views-field-body { + font-size: 18px; + font-family: arial !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; + line-height: 1.4; +} +.section-programs .main .view .view-content .views-row .views-field.views-field-field-sign-up a { + color: #000; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + border-radius: 10px; + background: #fdeb52 !important; + text-transform: capitalize; + border: none; + padding: 0.5625em 20px; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); +} +.section-programs .main .view .view-content .views-row .views-field.views-field-field-sign-up a:hover { + color: #000; + background: #f7fc63 !important; + opacity: 1; + outline: none; + text-decoration: none !important; +} +.section-programs .main .view .view-content .views-row .views-field.views-field-field-sign-up a:focus, .section-programs .main .view .view-content .views-row .views-field.views-field-field-sign-up a.active { + color: #000; + background: #f0f811 !important; + outline: 1; + opacity: 1; + text-decoration: none !important; +} + +/**end css of program page**/ +/**common css for patraon dashboard page**/ +.page-user-profile .main { + padding-left: 0; + padding-right: 0; +} +.page-user-profile .homebox { + width: 100%; + max-width: 94.6%; + margin: 34px auto; +} +@media (max-width: 767px) { + .page-user-profile .homebox { + max-width: 100%; + } +} +@media screen and (max-width: 939px) { + .page-user-profile .homebox .homebox-column-wrapper { + width: 100% !important; + } +} +@media screen and (max-width: 939px) { + .page-user-profile .homebox .homebox-column-wrapper .homebox-column { + height: auto !important; + } +} +.page-user-profile .homebox #homebox-block-auto_role_allocation_progress-block .portlet-header { + position: relative; +} +.page-user-profile .homebox #homebox-block-auto_role_allocation_progress-block .portlet-content { + color: #000; + font-size: 15px; + font-family: arial !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; +} +.page-user-profile .homebox #homebox-block-auto_role_allocation_progress-block .portlet-content:before { + content: ""; + width: 50px; + height: 50px; + display: block; + visibility: visible; + position: absolute; + top: 12px; + left: 6%; + overflow: visible; + background: url("../images/libraryzurb/progress-dash.png") no-repeat; +} +.page-user-profile .homebox #homebox-block-auto_role_allocation_progress-block .portlet-content div { + padding-left: 32%; + position: relative; + padding-bottom: 30%; +} +.page-user-profile .homebox #homebox-block-auto_role_allocation_progress-block .portlet-content div:before { + content: ""; + width: 100px; + height: 100px; + display: block; + visibility: visible; + position: absolute; + top: -11px; + left: 0; + background: url("../images/libraryzurb/fi-calendar.svg") no-repeat; + background-position: center; +} +@media only screen and (min-width: 940px) and (max-width: 1025px) { + .page-user-profile .homebox #homebox-block-auto_role_allocation_progress-block .portlet-content div:before { + content: ""; + width: 100px; + height: 100px; + display: block; + visibility: visible; + position: absolute; + top: -11px; + left: -17px; + } +} +.page-user-profile .homebox #homebox-block-auto_role_allocation_progress-block .portlet-content div a.button { + width: 100%; + display: inline-block; + color: #fff !important; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + background: #267fda !important; + border-radius: 10px; + padding: 9px 22px; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + border: none; + text-transform: capitalize; + font-size: 17px; + position: absolute; + left: -15px; + bottom: 0; +} +.page-user-profile .homebox #homebox-block-auto_role_allocation_progress-block .portlet-content div a.button:hover, .page-user-profile .homebox #homebox-block-auto_role_allocation_progress-block .portlet-content div a.button:focus { + color: #fff; + background: #267fda; + opacity: 1; + outline: none; +} +.page-user-profile .homebox #homebox-add { + color: #fff; + border-radius: 20px; + background: #fdeb52; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + border-radius: 20px; + padding: 36px 20px 25px; + position: relative; +} +.page-user-profile .homebox #homebox-add:after { + content: "Click on a button to add it to your Dashboard."; + width: 100%; + height: auto; + font-family: arial !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; + color: #000; +} +.page-user-profile .homebox #homebox-add .item-list ul li.last { + float: right !important; +} +.page-user-profile .homebox #homebox-buttons { + margin-bottom: 32px; +} +.page-user-profile .homebox #homebox-buttons a { + padding: 9px 25px; + color: #fff !important; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + background: #267fda !important; + border-radius: 10px; + padding: 9px 22px; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + border: none; + text-transform: capitalize; + font-size: 22px; + text-decoration: none; +} +.page-user-profile .homebox #homebox-buttons a:hover, .page-user-profile .homebox #homebox-buttons a:focus { + color: #fff; + background: #267fda; + opacity: 1; + outline: none; +} +.page-user-profile .homebox #homebox-add ul li a { + color: #fff !important; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + background: #267fda !important; + border-radius: 10px; + padding: 9px 22px; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + border: none; + text-transform: capitalize; + font-size: 17px; + text-decoration: none; +} +.page-user-profile .homebox #homebox-add ul li a:hover, .page-user-profile .homebox #homebox-add ul li a:focus { + color: #fff; + background: #267fda; + opacity: 1; + outline: none; +} +.page-user-profile .homebox #homebox-add ul li a.used { + border: none !important; + outline: none !important; +} +.page-user-profile .homebox .homebox-column { + background: none !important; +} +.page-user-profile .homebox .homebox-portlet { + border: none !important; + outline: none !important; + position: relative; +} +.page-user-profile .homebox .homebox-portlet-inner { + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + border: none !important; + outline: none !important; + background: #fdeb52; + border-radius: 20px; + margin-bottom: 10px; +} +.page-user-profile .homebox .homebox-portlet-inner .portlet-header { + background: #267fda !important; + box-shadow: none !important; + opacity: 1 !important; + border-radius: 20px 20px 0px 0px; + padding: 15.5px 15px 15.5px 0 !important; + border: none !important; + outline: none !important; +} +.page-user-profile .homebox .homebox-portlet-inner .portlet-header a { + position: relative; + background-size: 30px; + height: 30px; + width: 30px; +} +.page-user-profile .homebox .homebox-portlet-inner .portlet-header a.portlet-close { + background: url("../images/libraryzurb/close-img.png") no-repeat; +} +.page-user-profile .homebox .homebox-portlet-inner .portlet-header a.portlet-minus { + background: url("../images/libraryzurb/min-img.png") no-repeat; + padding-right: 23px; +} +.page-user-profile .homebox .homebox-portlet-inner .portlet-header a.portlet-maximize { + display: none; +} +.page-user-profile .homebox .homebox-portlet-inner .portlet-header a.portlet-plus { + background: url("../images/libraryzurb/plus.png") no-repeat; + padding-right: 23px; +} +.page-user-profile .homebox .homebox-portlet-inner .portlet-header .portlet-title { + color: #fff !important; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + padding-left: 21%; + font-size: 22px; + position: relative; +} +.page-user-profile .homebox .portlet-content { + padding: 35px 7.1% !important; + position: inherit; +} +.page-user-profile .homebox .portlet-content .view:before { + content: ""; + width: 50px; + height: 50px; + display: block; + visibility: visible; + position: absolute; + top: 12px; + left: 6%; +} +.page-user-profile .homebox .portlet-content .view .view-header { + text-align: left !important; +} +.page-user-profile .homebox .portlet-content .view .view-content .views-field-count { + font-size: 15px; + font-family: arial !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; + color: #000; + margin-top: 10px; +} +.page-user-profile .homebox .portlet-content .view .view-content .views-field-count .views-label-count { + position: relative; + padding-right: 34px; +} +.page-user-profile .homebox .portlet-content .view .view-content .views-field-count .views-label-count:after { + content: ""; + width: 30px; + height: 30px; + display: block; + visibility: visible; + position: absolute; + top: 0px; + right: 0; + background: url("../images/libraryzurb/smily-white.png") no-repeat; +} +.page-user-profile .homebox .portlet-content .view .view-content .views-field-count .views-label-count:after { + top: -4px !important; +} +.page-user-profile .homebox .portlet-content .view.view-follow:before { + background: url("../images/libraryzurb/following.png") no-repeat; +} +.page-user-profile .homebox .portlet-content .view.view-follow .view-header .Following p { + font-size: 15px; + font-family: Arialbold !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + -moz-font-smoothing: grayscale !important; + color: #000; +} +.page-user-profile .homebox .portlet-content .view.view-follow .view-content { + width: 100%; + display: table; +} +.page-user-profile .homebox .portlet-content .view.view-follow .view-content .views-row { + display: table-row; +} +.page-user-profile .homebox .portlet-content .view.view-follow .view-content .views-row img { + margin: 0px 0px 0.5em 0px; + border: none !important; + outline: none !important; +} +.page-user-profile .homebox .portlet-content .view.view-follow .view-content .views-row .views-field { + display: table-cell; +} +.page-user-profile .homebox .portlet-content .view.view-follow .view-content .views-row .views-field.views-field-field-user-avatar { + width: 25%; + float: left; + padding-right: 5%; +} +.page-user-profile .homebox .portlet-content .view.view-follow .view-content .views-row .views-field.views-field-name { + width: 70%; + float: left; +} +.page-user-profile .homebox .portlet-content .view.view-follow .view-content .views-row .views-field.views-field-name a { + color: #000; + font-size: 15px; + font-family: arial !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; +} +.page-user-profile .homebox .portlet-content .view.view-patron-rewads-for-patron-dashboard:before { + background: url("../images/libraryzurb/reward-dash.png") no-repeat; +} +.page-user-profile .homebox .portlet-content .view.view-patron-rewads-for-patron-dashboard .view-content { + display: table; + width: 100%; +} +.page-user-profile .homebox .portlet-content .view.view-patron-rewads-for-patron-dashboard .view-content .views-row { + display: table-row; +} +.page-user-profile .homebox .portlet-content .view.view-patron-rewads-for-patron-dashboard .view-content .views-row .views-field { + display: table-cell; +} +.page-user-profile .homebox .portlet-content .view.view-patron-rewads-for-patron-dashboard .view-content .views-row .views-field.views-field-field-reward-badge { + width: 30%; + float: left; +} +.page-user-profile .homebox .portlet-content .view.view-patron-rewads-for-patron-dashboard .view-content .views-row .views-field.views-field-field-reward-badge h2 { + display: none; +} +.page-user-profile .homebox .portlet-content .view.view-patron-rewads-for-patron-dashboard .view-content .views-row .views-field.views-field-php { + width: 65%; + float: right; + padding-top: 20px; + font-size: 15px; + font-family: arial !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; + color: #000; +} +.page-user-profile .homebox .portlet-content .view.view-booklist-on-activities-page { + counter-reset: section; +} +.page-user-profile .homebox .portlet-content .view.view-booklist-on-activities-page:before { + background: url("../images/libraryzurb/booklist-dash.png") no-repeat; +} +.page-user-profile .homebox .portlet-content .view.view-booklist-on-activities-page .view-footer p { + text-align: center; + margin-top: 10px; + width: 100%; +} +.page-user-profile .homebox .portlet-content .view.view-booklist-on-activities-page .view-footer p a { + width: 100%; + display: inline-block; + margin: 0; + padding: 7px 22px; + color: #fff !important; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + background: #267fda !important; + border-radius: 10px; + padding: 9px 22px; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + border: none; + text-transform: capitalize; + font-size: 17px; +} +.page-user-profile .homebox .portlet-content .view.view-booklist-on-activities-page .view-footer p a:hover, .page-user-profile .homebox .portlet-content .view.view-booklist-on-activities-page .view-footer p a:focus { + color: #fff; + background: #267fda; + opacity: 1; + outline: none; +} +.page-user-profile .homebox .portlet-content .view.view-booklist-on-activities-page .view-footer p a:hover { + text-decoration: underline !important; +} +.page-user-profile .homebox .portlet-content .view.view-booklist-on-activities-page .view-header h3 { + font-size: 15px; + color: #000; + font-family: Arialbold !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + -moz-font-smoothing: grayscale !important; + text-transform: capitalize; +} +.page-user-profile .homebox .portlet-content .view.view-booklist-on-activities-page ol { + list-style: none; +} +.page-user-profile .homebox .portlet-content .view.view-booklist-on-activities-page ol li .views-field-title a { + color: #000; + font-size: 15px; + font-family: arial !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; +} +.page-user-profile .homebox .portlet-content .view.view-booklist-on-activities-page ol li .views-field-title a:before { + counter-increment: section; + content: " " counter(section,decimal) ". "; + padding-right: 5px; + display: inline-block; +} +.page-user-profile .homebox .portlet-content .view.view-my-book-reviews { + counter-reset: section; +} +.page-user-profile .homebox .portlet-content .view.view-my-book-reviews:before { + background: url("../images/libraryzurb/review-dash.png") no-repeat; +} +.page-user-profile .homebox .portlet-content .view.view-my-book-reviews .view-empty p:nth-of-type(1) { + text-align: left; +} +.page-user-profile .homebox .portlet-content .view.view-my-book-reviews .view-empty p:nth-of-type(2) { + text-align: center; +} +.page-user-profile .homebox .portlet-content .view.view-my-book-reviews .view-empty p:nth-of-type(2) a { + width: 100%; + display: inline-block; + margin: 0; + padding: 7px 22px; + color: #fff !important; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + background: #267fda !important; + border-radius: 10px; + padding: 9px 22px; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + border: none; + text-transform: capitalize; + font-size: 17px; +} +.page-user-profile .homebox .portlet-content .view.view-my-book-reviews .view-empty p:nth-of-type(2) a:hover, .page-user-profile .homebox .portlet-content .view.view-my-book-reviews .view-empty p:nth-of-type(2) a:focus { + color: #fff; + background: #267fda; + opacity: 1; + outline: none; +} +.page-user-profile .homebox .portlet-content .view.view-my-book-reviews .view-empty p:nth-of-type(2) a:hover { + text-decoration: underline !important; +} +.page-user-profile .homebox .portlet-content .view.view-my-book-reviews .view-footer p { + text-align: center; + width: 100%; + margin-top: 10px; +} +.page-user-profile .homebox .portlet-content .view.view-my-book-reviews .view-footer p a { + width: 100%; + display: inline-block; + margin: 0; + padding: 7px 22px; + color: #fff !important; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + background: #267fda !important; + border-radius: 10px; + padding: 9px 22px; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + border: none; + text-transform: capitalize; + font-size: 17px; +} +.page-user-profile .homebox .portlet-content .view.view-my-book-reviews .view-footer p a:hover, .page-user-profile .homebox .portlet-content .view.view-my-book-reviews .view-footer p a:focus { + color: #fff; + background: #267fda; + opacity: 1; + outline: none; +} +.page-user-profile .homebox .portlet-content .view.view-my-book-reviews .view-footer p a:hover { + text-decoration: underline !important; +} +.page-user-profile .homebox .portlet-content .view.view-my-book-reviews .view-empty { + font-size: 15px; + font-family: arial !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; + color: #000; +} +.page-user-profile .homebox .portlet-content .view.view-my-book-reviews .view-header h3 { + color: #000; + font-size: 15px; + font-family: Arialbold !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + -moz-font-smoothing: grayscale !important; + text-transform: capitalize; +} +.page-user-profile .homebox .portlet-content .view.view-my-book-reviews .view-content ol, .page-user-profile .homebox .portlet-content .view.view-my-book-reviews .view-content ul { + margin-left: 0; + list-style: none; +} +.page-user-profile .homebox .portlet-content .view.view-my-book-reviews .view-content ol li, .page-user-profile .homebox .portlet-content .view.view-my-book-reviews .view-content ul li { + margin-left: 0; +} +.page-user-profile .homebox .portlet-content .view.view-my-book-reviews .view-content ol li a, .page-user-profile .homebox .portlet-content .view.view-my-book-reviews .view-content ul li a { + color: #000; + font-family: arial !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; + font-size: 15px; + text-transform: capitalize; +} +.page-user-profile .homebox .portlet-content .view.view-my-book-reviews .view-content ol li a:before, .page-user-profile .homebox .portlet-content .view.view-my-book-reviews .view-content ul li a:before { + counter-increment: section; + content: " " counter(section,decimal) ". "; + padding-right: 5px; + display: inline-block; +} +.page-user-profile .homebox .portlet-content .view.view-my-activities-for-patron-dashboard:before { + background: url("../images/libraryzurb/activities-dash.png") no-repeat; +} +.page-user-profile .homebox .portlet-content .view.view-my-activities-for-patron-dashboard .view-header a { + font-size: 15px; + color: #000; + font-family: Arialbold !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + -moz-font-smoothing: grayscale !important; + text-transform: capitalize; + text-decoration: none; +} +.page-user-profile .homebox .portlet-content .view.view-my-activities-for-patron-dashboard .view-content .views-row { + display: inline-block; + width: 100%; +} +.page-user-profile .homebox .portlet-content .view.view-my-activities-for-patron-dashboard .view-content .views-row .field-content div { + width: 49%; + float: left; + font-size: 15px; + color: #000; + font-family: arial !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; +} +.page-user-profile .homebox .portlet-content .view.view-my-activities-for-patron-dashboard .view-content .views-row .field-content div:nth-of-type(2) { + margin-left: 1%; +} +.page-user-profile .homebox .portlet-content .view.view-my-activities-for-patron-dashboard .view-footer div { + text-align: center; + margin-bottom: 10px; +} +.page-user-profile .homebox .portlet-content .view.view-my-activities-for-patron-dashboard .view-footer div a { + width: 100%; + display: inline-block; + padding: 11px 22px; + color: #fff !important; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + background: #267fda !important; + border-radius: 10px; + padding: 9px 22px; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + border: none; + text-transform: capitalize; + font-size: 17px; +} +.page-user-profile .homebox .portlet-content .view.view-my-activities-for-patron-dashboard .view-footer div a:hover, .page-user-profile .homebox .portlet-content .view.view-my-activities-for-patron-dashboard .view-footer div a:focus { + color: #fff; + background: #267fda; + opacity: 1; + outline: none; +} + +/**end css of patron dashboard page**/ +/**css for msg center**/ +.page-messages { + /**create-msg***/ + /**end create-msg**/ +} +.page-messages.page-messages-new .main form, .page-messages.page-messages-view .main form { + width: 100%; + max-width: 90%; + margin: 0 auto; +} +.page-messages.page-messages-new .main form label, .page-messages.page-messages-new .main form div, .page-messages.page-messages-view .main form label, .page-messages.page-messages-view .main form div { + color: #fff !important; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; +} +.page-messages.page-messages-new .main form .form-submit, .page-messages.page-messages-view .main form .form-submit { + color: #000; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + border-radius: 10px; + background: #fdeb52 !important; + text-transform: capitalize; + border: none; + padding: 0.5625em 20px; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); +} +.page-messages.page-messages-new .main form .form-submit:hover, .page-messages.page-messages-view .main form .form-submit:hover { + color: #000; + background: #f7fc63 !important; + opacity: 1; + outline: none; + text-decoration: none !important; +} +.page-messages.page-messages-new .main form .form-submit:focus, .page-messages.page-messages-new .main form .form-submit.active, .page-messages.page-messages-view .main form .form-submit:focus, .page-messages.page-messages-view .main form .form-submit.active { + color: #000; + background: #f0f811 !important; + outline: 1; + opacity: 1; + text-decoration: none !important; +} +.page-messages.page-messages-new .main form fieldset#edit-token, .page-messages.page-messages-view .main form fieldset#edit-token { + display: none; +} +.page-messages div.main { + background: #267fda; + overflow: hidden; + border-radius: 20px; + margin-bottom: 25px; + position: relative; + padding: 0; + padding-bottom: 20px; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); +} +.page-messages div.main #page-title { + color: #fff; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + padding-top: 26px; + padding-bottom: 25px; + font-size: 28px; + height: 110px; + border-bottom: medium none; + margin-top: -1px; + padding-left: 4%; + z-index: 0; + position: relative; +} +.page-messages div.main #page-title:after { + content: ""; + width: 100%; + height: 110px; + display: block; + visibility: visible; + position: absolute; + top: 0; + left: 0; + background: url("../images/libraryzurb/background-saffron.png") no-repeat; + background-position: -35px 10px; + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -ms-transform: rotate(180deg); + -o-transform: rotate(180deg); + transform: rotate(180deg); + z-index: -1; +} +.page-messages div.main ul.pagination.pager { + float: right; + margin-right: 20px; +} +.page-messages div.main ul.pagination.pager li a { + background: #fdeb52; + color: #000; + border-left: 1px solid #000; + padding: 10px; +} +.page-messages div.main ul.pagination.pager li.current a { + color: #fff !important; + background: #f6511d !important; +} +.page-messages div.main ul.pagination.pager li.arrow.first a { + border-left: 0 !important; + border-radius: 10px 0px 0px 10px; +} +.page-messages div.main ul.pagination.pager li.arrow.last a { + border-radius: 0px 10px 10px 0px; +} +.page-messages div.main ul.button-group li a { + font-size: 17px; + color: #000; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + border-radius: 10px; + background: #fdeb52 !important; + text-transform: capitalize; + border: none; + padding: 0.5625em 20px; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); +} +.page-messages div.main ul.button-group li a:hover { + color: #000; + background: #f7fc63 !important; + opacity: 1; + outline: none; + text-decoration: none !important; +} +.page-messages div.main ul.button-group li a:focus, .page-messages div.main ul.button-group li a.active { + color: #000; + background: #f0f811 !important; + outline: 1; + opacity: 1; + text-decoration: none !important; +} +.page-messages div.main ul.button-group:after { + clear: none !important; +} +.page-messages div.main ul.action-links { + list-style: none; +} +.page-messages div.main ul.action-links li a { + color: #000; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + border-radius: 10px; + background: #fdeb52 !important; + text-transform: capitalize; + border: none; + padding: 0.5625em 20px; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + margin-left: 20px; + font-size: 17px; + position: relative; + top: 8.5px; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); +} +.page-messages div.main ul.action-links li a:hover { + color: #000; + background: #f7fc63 !important; + opacity: 1; + outline: none; + text-decoration: none !important; +} +.page-messages div.main ul.action-links li a:focus, .page-messages div.main ul.action-links li a.active { + color: #000; + background: #f0f811 !important; + outline: 1; + opacity: 1; + text-decoration: none !important; +} +.page-messages div.main form { + clear: both; +} +.page-messages div.main form button { + font-size: 17px; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; +} +.page-messages div.main form #privatemsg-list-form table { + border: none; + margin: 0 auto !important; + max-width: 80%; +} +.page-messages div.main form #privatemsg-list-form table th.select-all { + width: 1%; +} +.page-messages div.main form #privatemsg-list-form table th.privatemsg-header-participants, .page-messages div.main form #privatemsg-list-form table td.privatemsg-list-participants { + display: none; +} +.page-messages div.main form #privatemsg-list-form table input[type="checkbox"], .page-messages div.main form #privatemsg-list-form table .form-checkbox { + margin: 0 !important; +} +@media (max-width: 767px) { + .page-messages div.main form #privatemsg-list-form table { + width: 100% !important; + max-width: 100%; + } + .page-messages div.main form #privatemsg-list-form table thead, .page-messages div.main form #privatemsg-list-form table tbody, .page-messages div.main form #privatemsg-list-form table th, .page-messages div.main form #privatemsg-list-form table tr { + width: 100% !important; + } +} +.page-messages div.main form #privatemsg-list-form table tr th, .page-messages div.main form #privatemsg-list-form table tr th > a, .page-messages div.main form #privatemsg-list-form table tr td, .page-messages div.main form #privatemsg-list-form table tr td > a { + color: #fff; +} +.page-messages div.main form #privatemsg-list-form table thead { + background: #267fda; + font-weight: normal; + border-bottom: 5px solid #267fda; +} +.page-messages div.main form #privatemsg-list-form table tbody { + border-top: none; +} +.page-messages div.main form #privatemsg-list-form table tbody .privatemsg-unread td { + font-weight: normal; +} +.page-messages div.main form #privatemsg-list-form table tbody tr.even, .page-messages div.main form #privatemsg-list-form table tbody tr.odd { + border-bottom: none; + background-color: #267fda; +} +.page-messages div.main form #privatemsg-list-form table tr.even, .page-messages div.main form #privatemsg-list-form table tr.alt, .page-messages div.main form #privatemsg-list-form table tr:nth-of-type(2n) { + background: #267fda; +} +.page-messages div.main form #privatemsg-list-form .container-inline { + width: 100%; + padding-bottom: 20px; + padding-left: 2%; + margin: 0 auto; +} +.page-messages div.main form #privatemsg-list-form .container-inline div.form-type-textfield { + display: none; +} +.page-messages div.main form #privatemsg-list-form .container-inline div.form-type-select .chosen-container-single { + width: 200px !important; +} +.page-messages div.main form #privatemsg-list-form .container-inline div.form-type-select .chosen-container-single .chosen-single { + font-size: 17px; + color: #000; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + border-radius: 10px; + background: #fdeb52 !important; + text-transform: capitalize; + border: none; + padding: 0.5625em 20px; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + padding: 13px 20px 10px; + height: auto !important; + position: relative; + bottom: 2px; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); +} +.page-messages div.main form #privatemsg-list-form .container-inline div.form-type-select .chosen-container-single .chosen-single:hover { + color: #000; + background: #f7fc63 !important; + opacity: 1; + outline: none; + text-decoration: none !important; +} +.page-messages div.main form #privatemsg-list-form .container-inline div.form-type-select .chosen-container-single .chosen-single:focus, .page-messages div.main form #privatemsg-list-form .container-inline div.form-type-select .chosen-container-single .chosen-single.active { + color: #000; + background: #f0f811 !important; + outline: 1; + opacity: 1; + text-decoration: none !important; +} +.page-messages div.main form #privatemsg-list-form .container-inline div.form-type-select .chosen-container-single .chosen-single div { + top: 8px; +} +.page-messages div.main form fieldset { + border: none; +} +.page-messages div.main form fieldset legend { + background: none; + font-weight: normal; + margin-top: 15px; +} +.page-messages div.main form fieldset legend a { + color: #000; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + border-radius: 10px; + background: #fdeb52 !important; + text-transform: capitalize; + border: none; + padding: 0.5625em 20px; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + font-size: 17px; +} +.page-messages div.main form fieldset legend a:hover { + color: #000; + background: #f7fc63 !important; + opacity: 1; + outline: none; + text-decoration: none !important; +} +.page-messages div.main form fieldset legend a:focus, .page-messages div.main form fieldset legend a.active { + color: #000; + background: #f0f811 !important; + outline: 1; + opacity: 1; + text-decoration: none !important; +} +.page-messages div.main form fieldset .form-item label { + color: #fff; + text-align: left !important; + padding-bottom: 5px; +} + +/**msg center css end**/ +/**common css used in page-reviews and page-booklists**/ +.page-reviews #page-title, .page-booklists #page-title { + color: #000; + font-family: arial !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; + opacity: 1 !important; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; +} +.page-reviews .view-header p a, .page-booklists .view-header p a { + color: #267fda; +} +.page-reviews .view-header p a:hover, .page-reviews .view-header p a:focus, .page-booklists .view-header p a:hover, .page-booklists .view-header p a:focus { + color: #267fda; +} +.page-reviews .pull-9.sidebar, .page-booklists .pull-9.sidebar { + width: 29.53%; + right: 69.4%; + padding-left: 2.65%; + padding-right: 2.65%; + margin-bottom: 35px; +} +@media (max-width: 767px) { + .page-reviews .pull-9.sidebar, .page-booklists .pull-9.sidebar { + margin-bottom: 25px; + } +} +@media (max-width: 767px) { + .page-reviews .pull-9.sidebar, .page-booklists .pull-9.sidebar { + width: 100%; + right: 0; + } +} +@media (min-width: 768px) and (max-width: 1025px) { + .page-reviews .pull-9.sidebar, .page-booklists .pull-9.sidebar { + width: 37.53%; + right: 63.4%; + } +} +.page-reviews .pull-9.sidebar2, .page-booklists .pull-9.sidebar2 { + width: 29.53%; + right: 71.4%; + padding-left: 0; + padding-right: 0; +} +@media (max-width: 767px) { + .page-reviews .pull-9.sidebar2, .page-booklists .pull-9.sidebar2 { + width: 100%; + right: 0; + } +} +.page-reviews .sidebar, .page-booklists .sidebar { + background: #267fda; + color: #fff; + padding-top: 25px; + padding-bottom: 25px; + border-radius: 20px; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); +} +.page-reviews .sidebar .views-field-count, .page-booklists .sidebar .views-field-count { + padding-left: 0; +} +.page-reviews .sidebar .block-title, .page-booklists .sidebar .block-title { + color: #fff !important; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + font-size: 22px; + margin-top: 6px; +} +.page-reviews .sidebar p, .page-booklists .sidebar p { + color: white; +} +.page-reviews .sidebar p.button, .page-booklists .sidebar p.button { + color: #000; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + border-radius: 10px; + background: #fdeb52 !important; + text-transform: capitalize; + border: none; + padding: 0.5625em 20px; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + margin-left: 0 !important; + margin-bottom: 24px; +} +.page-reviews .sidebar p.button:hover, .page-booklists .sidebar p.button:hover { + color: #000; + background: #f7fc63 !important; + opacity: 1; + outline: none; + text-decoration: none !important; +} +.page-reviews .sidebar p.button:focus, .page-reviews .sidebar p.button.active, .page-booklists .sidebar p.button:focus, .page-booklists .sidebar p.button.active { + color: #000; + background: #f0f811 !important; + outline: 1; + opacity: 1; + text-decoration: none !important; +} +.page-reviews .sidebar .toogle-follow, .page-booklists .sidebar .toogle-follow { + display: none; +} +.page-reviews .sidebar .view.view-my-book-reviews, .page-reviews .sidebar .view.view-booklist-on-activities-page, .page-booklists .sidebar .view.view-my-book-reviews, .page-booklists .sidebar .view.view-booklist-on-activities-page { + margin-top: 40px; +} +.page-reviews .sidebar .reviews-block-block, .page-booklists .sidebar .reviews-block-block { + margin: 0 auto !important; +} +.page-reviews .sidebar .reviews-block-block .view-content ul, .page-reviews .sidebar .reviews-block-block .view-content ol, .page-booklists .sidebar .reviews-block-block .view-content ul, .page-booklists .sidebar .reviews-block-block .view-content ol { + margin-left: 5%; +} +.page-reviews .sidebar .reviews-block-block .view-content ul .views-field-title a, .page-reviews .sidebar .reviews-block-block .view-content ol .views-field-title a, .page-booklists .sidebar .reviews-block-block .view-content ul .views-field-title a, .page-booklists .sidebar .reviews-block-block .view-content ol .views-field-title a { + color: #fff !important; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + text-decoration: underline; +} +.page-reviews .sidebar .reviews-block-block .view-content ul .views-field-count .field-content, .page-reviews .sidebar .reviews-block-block .view-content ol .views-field-count .field-content, .page-booklists .sidebar .reviews-block-block .view-content ul .views-field-count .field-content, .page-booklists .sidebar .reviews-block-block .view-content ol .views-field-count .field-content { + position: relative; + top: 10px; +} +.page-reviews .sidebar .reviews-block-block .view-content ul .views-field-count .views-label, .page-reviews .sidebar .reviews-block-block .view-content ol .views-field-count .views-label, .page-booklists .sidebar .reviews-block-block .view-content ul .views-field-count .views-label, .page-booklists .sidebar .reviews-block-block .view-content ol .views-field-count .views-label { + position: relative; + top: 10px; + padding-right: 35px; +} +.page-reviews .sidebar .reviews-block-block .view-content ul .views-field-count .views-label:after, .page-reviews .sidebar .reviews-block-block .view-content ol .views-field-count .views-label:after, .page-booklists .sidebar .reviews-block-block .view-content ul .views-field-count .views-label:after, .page-booklists .sidebar .reviews-block-block .view-content ol .views-field-count .views-label:after { + content: ""; + width: 30px; + height: 30px; + display: block; + visibility: visible; + position: absolute; + top: -4px; + right: 0; + background: url("../images/libraryzurb/smily-white.png") no-repeat; +} +.page-reviews .sidebar .reviews-block-block .view-header h3:nth-of-type(1) a, .page-booklists .sidebar .reviews-block-block .view-header h3:nth-of-type(1) a { + color: #fff !important; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + font-size: 21px !important; +} +.page-reviews .sidebar .reviews-block-block .view-header h3, .page-booklists .sidebar .reviews-block-block .view-header h3 { + font-size: 17px !important; + font-family: Arialbold !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + -moz-font-smoothing: grayscale !important; + color: #fff; + margin-bottom: 15px; +} +.page-reviews .sidebar .reviews-block-block .view-header h3 a, .page-booklists .sidebar .reviews-block-block .view-header h3 a { + font-size: 17px !important; + font-family: Arialbold !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + -moz-font-smoothing: grayscale !important; + color: #fff; +} +.page-reviews .view .view-header .other-booklists, .page-booklists .view .view-header .other-booklists { + font-size: 25px; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + color: #000; + margin-bottom: 23px; +} +.page-reviews .view .view-header .viewmenu, .page-booklists .view .view-header .viewmenu { + margin-bottom: 23px; + font-size: 17px; + font-family: arial !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; +} +.page-reviews .view .view-filters, .page-booklists .view .view-filters { + color: #fff; + border-radius: 20px; + background: #fdeb52; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); +} +.page-reviews .view .view-filters form, .page-booklists .view .view-filters form { + margin: 0 !important; +} +.page-reviews .view .view-filters form .views-exposed-form, .page-booklists .view .view-filters form .views-exposed-form { + padding: 3px 2.8% 12px 3.4%; + border: none; +} +@media (min-width: 768px) and (max-width: 1025px) { + .page-reviews .view .view-filters form .views-exposed-form, .page-booklists .view .view-filters form .views-exposed-form { + padding: 8px 0.8% 8px 2.4%; + } +} +.page-reviews .view .view-filters form .views-exposed-form .views-exposed-widget, .page-booklists .view .view-filters form .views-exposed-form .views-exposed-widget { + width: 25%; + padding-left: 1%; + padding-right: 0; + padding-top: 17px; +} +@media (min-width: 768px) and (max-width: 1025px) { + .page-reviews .view .view-filters form .views-exposed-form .views-exposed-widget, .page-booklists .view .view-filters form .views-exposed-form .views-exposed-widget { + width: 49%; + padding-top: 2px; + } +} +.page-reviews .view .view-filters form .views-exposed-form .views-exposed-widget .chosen-container, .page-booklists .view .view-filters form .views-exposed-form .views-exposed-widget .chosen-container { + width: 100% !important; +} +.page-reviews .view .view-filters form .views-exposed-form .views-exposed-widget input[type="text"], .page-booklists .view .view-filters form .views-exposed-form .views-exposed-widget input[type="text"] { + height: 40px; + position: relative; + top: 3px; +} +.page-reviews .view .view-filters form .views-exposed-form label, .page-booklists .view .view-filters form .views-exposed-form label { + color: #000; + font-family: arial !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; + opacity: 1 !important; + font-size: 16px; +} +.page-reviews .view .view-filters form .views-exposed-form .chosen-processed .chosen-search input, .page-booklists .view .view-filters form .views-exposed-form .chosen-processed .chosen-search input { + background: #fff; +} +.page-reviews .view .view-filters form .views-exposed-form .chosen-processed .chosen-drop, .page-booklists .view .view-filters form .views-exposed-form .chosen-processed .chosen-drop { + background: #267fda; +} +.page-reviews .view .view-filters form .views-exposed-form .chosen-processed .chosen-drop .chosen-results li a, .page-booklists .view .view-filters form .views-exposed-form .chosen-processed .chosen-drop .chosen-results li a { + background: #267fda; + color: #fff !important; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; +} +.page-reviews .view .view-filters form .views-exposed-form .chosen-processed .chosen-drop .chosen-results li a:hover, .page-reviews .view .view-filters form .views-exposed-form .chosen-processed .chosen-drop .chosen-results li a:focus, .page-booklists .view .view-filters form .views-exposed-form .chosen-processed .chosen-drop .chosen-results li a:hover, .page-booklists .view .view-filters form .views-exposed-form .chosen-processed .chosen-drop .chosen-results li a:focus { + background: #267fda; + color: #fff !important; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; +} +.page-reviews .view .view-filters form .views-exposed-form .chosen-processed a, .page-booklists .view .view-filters form .views-exposed-form .chosen-processed a { + color: #fff !important; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + background: #267fda !important; + border-radius: 10px; + padding: 9px 22px; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + border: none; + text-transform: capitalize; + font-size: 21px; + height: auto !important; + border: none; +} +.page-reviews .view .view-filters form .views-exposed-form .chosen-processed a:hover, .page-reviews .view .view-filters form .views-exposed-form .chosen-processed a:focus, .page-booklists .view .view-filters form .views-exposed-form .chosen-processed a:hover, .page-booklists .view .view-filters form .views-exposed-form .chosen-processed a:focus { + color: #fff; + background: #267fda; + opacity: 1; + outline: none; +} +.page-reviews .view .view-filters form .views-exposed-form .chosen-processed a div b, .page-booklists .view .view-filters form .views-exposed-form .chosen-processed a div b { + visibility: hidden; + position: relative; +} +.page-reviews .view .view-filters form .views-exposed-form .chosen-processed a div b:after, .page-booklists .view .view-filters form .views-exposed-form .chosen-processed a div b:after { + content: ""; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: 5px solid #fff; + position: absolute; + top: 45%; + display: block; + left: 0; + visibility: visible; +} +.page-reviews .view .view-filters form .views-exposed-form .views-submit-button button, .page-booklists .view .view-filters form .views-exposed-form .views-submit-button button { + color: #fff !important; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + background: #267fda !important; + border-radius: 10px; + padding: 9px 22px; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + border: none; + text-transform: capitalize; + font-size: 21px; + margin-top: 26px; + line-height: 1.2; + text-transform: capitalize; + margin-left: 0; +} +.page-reviews .view .view-filters form .views-exposed-form .views-submit-button button:hover, .page-reviews .view .view-filters form .views-exposed-form .views-submit-button button:focus, .page-booklists .view .view-filters form .views-exposed-form .views-submit-button button:hover, .page-booklists .view .view-filters form .views-exposed-form .views-submit-button button:focus { + color: #fff; + background: #267fda; + opacity: 1; + outline: none; +} +@media (min-width: 768px) and (max-width: 1025px) { + .page-reviews .view .view-filters form .views-exposed-form .views-submit-button button, .page-booklists .view .view-filters form .views-exposed-form .views-submit-button button { + margin-top: 7px; + } +} + +/**css for bookreview&booklist unauthencated page**/ +.not-logged-in.page-booklists .main .view-content .item-list ol li .views-field-nothing .field-content div a { + color: #7e7e7e !important; + padding-left: 5px; + pointer-events: none !important; +} + +.not-logged-in.page-reviews .main .view-content .item-list ol li .views-field.views-field-nothing div.user a { + padding-left: 5px; + color: #7e7e7e !important; + pointer-events: none !important; +} + +/**end css of unauthencated booklist&bookreview page**/ +/**css only for book-review page****/ +.page-reviews { + counter-reset: section; +} +.page-reviews #page-title { + display: none; +} +.page-reviews .view-reviews .view-header .reviews-title, .page-reviews .view-reviews .view-header .reviews-subtitle { + color: #000; + border: none !important; + outline: none !important; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; +} +.page-reviews .view-reviews .view-header .reviews-title { + font-size: 28px; +} +.page-reviews .view-reviews .view-header .reviews-subtitle { + font-size: 22px; +} +.page-reviews .main .view-content .views-row img { + border: none !important; + outline: none !important; +} +.page-reviews .main .view-content .item-list ol { + list-style: none; + display: table; +} +.page-reviews .main .view-content .item-list ol li { + margin-bottom: 0; + display: table-row; + width: 100%; + position: relative; + float: left; + border-bottom: 1px solid #cccccc; + padding-top: 35px; + padding-bottom: 35px; + font-size: 17px; +} +.page-reviews .main .view-content .item-list ol li .views-field.views-field-nothing-1 { + width: 70%; + float: right; + display: table-cell; + padding-left: 4%; + padding-top: 23px; +} +.page-reviews .main .view-content .item-list ol li .views-field.views-field-nothing-1 .bookreview_title { + font-size: 20px; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; +} +.page-reviews .main .view-content .item-list ol li .views-field.views-field-nothing-1 .bookreview_title a { + font-size: 20px; + padding-right: 5px; +} +.page-reviews .main .view-content .item-list ol li .views-field.views-field-count { + position: relative; + top: 45px; +} +.page-reviews .main .view-content .item-list ol li .views-field.views-field-body { + font-family: arial !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; + font-size: 18px; + line-height: 1.4; +} +.page-reviews .main .view-content .item-list ol li .views-field.views-field-nothing div { + float: left; +} +.page-reviews .main .view-content .item-list ol li .views-field.views-field-nothing div.user { + padding-left: 5px; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; +} +.page-reviews .main .view-content .item-list ol li .views-field.views-field-nothing div.review { + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; +} +.page-reviews .main .view-content .item-list ol li .views-field.views-field-nothing div.date { + width: 100%; + display: table-row; + font-family: arial !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; + padding-top: 16px; + font-size: 18px; +} +.page-reviews .main .view-content .item-list ol li .views-field.views-field-nothing div.field-name-field-avatar-image { + position: relative; + height: 41px; + padding-left: 5px; + padding-top: 5px; + bottom: 19px; +} +.page-reviews .main .view-content .item-list ol li .views-field.views-field-nothing div.field-name-field-avatar-image img { + margin: 0 !important; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); +} +.page-reviews .main .view-content .item-list ol li .views-field.views-field-view-node span.button { + visibility: hidden; +} +.page-reviews .main .view-content .item-list ol li .views-field.views-field-view-node span.button a { + visibility: visible; +} +.page-reviews .main .view-content .item-list ol li .views-field.views-field-title a, .page-reviews .main .view-content .item-list ol li .views-field.views-field-php a { + color: #267fda; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; +} +.page-reviews .main .view-content .item-list ol li .views-field.views-field-title a:hover, .page-reviews .main .view-content .item-list ol li .views-field.views-field-php a:hover { + color: #267fda; +} +.page-reviews .main .view-content .item-list ol li .views-field.views-field-count { + text-align: right; + float: right; + display: table-row; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; +} +.page-reviews .main .view-content .item-list ol li .views-field.views-field-count .views-label-count { + position: relative; + padding-right: 34px; +} +.page-reviews .main .view-content .item-list ol li .views-field.views-field-count .views-label-count:after { + content: ""; + width: 30px; + height: 30px; + display: block; + visibility: visible; + position: absolute; + top: 0px; + right: 0; + background: url("../images/libraryzurb/smily-white.png") no-repeat; +} +.page-reviews .main .view-content .item-list ol li .views-field.views-field-field-book-cover-image-link { + display: table-cell; + float: left; + width: 30%; + padding: 0px; +} +.page-reviews .main .view-content .item-list ol li .views-field.views-field-field-book-cover-image-link table { + margin: 0 !important; + border: none !important; + outline: none !important; +} +.page-reviews .main .view-content .item-list ol li .views-field.views-field-field-book-cover-image-link table tbody { + border: none !important; + outline: none !important; +} +.page-reviews .main .view-content .item-list ol li .views-field.views-field-field-book-cover-image-link table tbody td { + padding: 0; +} +.page-reviews .main .view-content .item-list ol li .views-field.views-field-field-book-cover-image-link table tbody td img { + margin: 0; + padding: 0; +} +@media screen and (max-width: 1199px) { + .page-reviews .main .view-content .item-list ol li .views-field.views-field-field-book-cover-image-link table tbody td img { + width: 100% !important; + height: auto !important; + } +} +@media screen and (min-width: 1279px) { + .page-reviews .main .view-content .item-list ol li .views-field.views-field-field-book-cover-image-link table tbody td img { + width: 242px !important; + height: 361px !important; + } +} +.page-reviews .main .view-content .item-list ol li .views-field.views-field-body { + padding-top: 15px; +} +.page-reviews .main .view-content .item-list ol li .views-field.views-field-nothing, .page-reviews .main .view-content .item-list ol li .views-field.views-field-body { + width: 70%; + float: right; + display: table-row; + padding-left: 4%; +} +.page-reviews .main .view-content .item-list ol li .views-field.views-field-field-user-avatar img { + float: left; +} +.page-reviews .main .view-content .item-list ol li .views-field.views-field-view-node { + display: table-row; + width: 70%; + float: right; + padding-left: 4%; +} +.page-reviews .main .view-content .item-list ol li .views-field.views-field-view-node .button { + padding: 0 !important; + margin: 23px 0 0; +} +.page-reviews .main .view-content .item-list ol li .views-field.views-field-view-node .button a { + color: #fff !important; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + background: #267fda !important; + border-radius: 10px; + padding: 9px 22px; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + border: none; + text-transform: capitalize; + font-size: 21px; +} +.page-reviews .main .view-content .item-list ol li .views-field.views-field-view-node .button a:hover, .page-reviews .main .view-content .item-list ol li .views-field.views-field-view-node .button a:focus { + color: #fff; + background: #267fda; + opacity: 1; + outline: none; +} +.page-reviews .main .view-content .item-list ol li .views-field-title:before { + counter-increment: section; + content: " " counter(section,decimal) ". "; + padding-right: 5px; + display: inline-block; +} + +/**css only for booklist page**/ +.page-booklists .l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.reviews::after { + background: url("../images/libraryzurb/reviewactive.png") no-repeat !important; +} +@media (min-width: 768px) and (max-width: 1025px) { + .page-booklists .l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.reviews::after { + background-size: 100% !important; + } +} +.page-booklists .main .view-header, .page-booklists .main .view-footer { + display: none; +} +.page-booklists .main .view-content { + margin-top: 40px; + counter-reset: section 3; +} +.page-booklists .main .view-content .item-list ol { + margin-left: 20px; + list-style: none; +} +.page-booklists .main .view-content .item-list ol li { + font-size: 17px; +} +.page-booklists .main .view-content .item-list ol li.views-row { + margin-bottom: 23px; +} +.page-booklists .main .view-content .item-list ol li.views-row .views-field-title { + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; +} +.page-booklists .main .view-content .item-list ol li .views-field-nothing { + margin-top: 23px; + padding-left: 25px; + display: inline-block; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; +} +.page-booklists .main .view-content .item-list ol li .views-field-nothing div { + float: left; +} +.page-booklists .main .view-content .item-list ol li .views-field-nothing div a { + padding-left: 10px; +} +.page-booklists .main .view-content .item-list ol li .views-field-nothing div.field-name-field-avatar-image { + position: relative; + bottom: 10px; +} +.page-booklists .main .view-content .item-list ol li .views-field-nothing div.field-name-field-avatar-image img { + border: none !important; + outline: none !important; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + margin-left: 10px; +} +.page-booklists .main .view-content .item-list ol li .views-field-php a { + color: #267fda; + font-size: 21px; +} +.page-booklists .main .view-content .item-list ol li .views-field-php a:hover { + color: #267fda; +} +.page-booklists .main .view-content .item-list ol li .views-field-count .views-label-count { + position: relative; + padding-right: 34px; +} +.page-booklists .main .view-content .item-list ol li .views-field-count .views-label-count:after { + content: ""; + width: 30px; + height: 30px; + display: block; + visibility: visible; + position: absolute; + top: 0px; + right: 0; + background: url("../images/libraryzurb/smily-white.png") no-repeat; +} +.page-booklists .main .view-content .item-list ol li .views-field-count { + float: right; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; +} +.page-booklists .main .view-content .item-list ol li .views-field-counter { + float: left; + font-size: 17px; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; +} +.page-booklists .main .view-content .item-list ol li .views-field-counter:after { + content: "."; + font-weight: bold; + position: relative; + right: 4px; +} +.page-booklists .main .view-content .item-list ol li .views-field-title a { + font-size: 21px; + color: #267fda; +} +.page-booklists .main .view-booklist-slideshow .owl-carousel { + position: relative; +} +.page-booklists .main .view-booklist-slideshow .owl-carousel .owl-wrapper-outer { + width: 99%; + margin: 0 auto; +} +.page-booklists .main .view-booklist-slideshow .owl-carousel .owl-item .views-field-field-booklist-cover-image { + width: 135px; +} +.page-booklists .main .view-booklist-slideshow .owl-carousel .owl-item .views-field-field-booklist-cover-image img { + width: 100%; +} +.page-booklists .main .view-booklist-slideshow .owl-carousel .views-field-title { + font-size: 21px; +} +.page-booklists .main .view-booklist-slideshow .owl-carousel .views-field-title .field-content a { + color: #267fda; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + text-transform: capitalize; +} +.page-booklists .main .view-booklist-slideshow .owl-carousel .views-field-nothing { + width: 70%; + float: left; + margin-top: 20px; + font-size: 17px; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; +} +@media (min-width: 768px) and (max-width: 1025px) { + .page-booklists .main .view-booklist-slideshow .owl-carousel .views-field-nothing { + width: 100%; + display: inline-block; + } +} +.page-booklists .main .view-booklist-slideshow .owl-carousel .views-field-nothing div { + float: left; + color: #000; +} +.page-booklists .main .view-booklist-slideshow .owl-carousel .views-field-nothing div:first-child { + padding-right: 5px; +} +.page-booklists .main .view-booklist-slideshow .owl-carousel .views-field-nothing div.field-name-field-avatar-image { + position: relative; + bottom: 10px; +} +.page-booklists .main .view-booklist-slideshow .owl-carousel .views-field-nothing div.field-name-field-avatar-image img { + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + margin-right: 5px; + margin-left: 5px; +} +.page-booklists .main .view-booklist-slideshow .owl-carousel .views-field-nothing div a.username { + color: #267fda; + font-size: 21px; + padding-right: 10px; +} +.page-booklists .main .view-booklist-slideshow .owl-carousel .views-field-count { + width: 30%; + float: left; + text-align: right; + margin-top: 20px; + padding-right: 2%; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; +} +@media (min-width: 768px) and (max-width: 1025px) { + .page-booklists .main .view-booklist-slideshow .owl-carousel .views-field-count { + width: 100%; + float: right; + position: relative; + bottom: 81px; + } +} +.page-booklists .main .view-booklist-slideshow .owl-carousel .views-field-count span { + color: #000; + position: relative; +} +.page-booklists .main .view-booklist-slideshow .owl-carousel .views-field-count span.views-label { + padding-right: 40px; + position: relative; + padding-right: 34px; +} +.page-booklists .main .view-booklist-slideshow .owl-carousel .views-field-count span.views-label:after { + content: ""; + width: 30px; + height: 30px; + display: block; + visibility: visible; + position: absolute; + top: 0px; + right: 0; + background: url("../images/libraryzurb/smily-white.png") no-repeat; +} +.page-booklists .main .view-booklist-slideshow .owl-carousel .owl-pagination { + display: none; +} +.page-booklists .main .view-booklist-slideshow .owl-carousel .owl-buttons { + width: 100%; + position: absolute; + top: 40%; +} +.page-booklists .main .view-booklist-slideshow .owl-carousel .owl-buttons .owl-prev { + float: left; + visibility: hidden; + position: relative; + opacity: 1; +} +.page-booklists .main .view-booklist-slideshow .owl-carousel .owl-buttons .owl-prev:before { + content: ""; + width: 30px; + height: 30px; + display: block; + visibility: visible; + position: absolute; + top: 0; + left: -40px; + background: url("../images/libraryzurb/left-blue-arrow.png") no-repeat; + background-size: 25px; +} +.page-booklists .main .view-booklist-slideshow .owl-carousel .owl-buttons .owl-next { + float: right; + visibility: hidden; + position: relative; + opacity: 1; +} +.page-booklists .main .view-booklist-slideshow .owl-carousel .owl-buttons .owl-next:after { + content: ""; + width: 30px; + height: 30px; + display: block; + visibility: visible; + position: absolute; + top: 0; + right: -37px; + background: url("../images/libraryzurb/right-blue-arrow.png") no-repeat; + background-size: 25px; + position: absolute; +} + +/**end of booklist page**/ +/**activities page **/ +.not-logged-in.section-activities .block-views-reward-earn-block-1 .block-title:after { + background: none; +} + +.logged-in.section-activities .block-views-reward-earn-block-1 { + display: none; +} + +.section-activities { + /* .pull-9.sidebar, .pull-9.sidebar2 { + width: 29.53%; + right: 71.4%; + padding-left: 0px; + padding-right: 0px; + } */ +} +.section-activities .pagination.pager { + float: none !important; + margin-right: 0 !important; +} +.section-activities h1#page-title { + display: none; +} +.section-activities .main .views-field-nothing h2 { + /* text-transform: uppercase; */ +} +.section-activities .main .view-activities-page-, .section-activities .main .block-block { + margin-bottom: 35px; +} +@media (max-width: 767px) { + .section-activities .main .view-activities-page-, .section-activities .main .block-block { + margin-bottom: 25px; + } +} +.section-activities .main .view-activities-page- h2, .section-activities .main .view-activities-page- .block-title, .section-activities .main .block-block h2, .section-activities .main .block-block .block-title { + font-size: 28px; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + border: none !important; + outline: none !important; + color: #000; +} +.section-activities .main .view-activities-page- a.button, .section-activities .main .block-block a.button { + margin-bottom: 0; + margin-left: 0; +} +.section-activities .main .view-activities-page- div a, .section-activities .main .block-block div a { + padding-left: 20px; +} +.section-activities .pull-9.sidebar3 { + width: 29.53%; + right: 67.4%; + margin-bottom: 35px; +} +@media (max-width: 767px) { + .section-activities .pull-9.sidebar3 { + width: 100%; + right: 0; + margin-bottom: 25px; + } +} +@media (min-width: 768px) and (max-width: 1025px) { + .section-activities .pull-9.sidebar3 { + width: 38%; + right: 63.4%; + padding-left: 0; + padding-right: 0; + } +} +.section-activities .sidebar3 { + background: #267fda !important; + overflow: hidden; + border-radius: 20px; + color: #fff; + position: relative; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + margin-bottom: 35px; + float: none !important; +} +@media (max-width: 767px) { + .section-activities .sidebar3 { + margin-bottom: 25px; + } +} +.section-activities .sidebar3 .block-block { + padding: 0px 6%; +} +.section-activities .sidebar3 .block-block .block-title { + color: #fff !important; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + border: none !important; + outline: none !important; + margin-top: 17px; +} +.section-activities .sidebar3 .block-block div { + font-family: Arialbold !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + -moz-font-smoothing: grayscale !important; + font-size: 18px; +} +.section-activities .sidebar3 .block-block a.button { + margin: 10px 0px 0px 0px; +} +.section-activities .sidebar3 .block-views { + padding: 0px 6%; +} +.section-activities .sidebar3 .block-views:first-child ul { + list-style: none !important; +} +.section-activities .sidebar3 .block-views .view { + counter-reset: section; +} +.section-activities .sidebar3 .block-views .view .view-content ul .views-row { + margin-left: 0; +} +.section-activities .sidebar3 .block-views .view .view-content ul .views-row .views-field-title a:before { + counter-increment: section; + content: " " counter(section,decimal) ". "; + padding-right: 5px; + display: inline-block; +} +.section-activities .sidebar3 .block-views .view-footer { + margin-top: 30px; +} +.section-activities .sidebar3 .block-views .view-footer p a { + color: #000; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + border-radius: 10px; + background: #fdeb52 !important; + text-transform: capitalize; + border: none; + padding: 0.5625em 20px; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); +} +.section-activities .sidebar3 .block-views .view-footer p a:hover { + color: #000; + background: #f7fc63 !important; + opacity: 1; + outline: none; + text-decoration: none !important; +} +.section-activities .sidebar3 .block-views .view-footer p a:focus, .section-activities .sidebar3 .block-views .view-footer p a.active { + color: #000; + background: #f0f811 !important; + outline: 1; + opacity: 1; + text-decoration: none !important; +} +@media screen and (min-width: 768px) and (max-width: 1100px) { + .section-activities .sidebar3 .block-views .view-footer p a { + font-size: 17px; + } +} +.section-activities .sidebar3 .block-views .views-field-title { + padding-bottom: 10px; +} +.section-activities .sidebar3 .block-views .views-field-count .views-label { + padding-right: 32px; + position: relative; + padding-right: 34px; +} +.section-activities .sidebar3 .block-views .views-field-count .views-label:after { + content: ""; + width: 30px; + height: 30px; + display: block; + visibility: visible; + position: absolute; + top: 0px; + right: 0; + background: url("../images/libraryzurb/smily-white.png") no-repeat; +} +.section-activities .sidebar3 .block-views .views-field-count .views-label:after { + top: -4px !important; +} +.section-activities .sidebar3 .block-views h3 { + color: #fff; + margin-top: 20px; + font-size: 17px; + font-family: Arialbold !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + -moz-font-smoothing: grayscale !important; + text-transform: capitalize; +} +.section-activities .sidebar3 .block-views ul { + list-style: none; + margin-left: 0; +} +.section-activities .sidebar3 .block-views ul li { + margin-left: 0; +} +.section-activities .sidebar3 .block-views ul a { + color: #fff; + font-family: arial !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; + font-size: 18px; + text-decoration: underline; +} + +/**end of activity page**/ +/**css for program-dashboard page**/ +.page-admin-content-dashboard { + font-family: "Source Sans Pro" !important; + font-weight: normal !important; + font-style: normal !important; + font: 81.3%/1.538em "Lucida Grande","Lucida Sans Unicode",sans-serif !important; +} +.page-admin-content-dashboard .block-menu-block .menu-name-main-menu ul ul, .page-admin-content-dashboard .section-library-search h2, .page-admin-content-dashboard .top-bar.expanded .main-nav .back h5 { + font-family: "Source Sans Pro" !important; + font-weight: normal !important; + font-style: normal !important; +} +.page-admin-content-dashboard .row { + max-width: 94.6%; +} +.page-admin-content-dashboard h1, .page-admin-content-dashboard h2, .page-admin-content-dashboard h3, .page-admin-content-dashboard blockquote::before, .page-admin-content-dashboard blockquote::after, .page-admin-content-dashboard .aside, .page-admin-content-dashboard .block-menu-block .menu-name-main-menu ul, .page-admin-content-dashboard .special { + font-family: "Arvo" !important; + font-weight: normal !important; + font-style: normal !important; +} +.page-admin-content-dashboard table { + width: 100% !important; + font-size: 0.923em !important; + margin: 0px 0px 10px !important; + border: 1px solid #BEBFB9 !important; +} +.page-admin-content-dashboard div, .page-admin-content-dashboard span, .page-admin-content-dashboard a, .page-admin-content-dashboard form, .page-admin-content-dashboard input, .page-admin-content-dashboard ul, .page-admin-content-dashboard li, .page-admin-content-dashboard select, .page-admin-content-dashboard textarea, .page-admin-content-dashboard label, .page-admin-content-dashboard legend, .page-admin-content-dashboard caption { + padding: 0px !important; + border: 0px none !important; + vertical-align: baseline !important; +} +.page-admin-content-dashboard .quicktabs_main input[type="submit"], .page-admin-content-dashboard .quicktabs_main button { + width: auto !important; +} +.page-admin-content-dashboard .quicktabs_main { + overflow: visible !important; +} +.page-admin-content-dashboard .chosen-container.chosen-with-drop .chosen-drop { + padding-bottom: 20px !important; + padding-left: 5px !important; +} +.page-admin-content-dashboard .chosen-container .chosen-results { + overflow: visible !important; +} +.page-admin-content-dashboard ul.quicktabs-tabs { + text-align: left !important; +} +.page-admin-content-dashboard ul.quicktabs-tabs li { + border: none !important; + text-transform: capitalize !important; +} +.page-admin-content-dashboard ul.quicktabs-tabs li a { + font-family: "Source Sans Pro" !important; + font-weight: normal !important; + font-style: normal !important; + color: #000 !important; + padding-right: 7px !important; +} + +/**end program dashboard page**/ +/**css for progress page**/ +.section-progress .l-main { + display: table; + width: 100%; + border-collapse: separate; + border-spacing: 20px; + position: relative; +} +@media (max-width: 767px) { + .section-progress .l-main { + border-spacing: 0px; + max-width: 97%; + margin: 0 auto; + } +} +.section-progress .main { + background: #267fda !important; + overflow: hidden; + border-radius: 20px; + color: #fff; + position: relative; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + padding-left: 0; + padding-right: 0; + display: table-row; + width: 100%; + position: static; + margin-bottom: 35px; +} +@media (max-width: 767px) { + .section-progress .main { + margin-bottom: 25px; + } +} +.section-progress .main #page-title { + color: #fff; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + padding-top: 26px; + padding-bottom: 25px; + font-size: 28px; + height: 110px; + border-bottom: medium none; + margin-top: -1px; + padding-left: 36px; + z-index: 0; + position: relative; + border-radius: 20px; + overflow: hidden; +} +@media (max-width: 767px) { + .section-progress .main #page-title { + font-size: 22px; + } +} +.section-progress .main #page-title:after { + content: ""; + width: 100%; + height: 110px; + display: block; + visibility: visible; + position: absolute; + top: 0; + left: 0; + background: url("../images/libraryzurb/background-saffron.png") no-repeat; + background-position: -35px 10px; + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -ms-transform: rotate(180deg); + -o-transform: rotate(180deg); + transform: rotate(180deg); + z-index: -1; +} +.section-progress .main .view-calendar-sticker { + color: #fff; + border-radius: 20px; + background: #fdeb52; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + width: 40%; + display: table-cell; +} +@media (max-width: 767px) { + .section-progress .main .view-calendar-sticker { + width: 100%; + display: inline-block; + } +} +.section-progress .main .view-calendar-sticker .view-header { + width: 100%; + padding: 20px 0 20px 20px; + left: 0; +} +.section-progress .main .view-calendar-sticker .view-header div { + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; +} +.section-progress .main .view-calendar-sticker .view-header div.prg_lib { + color: #000; + line-height: 1; + padding-bottom: 20px; + font-size: 15px; +} +.section-progress .main .view-calendar-sticker .view-header div.days_progress { + font-size: 26px; + color: #cc0d25; + line-height: 1; + padding-bottom: 20px; +} +.section-progress .main .view-calendar-sticker .view-header p { + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + margin-bottom: 0; + color: #000; + line-height: 1; + padding-bottom: 20px; +} +@media screen and (min-width: 940px) { + .section-progress .main .view-calendar-sticker .view-header p.heading { + font-size: 21px !important; + } +} +@media screen and (min-width: 940px) { + .section-progress .main .view-calendar-sticker .view-header p.statement { + font-size: 15px !important; + } +} +.section-progress .main .view-calendar-sticker .view-content { + width: 100%; + display: table-row; +} +.section-progress .main .view-calendar-sticker .view-content .views-row { + width: 20%; + display: table-cell; + vertical-align: bottom; +} +.section-progress .main .view-calendar-sticker .view-content .views-row img { + width: 100% !important; + border: none; +} +.section-progress .main .block.block-views { + width: 35%; + display: table-cell; + padding: 10px; + background: #fff; + color: #000; + border-radius: 20px; + position: relative; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); +} +@media (max-width: 767px) { + .section-progress .main .block.block-views { + width: 100%; + display: inline-block; + } +} +.section-progress .main .block.block-views .view-prize-won-for-progress-page { + width: 100%; + display: table; + border-spacing: 0 !important; +} +.section-progress .main .block.block-views .view-prize-won-for-progress-page .view-header { + width: 29%; + display: table-cell; + position: relative; +} +.section-progress .main .block.block-views .view-prize-won-for-progress-page .view-header div { + font-size: 20px; + color: #267fda; + position: absolute; + top: 6px; + text-transform: capitalize; + width: 300px; +} +.section-progress .main .block.block-views .view-prize-won-for-progress-page .view-header span { + font-size: 13px; + text-transform: uppercase; +} +.section-progress .main .block.block-views .view-prize-won-for-progress-page .view-content { + width: 70%; + display: table-cell; + padding-top: 38px; +} +.section-progress .main .block.block-views .view-prize-won-for-progress-page .view-content .item-list ul li.views-row { + margin-bottom: 10px !important; + font-size: 13px !important; +} +.section-progress .main .block.block-views .view-prize-won-for-progress-page .item-list { + width: 100%; + display: table-row; + height: 60px; +} +.section-progress .main .block.block-views .view-prize-won-for-progress-page .item-list ul.pager { + position: absolute; + right: 20px; +} +.section-progress .main .block.block-views .view-prize-won-for-progress-page .item-list ul.pager li { + position: relative; +} +.section-progress .main .block.block-views .view-prize-won-for-progress-page .item-list ul.pager li.pager-current { + display: none; +} +.section-progress .main .block.block-views .view-prize-won-for-progress-page .item-list ul.pager li a { + font-size: 22px; + text-transform: capitalize; +} +.section-progress .main .block.block-auto-role-allocation { + width: 30%; + display: table-cell; + background: #f98515; + vertical-align: middle; + text-align: center; + padding: 0 5%; + border-radius: 20px; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); +} +@media (max-width: 767px) { + .section-progress .main .block.block-auto-role-allocation { + width: 100%; + display: inline-block; + } +} +.section-progress .main .block.block-auto-role-allocation > div:nth-of-type(2) { + line-height: 1.2; + font-size: 18px; +} +.section-progress .main .block.progress-calendar { + width: 100%; + max-width: 95%; + margin: 20px auto; +} +.section-progress .main .block.progress-calendar div.fc-event-container > div, .section-progress .main .block.progress-calendar div.ui-draggable.ui-draggable-handle { + text-align: center !important; +} +.section-progress .main .block.progress-calendar div.fc-event-container > div img, .section-progress .main .block.progress-calendar div.ui-draggable.ui-draggable-handle img { + width: 55px !important; +} +.section-progress .main .block.progress-calendar div.event_no { + font-size: 14px; + line-height: 1; +} +@media (min-width: 768px) and (max-width: 1025px) { + .section-progress .main .block.progress-calendar div.event_no { + font-size: 11px; + } +} +.section-progress .main .block.progress-calendar div.reward_text { + font-size: 14px; + line-height: 1; + padding-top: 10px; + background: #f7fc63; +} +@media (min-width: 768px) and (max-width: 1025px) { + .section-progress .main .block.progress-calendar div.reward_text { + font-size: 11px; + } +} +.section-progress .main .block.progress-calendar div.reward_image { + background: #f7fc63; + padding-top: 10px; +} +.section-progress .main .block.progress-calendar.contextual-links-region { + position: static; +} +.section-progress .main .block.progress-calendar .block-title { + display: none; +} +.section-progress .main .block.progress-calendar #calendar .fc-header { + border: none; + background: none; +} +.section-progress .main .block.progress-calendar #calendar .fc-header .fc-header-center h2 { + color: #fff; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + border-bottom: none; +} +.section-progress .main .block.progress-calendar #calendar .fc-header tbody { + border-top: none; +} +.section-progress .main .block.progress-calendar #calendar .fc-header td span.fc-button { + background: #fdeb52; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + opacity: 1 !important; + color: #000; +} +.section-progress .main .block.progress-calendar #calendar .fc-header td span.fc-button.fc-button-agendaWeek, .section-progress .main .block.progress-calendar #calendar .fc-header td span.fc-button.fc-button-agendaDay, .section-progress .main .block.progress-calendar #calendar .fc-header td span.fc-button.fc-button-month { + display: none; +} +.section-progress .main .block.progress-calendar #calendar .fc-content { + color: #000; +} +.section-progress .main .block.progress-calendar #calendar .fc-content .fc-border-separate { + margin-bottom: 0; + border: none; +} +.section-progress .main .block.progress-calendar #calendar .fc-content .fc-border-separate .fc-day-header { + padding-bottom: 5px; + color: #fff; + font-weight: normal !important; +} +.section-progress .main .block.progress-calendar #calendar .fc-content .fc-border-separate tbody { + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); +} +.section-progress .main .block.progress-calendar #calendar .fc-content .fc-widget-header { + border: none; + background: #267fda; +} +.section-progress .main .block.progress-calendar #calendar .fc-content .fc-widget-content { + border: 1px solid #f6511d; +} +.section-progress .main .block.progress-calendar #calendar .fc-content .fc-day .fc-day-content { + font-size: 0; +} +.section-progress .main .block.progress-calendar #calendar .fc-content .fc-day .fc-day-number { + color: #267fda; +} +.section-progress .main .block.progress-calendar #calendar .fc-content .fc-day.fc-state-highlight .fc-day-number { + color: #f6511d !important; +} +.section-progress #print_button { + position: absolute; + top: 2%; + top: 2% \0/IE9 !important; + right: 4%; + width: 200px; + line-height: 30px; + padding: 6px 0px 6px 45px; + font-size: 17px; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + background: #fdeb52 url("../images/libraryzurb/print-calender.png") no-repeat !important; + background-position: 10px !important; + color: #000; + border-radius: 10px; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); +} +@media screen and (-webkit-min-device-pixel-ratio: 0) { + .section-progress #print_button { + top: 4.5% !important; + } +} +@media screen and (min-width: 0) and (min-resolution: 0.001dpcm) { + .section-progress #print_button { + top: 4.5%; + } +} + +/**end of progress page**/ +/**css for indivisual user profile**/ +.page-users-public-profile .main { + display: table; + width: 100%; + border-collapse: separate; + border-spacing: 10px; +} +.page-users-public-profile .main section { + display: inline-block; + width: 43%; + margin-right: 2.5%; + margin-left: 2.5%; + vertical-align: top; +} +.page-users-public-profile .main .block { + background: #267fda !important; + overflow: hidden; + border-radius: 20px; + color: #fff; + position: relative; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); +} +.page-users-public-profile .main .block .block-title { + color: #fff; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + padding-top: 26px; + padding-bottom: 25px; + font-size: 22px; + height: 110px; + border-bottom: medium none; + margin-top: -1px; + padding-left: 36px; + z-index: 0; + position: relative; + border-radius: 20px; + overflow: hidden; +} +@media (max-width: 767px) { + .page-users-public-profile .main .block .block-title { + font-size: 17px; + } +} +.page-users-public-profile .main .block .block-title:after { + content: ""; + width: 100%; + height: 110px; + display: block; + visibility: visible; + position: absolute; + top: 0; + left: 0; + background: url("../images/libraryzurb/background-saffron.png") no-repeat; + background-position: -35px 10px; + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -ms-transform: rotate(180deg); + -o-transform: rotate(180deg); + transform: rotate(180deg); + z-index: -1; +} +.page-users-public-profile .main .block a { + color: #fff; +} +.page-users-public-profile .main .view .views-field-ops { + float: right; +} +.page-users-public-profile .main .view .views-field-ops a.flag { + color: #000; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + border-radius: 10px; + background: #fdeb52 !important; + text-transform: capitalize; + border: none; + padding: 0.5625em 20px; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); +} +.page-users-public-profile .main .view .views-field-ops a.flag:hover { + color: #000; + background: #f7fc63 !important; + opacity: 1; + outline: none; + text-decoration: none !important; +} +.page-users-public-profile .main .view .views-field-ops a.flag:focus, .page-users-public-profile .main .view .views-field-ops a.flag.active { + color: #000; + background: #f0f811 !important; + outline: 1; + opacity: 1; + text-decoration: none !important; +} +.page-users-public-profile .main .view.view-user-public-profile { + display: table-row; + width: 100%; +} +.page-users-public-profile .main .view.view-my-badges { + counter-reset: section; +} +.page-users-public-profile .main .view.view-my-badges .view-content { + display: table; + width: 100%; + padding-left: 3%; + padding-right: 3%; +} +.page-users-public-profile .main .view.view-my-badges .view-content .views-row { + display: table-row; + width: 100%; +} +.page-users-public-profile .main .view.view-my-badges .view-content .views-row .views-field { + display: table-cell; +} +.page-users-public-profile .main .view.view-my-badges .view-content .views-row .views-field.views-field-title { + color: #fff; + font-family: arial !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; +} +.page-users-public-profile .main .view.view-my-badges .view-content .views-row .views-field.views-field-field-badge-image { + position: relative; +} +.page-users-public-profile .main .view.view-my-badges .view-content .views-row .views-field.views-field-field-badge-image:before { + position: absolute; + left: -14px; + top: 15px; +} +.page-users-public-profile .main .view.view-booklist-on-activities-page, .page-users-public-profile .main .view.view-my-book-reviews { + counter-reset: section; +} +.page-users-public-profile .main .view.view-booklist-on-activities-page ul, .page-users-public-profile .main .view.view-my-book-reviews ul { + list-style: none; +} +.page-users-public-profile .main .view.view-booklist-on-activities-page .view-header, .page-users-public-profile .main .view.view-my-book-reviews .view-header { + width: 100%; +} +.page-users-public-profile .main .view.view-booklist-on-activities-page .view-header h3, .page-users-public-profile .main .view.view-my-book-reviews .view-header h3 { + color: #fff; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + padding-top: 26px; + padding-bottom: 25px; + font-size: 22px; + height: 110px; + border-bottom: medium none; + margin-top: -1px; + padding-left: 36px; + z-index: 0; + position: relative; + border-radius: 20px; + overflow: hidden; + margin-top: 0; + border: none !important; + outline: none !important; +} +@media (max-width: 767px) { + .page-users-public-profile .main .view.view-booklist-on-activities-page .view-header h3, .page-users-public-profile .main .view.view-my-book-reviews .view-header h3 { + font-size: 17px; + } +} +.page-users-public-profile .main .view.view-booklist-on-activities-page .view-header h3:after, .page-users-public-profile .main .view.view-my-book-reviews .view-header h3:after { + content: ""; + width: 100%; + height: 110px; + display: block; + visibility: visible; + position: absolute; + top: 0; + left: 0; + background: url("../images/libraryzurb/background-saffron.png") no-repeat; + background-position: -35px 10px; + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -ms-transform: rotate(180deg); + -o-transform: rotate(180deg); + transform: rotate(180deg); + z-index: -1; +} +.page-users-public-profile .main .view.view-booklist-on-activities-page .view-content, .page-users-public-profile .main .view.view-my-book-reviews .view-content { + padding-left: 3%; + padding-right: 3%; +} +.page-users-public-profile .main .view.view-booklist-on-activities-page .view-content .views-field-title a, .page-users-public-profile .main .view.view-my-book-reviews .view-content .views-field-title a { + color: #fff; + font-family: arial !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; + text-transform: capitalize; + font-size: 18px; +} +.page-users-public-profile .main .view.view-booklist-on-activities-page .view-content .views-field-title a:before, .page-users-public-profile .main .view.view-my-book-reviews .view-content .views-field-title a:before { + counter-increment: section; + content: " " counter(section,decimal) ". "; + padding-right: 5px; + display: inline-block; +} +.page-users-public-profile .main .view.view-booklist-on-activities-page .view-content .views-field-count, .page-users-public-profile .main .view.view-my-book-reviews .view-content .views-field-count { + font-family: arial !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; + margin: 10px 0px 0px 10px; +} +.page-users-public-profile .main .view.view-booklist-on-activities-page .view-content .views-field-count .views-label-count, .page-users-public-profile .main .view.view-my-book-reviews .view-content .views-field-count .views-label-count { + position: relative; + padding-right: 34px; +} +.page-users-public-profile .main .view.view-booklist-on-activities-page .view-content .views-field-count .views-label-count:after, .page-users-public-profile .main .view.view-my-book-reviews .view-content .views-field-count .views-label-count:after { + content: ""; + width: 30px; + height: 30px; + display: block; + visibility: visible; + position: absolute; + top: 0px; + right: 0; + background: url("../images/libraryzurb/smily-white.png") no-repeat; +} + +/**end**/ +/**css for user own review and booklist indivisual ***/ +.page-my-reviews .block-quicktabs .quicktabs-wrapper .quicktabs-tabs, .page-my-booklist .block-quicktabs .quicktabs-wrapper .quicktabs-tabs { + background: none !important; +} +.page-my-reviews .block-quicktabs .quicktabs-wrapper .quicktabs-tabs li, .page-my-booklist .block-quicktabs .quicktabs-wrapper .quicktabs-tabs li { + background: none !important; + border: none !important; + outline: none !important; +} +.page-my-reviews .block-quicktabs .quicktabs-wrapper .quicktabs-tabs li a, .page-my-booklist .block-quicktabs .quicktabs-wrapper .quicktabs-tabs li a { + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + font-size: 17px; + background: #fdeb52 !important; + color: #000; + border-radius: 10px; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + text-transform: capitalize !important; + padding: 7px 22px; +} +.page-my-reviews .block-quicktabs .quicktabs-wrapper .quicktabs-tabs li.active, .page-my-booklist .block-quicktabs .quicktabs-wrapper .quicktabs-tabs li.active { + background: none !important; + padding-top: 0 !important; +} +.page-my-reviews .block-quicktabs .quicktabs-wrapper .quicktabs_main, .page-my-booklist .block-quicktabs .quicktabs-wrapper .quicktabs_main { + border: none !important; + outline: none !important; + overflow: hidden !important; +} +.page-my-reviews .view-booklist-on-activities-page, .page-my-booklist .view-booklist-on-activities-page { + counter-reset: section; +} +.page-my-reviews .view-booklist-on-activities-page .view-header h3, .page-my-booklist .view-booklist-on-activities-page .view-header h3 { + color: #000; + font-size: 22px; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + margin-top: 20px; +} +.page-my-reviews .view-booklist-on-activities-page .view-content ul, .page-my-reviews .view-booklist-on-activities-page .view-content ol, .page-my-booklist .view-booklist-on-activities-page .view-content ul, .page-my-booklist .view-booklist-on-activities-page .view-content ol { + list-style: none !important; +} +.page-my-reviews .view-booklist-on-activities-page .view-content ul .views-field-count, .page-my-reviews .view-booklist-on-activities-page .view-content ol .views-field-count, .page-my-booklist .view-booklist-on-activities-page .view-content ul .views-field-count, .page-my-booklist .view-booklist-on-activities-page .view-content ol .views-field-count { + float: right; + position: relative; + bottom: 20px; + margin-right: 15px; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; +} +.page-my-reviews .view-booklist-on-activities-page .view-content ul .views-field-count .views-label-count, .page-my-reviews .view-booklist-on-activities-page .view-content ol .views-field-count .views-label-count, .page-my-booklist .view-booklist-on-activities-page .view-content ul .views-field-count .views-label-count, .page-my-booklist .view-booklist-on-activities-page .view-content ol .views-field-count .views-label-count { + position: relative; + padding-right: 34px; +} +.page-my-reviews .view-booklist-on-activities-page .view-content ul .views-field-count .views-label-count:after, .page-my-reviews .view-booklist-on-activities-page .view-content ol .views-field-count .views-label-count:after, .page-my-booklist .view-booklist-on-activities-page .view-content ul .views-field-count .views-label-count:after, .page-my-booklist .view-booklist-on-activities-page .view-content ol .views-field-count .views-label-count:after { + content: ""; + width: 30px; + height: 30px; + display: block; + visibility: visible; + position: absolute; + top: 0px; + right: 0; + background: url("../images/libraryzurb/smily-white.png") no-repeat; +} +.page-my-reviews .view-booklist-on-activities-page .view-content ul .views-field-title a, .page-my-reviews .view-booklist-on-activities-page .view-content ol .views-field-title a, .page-my-booklist .view-booklist-on-activities-page .view-content ul .views-field-title a, .page-my-booklist .view-booklist-on-activities-page .view-content ol .views-field-title a { + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + font-size: 21px; + text-transform: capitalize; +} +.page-my-reviews .view-booklist-on-activities-page .view-content ul .views-field-title a:before, .page-my-reviews .view-booklist-on-activities-page .view-content ol .views-field-title a:before, .page-my-booklist .view-booklist-on-activities-page .view-content ul .views-field-title a:before, .page-my-booklist .view-booklist-on-activities-page .view-content ol .views-field-title a:before { + counter-increment: section; + content: " " counter(section,decimal) ". "; + padding-right: 5px; + display: inline-block; +} +.page-my-reviews .view-my-book-reviews, .page-my-booklist .view-my-book-reviews { + counter-reset: section; +} +.page-my-reviews .view-my-book-reviews .view-header h3, .page-my-booklist .view-my-book-reviews .view-header h3 { + color: #000; + font-size: 22px; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + margin-top: 20px; +} +.page-my-reviews .view-my-book-reviews .view-content table, .page-my-booklist .view-my-book-reviews .view-content table { + border: none !important; + outline: none !important; +} +.page-my-reviews .view-my-book-reviews .view-content table tbody, .page-my-booklist .view-my-book-reviews .view-content table tbody { + border: none !important; + outline: none !important; +} +.page-my-reviews .view-my-book-reviews .view-content .views-row, .page-my-booklist .view-my-book-reviews .view-content .views-row { + display: table; + width: 100%; +} +.page-my-reviews .view-my-book-reviews .view-content .views-row .views-field, .page-my-booklist .view-my-book-reviews .view-content .views-row .views-field { + display: table-row; +} +.page-my-reviews .view-my-book-reviews .view-content .views-row .views-field.views-field-field-book-cover-image-link, .page-my-booklist .view-my-book-reviews .view-content .views-row .views-field.views-field-field-book-cover-image-link { + width: 40%; + float: left; +} +.page-my-reviews .view-my-book-reviews .view-content .views-row .views-field.views-field-title, .page-my-reviews .view-my-book-reviews .view-content .views-row .views-field.views-field-body, .page-my-reviews .view-my-book-reviews .view-content .views-row .views-field.views-field-count, .page-my-reviews .view-my-book-reviews .view-content .views-row .views-field.views-field-view-node, .page-my-booklist .view-my-book-reviews .view-content .views-row .views-field.views-field-title, .page-my-booklist .view-my-book-reviews .view-content .views-row .views-field.views-field-body, .page-my-booklist .view-my-book-reviews .view-content .views-row .views-field.views-field-count, .page-my-booklist .view-my-book-reviews .view-content .views-row .views-field.views-field-view-node { + width: 60%; + float: right; +} +.page-my-reviews .view-my-book-reviews .view-content .views-row .views-field.views-field-title a, .page-my-booklist .view-my-book-reviews .view-content .views-row .views-field.views-field-title a { + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + font-size: 21px; + text-transform: capitalize; +} +.page-my-reviews .view-my-book-reviews .view-content .views-row .views-field.views-field-body, .page-my-booklist .view-my-book-reviews .view-content .views-row .views-field.views-field-body { + font-size: 18px; + font-family: arial !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; +} +.page-my-reviews .view-my-book-reviews .view-content .views-row .views-field.views-field-count, .page-my-booklist .view-my-book-reviews .view-content .views-row .views-field.views-field-count { + text-align: right; +} +.page-my-reviews .view-my-book-reviews .view-content .views-row .views-field.views-field-count .views-label-count, .page-my-booklist .view-my-book-reviews .view-content .views-row .views-field.views-field-count .views-label-count { + position: relative; + padding-right: 34px; +} +.page-my-reviews .view-my-book-reviews .view-content .views-row .views-field.views-field-count .views-label-count:after, .page-my-booklist .view-my-book-reviews .view-content .views-row .views-field.views-field-count .views-label-count:after { + content: ""; + width: 30px; + height: 30px; + display: block; + visibility: visible; + position: absolute; + top: 0px; + right: 0; + background: url("../images/libraryzurb/smily-white.png") no-repeat; +} +.page-my-reviews .view-my-book-reviews .view-content .views-row .views-field.views-field-view-node a, .page-my-booklist .view-my-book-reviews .view-content .views-row .views-field.views-field-view-node a { + color: #000; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + border-radius: 10px; + background: #fdeb52 !important; + text-transform: capitalize; + border: none; + padding: 0.5625em 20px; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); +} +.page-my-reviews .view-my-book-reviews .view-content .views-row .views-field.views-field-view-node a:hover, .page-my-booklist .view-my-book-reviews .view-content .views-row .views-field.views-field-view-node a:hover { + color: #000; + background: #f7fc63 !important; + opacity: 1; + outline: none; + text-decoration: none !important; +} +.page-my-reviews .view-my-book-reviews .view-content .views-row .views-field.views-field-view-node a:focus, .page-my-reviews .view-my-book-reviews .view-content .views-row .views-field.views-field-view-node a.active, .page-my-booklist .view-my-book-reviews .view-content .views-row .views-field.views-field-view-node a:focus, .page-my-booklist .view-my-book-reviews .view-content .views-row .views-field.views-field-view-node a.active { + color: #000; + background: #f0f811 !important; + outline: 1; + opacity: 1; + text-decoration: none !important; +} + +/**end**/ +/**page register**/ +.page-user-register #user-register-form #edit-field-user-random-list-1, .page-user-register #user-register-form #edit-field-user-random-list-3 { + width: 23%; + float: left; +} +.page-user-register #user-register-form #edit-field-user-random-list-2 { + width: 19%; + float: left; +} +.page-user-register #user-register-form #edit-account { + width: 100%; + display: inline-block; +} +.page-user-register #edit-profile-main-field-receive-notifications div.description { + font-size: 14px; + font-family: Arialbold !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + -moz-font-smoothing: grayscale !important; + color: #4D4D4D; +} + +/*css for event page*/ +.section-events .main .view-events .view-content h3 { + font-size: 18px; + color: #fff; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + border: none !important; + outline: none !important; + background: #f98515; + padding: 4px 20px 6px; + margin-top: 35px; +} +.section-events .main .view-events .view-content .views-row { + display: table; + width: 96%; + margin: auto; + margin-top: 10px; + margin-bottom: 10px; +} +@media (min-width: 768px) and (max-width: 1025px) { + .section-events .main .view-events .view-content .views-row { + border-bottom: 1px solid #000; + padding-bottom: 10px; + } +} +.section-events .main .view-events .view-content .views-row div { + display: table-row; + float: left; + vertical-align: middle; + color: #000; + font-size: 18px; + font-family: arial !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; +} +@media (min-width: 768px) and (max-width: 1025px) { + .section-events .main .view-events .view-content .views-row div { + float: none; + } +} +.section-events .main .view-events .view-content .views-row div a { + color: #000; + font-size: 18px; + font-family: arial !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; +} +.section-events .main .view-events .view-content .views-row div:nth-of-type(1) { + width: 60%; +} +@media (min-width: 768px) and (max-width: 1025px) { + .section-events .main .view-events .view-content .views-row div:nth-of-type(1) { + width: 100%; + } +} +.section-events .main .view-events .view-content .views-row div:nth-of-type(2), .section-events .main .view-events .view-content .views-row div:nth-of-type(3) { + width: 20%; +} +@media (min-width: 768px) and (max-width: 1025px) { + .section-events .main .view-events .view-content .views-row div:nth-of-type(2), .section-events .main .view-events .view-content .views-row div:nth-of-type(3) { + width: 100%; + } +} +.section-events .main .pagination.pager { + margin-top: 35px; +} + +/*group-registeration page**/ +.page-group-lead-register .form-item-name, .page-admin-people-p2rp-create-staff .form-item-name { + display: block !important; +} + +.page-admin-people-p2rp-create.page-admin-people-p2rp-create-staff #user-register-form .form-item.form-type-textfield.form-item-name { + display: block !important; +} + +/**follow page**/ +.page-follow .main .block .block-title { + color: #000; + font-size: 28px; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + border: none !important; + outline: none !important; +} + +/** + * Styles for the Post-Footer area. + */ +.post-footer { + background: url("../images/libraryzurb/header-background.png") no-repeat; + background-size: cover; + color: white; +} +.post-footer a { + color: #f2f2f2; +} + +.l-footer { + border-style: solid; + border-width: 1px; + border-color: transparent; + margin-bottom: 1.25em; + padding: 1.25em; + background: transparent; + margin-bottom: 0; + overflow: auto; +} +.l-footer > :first-child { + margin-top: 0; +} +.l-footer > :last-child { + margin-bottom: 0; +} +.l-footer h1, .l-footer h2, .l-footer h3, .l-footer h4, .l-footer h5, .l-footer h6, .l-footer p { + color: #fff; +} +.l-footer h1, .l-footer h2, .l-footer h3, .l-footer h4, .l-footer h5, .l-footer h6 { + line-height: 1; + margin-bottom: 0.625em; +} +.l-footer h1.subheader, .l-footer h2.subheader, .l-footer h3.subheader, .l-footer h4.subheader, .l-footer h5.subheader, .l-footer h6.subheader { + line-height: 1.4; +} +.l-footer .block { + font-size: 0.85em; +} +.l-footer .columns { + padding: 0; +} +.l-footer .block-block-10, +.l-footer .footer-logo { + float: right; +} +.l-footer .block-block-10 a:hover, +.l-footer .footer-logo a:hover { + background-color: transparent; +} +.l-footer .block-menu { + float: left; +} +.l-footer .block-menu li { + float: left; + list-style: none; + list-style-image: none; + padding-right: 0.5em; + margin-left: 0.5em; + border-right: 1px solid; +} +@media screen and (max-width: 730px) { + .l-footer .block-menu li { + float: none; + border: 0; + margin-left: 0; + padding-right: 0; + } +} +.l-footer .block-menu li.first { + margin-left: 0; + padding-left: 0; +} +.l-footer .block-menu li.last { + border-right: 0; +} +.l-footer .block-block-14, +.l-footer .copyright { + line-height: 1.6; + text-align: right; +} +.l-footer img { + max-width: 30px; +} + +/** + * Styles for the Pre-Header area. + */ +.pre-header { + background-color: #fdeb52; + color: #000; + font-size: 14px; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + padding: 3px 12px 19px 0px; + display: inline-block; +} +@media (max-width: 767px) { + .pre-header { + padding: 0; + } +} +.pre-header a { + color: #f2f2f2; + padding: 0 5px; +} +.pre-header p { + margin-bottom: 0; +} +.pre-header ul { + margin: 0 auto 1.0625em auto; + margin-left: -1.375em; + margin-right: 0; + padding: 0; + list-style: none; + overflow: hidden; + margin-bottom: 0; +} +.pre-header ul > li { + list-style: none; + float: left; + margin-left: 1.375em; + display: block; +} +.pre-header ul > li > * { + display: block; +} +.pre-header .pre-header-left { + padding: 0; +} +.pre-header .pre-header-left .breadcurm { + width: 30%; + float: left; +} +@media (min-width: 768px) and (max-width: 1025px) { + .pre-header .pre-header-left .breadcurm { + width: 100%; + float: none; + display: inline-block; + } +} +.pre-header .pre-header-left .breadcurm ul { + margin: 0; + position: relative; + top: 10px; + border: none !important; + outline: none !important; + background: transparent; +} +.pre-header .pre-header-left .breadcurm ul li { + position: relative; +} +.pre-header .pre-header-left .breadcurm ul li:first-child { + content: " "; +} +.pre-header .pre-header-left .breadcurm ul li:before { + content: " > "; + width: 20px; + height: 20px; + text-align: center; + color: #000; + left: -30px; + top: 0; + position: absolute; + font-size: 17px; +} +.pre-header .pre-header-left .breadcurm ul li.current a { + color: #000; +} +.pre-header .pre-header-left .breadcurm ul li a { + color: #267fda; + font-family: arial !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; + text-transform: capitalize; + font-size: 17px; + float: left; +} +.pre-header .pre-header-left .top-menu { + width: 70%; + float: right; +} +@media (min-width: 768px) and (max-width: 1025px) { + .pre-header .pre-header-left .top-menu { + width: 100%; + display: inline-block; + float: none; + } +} +.pre-header .pre-header-left section .view .view-content { + float: right; + position: relative; + top: 15px; +} +@media (min-width: 768px) and (max-width: 1025px) { + .pre-header .pre-header-left section .view .view-content { + float: none; + text-align: left; + left: 10px; + top: 0; + } +} +.pre-header .pre-header-left section .view .views-field { + float: left; + margin-left: 10px; +} +.pre-header .pre-header-left section .view .views-field a { + background-color: #267fda; + padding: 2px 12px 5px; + border-radius: 10px; + font-size: 19px; + color: #fff; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); +} +.pre-header .pre-header-left section .view .views-field a.newclass { + background-color: #cc0d25 !important; +} +.pre-header .pre-header-left section .view .views-field a.msg { + padding: 2px 12px 5px 33px !important; + background: #267fda url("../images/libraryzurb/msg-img.png"); + background-repeat: no-repeat; + background-position: 10px 8px; +} +.pre-header .pre-header-left section .view .views-field.views-field-name a { + color: #000 !important; + background: none !important; + border: none !important; + font-size: 14px; + box-shadow: none !important; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; +} +.pre-header .pre-header-right { + padding: 0; +} +.pre-header .pre-header-right li { + float: right; +} + +#topmostbranding { + max-width: 100%; + padding: 3px 0.5em; + display: inline-block; + float: right; +} +@media (max-width: 767px) { + #topmostbranding { + padding: 0; + } +} + +@media (max-width: 767px) { + #citylinks { + display: none; + } +} + +@media (min-width: 768px) and (max-width: 1025px) { + #mobile-header { + display: none; + } +} +@media (min-width: 1026px) { + #mobile-header { + display: none; + } +} +@media (max-width: 767px) { + #mobile-header { + padding-left: 0; + padding-right: 0; + } +} +#mobile-header button { + float: left; + margin-left: 10px; + margin-bottom: 0; + margin-top: 10px; + border: none !important; + outline: none !important; + border-radius: none !important; + position: relative; + padding: 17px; + box-shadow: none !important; + z-index: 9; +} +#mobile-header button:hover, #mobile-header button:focus { + background: #fdeb52 !important; +} +#mobile-header button:after { + content: ""; + width: 35px; + height: 5px; + display: block; + visibility: visible; + position: absolute; + top: 5px; + left: 0; + border-top: 5px solid #f6511d; + box-shadow: 0px 10px 0px 0px #f6511d, 0px 20px 0px 0px #f6511d; +} +#mobile-header .block.block-private-msg-custom { + border-radius: none !important; + box-shadow: none !important; + margin-bottom: 0 !important; + padding: 0 !important; + background: none; + display: none; +} +#mobile-header .block.block-private-msg-custom .views-row { + margin-bottom: 0; +} +#mobile-header .block.block-private-msg-custom .views-row .views-field a { + background: #267fda; + padding: 10px 0px; + border-bottom: 1px solid #fff; +} +#mobile-header .block.block-private-msg-custom .views-row .views-field a.newclass { + background: #cc0d25 !important; +} +#mobile-header .block.block-private-msg-custom .views-row .views-field a.msg { + position: relative; +} +#mobile-header .block.block-private-msg-custom .views-row .views-field a.msg:before { + content: ""; + width: 30px; + height: 20px; + display: inline-block; + position: absolute; + margin-left: -32px; + background: url("../images/libraryzurb/msg-img.png") no-repeat; + background-position: 6px 1px !important; +} +#mobile-header .block.block-private-msg-custom .mobile_menu li, #mobile-header .block.block-private-msg-custom .mobile_menu a { + width: 100%; + display: inline-block; + font-size: 17px; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + padding-left: 0; + text-align: center; + color: #fff; +} +#mobile-header .block.block-private-msg-custom .mobile_menu .menu { + line-height: 1; +} +#mobile-header .block.block-private-msg-custom .mobile_menu .menu li { + margin-left: 0; +} +#mobile-header .block.block-private-msg-custom .mobile_menu .menu li a { + padding: 10px 0; + border-bottom: 1px solid #fff; + background: #f6511d; + overflow: visible; +} +#mobile-header .block.block-private-msg-custom .mobile_menu .menu li a:hover, #mobile-header .block.block-private-msg-custom .mobile_menu .menu li a:focus { + border-bottom: 1px solid #f6511d; + background: #fff; + color: #f6511d !important; +} +#mobile-header .block.block-private-msg-custom .mobile_menu .menu li a:before { + content: ""; + width: 43px; + height: 25px; + display: inline-block; + position: absolute; + margin-left: -46px; + background-position: -5px -7px !important; + background-size: 63px !important; + margin-top: -6px; +} +#mobile-header .block.block-private-msg-custom .mobile_menu .menu li a.progress { + height: auto; + margin-bottom: 0; + padding: 10px 0; + border-left: none; + border-right: none; + border-top: none; + font-weight: normal; +} +#mobile-header .block.block-private-msg-custom .mobile_menu .menu li a.progress:before { + background: url("../images/libraryzurb/progress.png") no-repeat; +} +#mobile-header .block.block-private-msg-custom .mobile_menu .menu li a.progress:hover:before, #mobile-header .block.block-private-msg-custom .mobile_menu .menu li a.progress:focus:before { + background: url("../images/libraryzurb/progress_hover.png") no-repeat; +} +#mobile-header .block.block-private-msg-custom .mobile_menu .menu li a.activities:before { + background: url("../images/libraryzurb/activities.png") no-repeat; +} +#mobile-header .block.block-private-msg-custom .mobile_menu .menu li a.activities:hover:before, #mobile-header .block.block-private-msg-custom .mobile_menu .menu li a.activities:focus:before { + background: url("../images/libraryzurb/activities_hover.png") no-repeat; +} +#mobile-header .block.block-private-msg-custom .mobile_menu .menu li a.rewards:before { + background: url("../images/libraryzurb/rewards.png") no-repeat; +} +#mobile-header .block.block-private-msg-custom .mobile_menu .menu li a.rewards:hover:before, #mobile-header .block.block-private-msg-custom .mobile_menu .menu li a.rewards:focus:before { + background: url("../images/libraryzurb/rewards_hover.png") no-repeat; +} +#mobile-header .block.block-private-msg-custom .mobile_menu .menu li a.events:before { + background: url("../images/libraryzurb/events.png") no-repeat; +} +#mobile-header .block.block-private-msg-custom .mobile_menu .menu li a.events:hover:before, #mobile-header .block.block-private-msg-custom .mobile_menu .menu li a.events:focus:before { + background: url("../images/libraryzurb/events_hover.png") no-repeat; +} +#mobile-header .block.block-private-msg-custom .mobile_menu .menu li a.reviews:before { + background: url("../images/libraryzurb/reviews.png") no-repeat; +} +#mobile-header .block.block-private-msg-custom .mobile_menu .menu li a.reviews:hover:before, #mobile-header .block.block-private-msg-custom .mobile_menu .menu li a.reviews:focus:before { + background: url("../images/libraryzurb/reviewactive.png") no-repeat; +} +#mobile-header .block.block-private-msg-custom .mobile_menu .menu li a.photos:before { + background: url("../images/libraryzurb/photosnvideos.png") no-repeat; +} +#mobile-header .block.block-private-msg-custom .mobile_menu .menu li a.photos:hover:before, #mobile-header .block.block-private-msg-custom .mobile_menu .menu li a.photos:focus:before { + background: url("../images/libraryzurb/photos_videos_hover.png") no-repeat; +} +#mobile-header .block.block-private-msg-custom .mobile_menu .menu li a.current-program:before { + background: url("../images/libraryzurb/current-programs.png") no-repeat; +} +#mobile-header .block.block-private-msg-custom .mobile_menu .menu li a.current-program:hover:before, #mobile-header .block.block-private-msg-custom .mobile_menu .menu li a.current-program:focus:before { + background: url("../images/libraryzurb/currentprogs_hover.png") no-repeat; +} +#mobile-header .block.block-views { + margin-bottom: 0 !important; + margin-right: 10px; + float: right; + margin-top: 17px; +} +#mobile-header .block.block-views .views-field-name a.username { + color: #000 !important; +} +#mobile-header .block.block-views .views-field-php-2 a { + color: #fff !important; + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + background: #267fda !important; + border-radius: 10px; + padding: 9px 22px; + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + border: none; + text-transform: capitalize; + font-size: 17px; + margin-bottom: 10px; +} +#mobile-header .block.block-views .views-field-php-2 a:hover, #mobile-header .block.block-views .views-field-php-2 a:focus { + color: #fff; + background: #267fda; + opacity: 1; + outline: none; +} +#mobile-header .block.block-views .views-field-php-2 a:hover { + color: #fff; +} + +/** + * Styles for Quick Tabs. + */ +ul.quicktabs-tabs { + margin-bottom: 0; + text-align: right; +} +ul.quicktabs-tabs li { + background-color: rgba(255, 255, 255, 0.75); + border: 1px solid; + border-bottom: 0; + font-size: 0.8em; + font-weight: bold; + margin: 0 0 0 -4px; + padding: 0.25em 0.75em; + text-transform: uppercase; +} +ul.quicktabs-tabs li.active { + padding-top: 0.75em; +} +ul.quicktabs-tabs li a { + color: #333333; +} +ul.quicktabs-tabs li a:focus, ul.quicktabs-tabs li a:hover { + background-color: transparent; +} + +.quicktabs_main { + background-color: rgba(255, 255, 255, 0.75); + border: 1px solid; + border-bottom: 0; + overflow: auto; + padding: 0 0.75em; +} +.quicktabs_main input[type="text"] { + background: url(../images/iconsprite.png) -5px -67px no-repeat; + background-color: white; + float: left; + padding-left: 30px; + width: 75%; +} +.quicktabs_main input[type="submit"], +.quicktabs_main button { + float: right; + text-transform: uppercase; + width: 20%; +} + +.block-quicktabs-search-our { + margin-top: 55px; +} +@media all and (max-width: 769px) { + .block-quicktabs-search-our .large-5, .large-4 .block-quicktabs-search-our { + margin-top: 1em; + } +} + +/** + * Styles for the Top Bar. + */ +#topbar { + border-bottom: 1px solid; + border-top: 1px solid; + margin-bottom: 2em; +} +#topbar .top-bar { + margin-bottom: 0; +} + +.top-bar-section .main-nav li a { + font-size: 1.25em; + font-weight: normal; +} +.top-bar-section.active:hover { + color: white; +} +.top-bar-section .dropdown li { + border: 1px solid; + font-size: 0.85em; +} +.top-bar-section .dropdown li:not(.first) { + border-top: 0; +} +.top-bar-section .dropdown li.show-for-small { + border-top: 1px solid; +} +.top-bar-section .has-dropdown > a { + padding-right: 30px !important; +} +.top-bar-section .has-dropdown > a::after { + margin-right: 10px; +} +.top-bar-section .has-dropdown .dropdown li.has-dropdown > a::after { + content: ""; + display: block; + width: 0; + height: 0; + border: inset 5px; + border-color: transparent transparent transparent rgba(51, 51, 51, 0.5); + border-left-style: solid; + margin-right: 5px; +} +.top-bar-section ul li.active a.active { + color: gray; +} +.top-bar-section ul li.active a:hover { + color: white; +} + +.show-for-small { + display: block !important; +} +.show-for-small a::before { + content: "↳ "; +} + +.top-bar .toggle-topbar.menu-icon { + border-right: 1px solid; + left: 12px; + margin-top: -26px; + padding: 10px 0 10px 40px; + right: auto; + width: 50%; +} +@media screen and (max-width: 250px) { + .top-bar .toggle-topbar.menu-icon { + padding-left: 30px; + } +} +@media screen and (max-width: 170px) { + .top-bar .toggle-topbar.menu-icon { + border-right: 0; + } +} +.top-bar .toggle-topbar.menu-icon a { + font-size: 1.25em; + font-weight: normal; + text-indent: -65px; + width: 45px; +} +.top-bar .toggle-topbar.menu-icon a:focus, .top-bar .toggle-topbar.menu-icon a:hover { + background-color: transparent; +} +@media screen and (max-width: 250px) { + .top-bar .toggle-topbar.menu-icon a { + font-size: 0.9em; + text-indent: -45px; + width: 35px; + } +} + +.top-bar .search-icon { + display: none; +} +@media screen and (min-width: 170px) and (max-width: 769px) { + .top-bar .search-icon { + display: block; + float: right; + font-weight: normal; + padding-right: 0.75em; + text-transform: uppercase; + } + .top-bar .search-icon a { + display: block; + background: url(../images/iconsprite.png) -7px -93px no-repeat; + color: #333333; + font-size: 1.25em; + margin-top: -38px; + padding-left: 25px; + } + .top-bar .search-icon a:focus, .top-bar .search-icon a:hover { + background-color: transparent; + color: #333333; + } +} +@media screen and (min-width: 170px) and (max-width: 769px) and (max-width: 250px) { + .top-bar .search-icon a { + font-size: 0.9em; + background: none; + margin-top: -33px; + } +} + +.top-bar.expanded .main-nav > .first { + border-top: 1px solid; +} +.top-bar.expanded .main-nav > li { + border-bottom: 1px solid; +} +.top-bar.expanded .main-nav .back { + border-top: 1px solid; +} +.top-bar.expanded .main-nav .back h5 { + font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; + margin: 0; +} +.top-bar.expanded .main-nav .back h5 a { + color: #333; + font-size: 2em; +} +.top-bar.expanded .main-nav .back h5 a::before { + content: "↩ "; +} +.top-bar.expanded .main-nav .show-for-small { + border-bottom: 1px solid; +} + +p { + font-size: 18px; + font-family: Arialregular; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; + line-height: 1.4; + margin-bottom: 23px; + display: inline-block; +} + +/** + * Styles for Webforms. + */ +.webform-client-form label:not(.option) { + font-weight: 700; +} +.webform-client-form .webform-component { + margin-bottom: 2.5em; +} +.webform-client-form .webform-component-date .webform-container-inline select, .webform-client-form .webform-component-date .webform-container-inline .form-radios, +.webform-client-form .webform-component-webform_time .webform-container-inline select, +.webform-client-form .webform-component-webform_time .webform-container-inline .form-radios { + max-width: 20%; +} +.webform-client-form input[type="file"], +.webform-client-form input[type="checkbox"], +.webform-client-form input[type="radio"], +.webform-client-form input[type="text"], +.webform-client-form select { + margin: 0; +} + +/* ----------------------------------------- + Shared Styles + ----------------------------------------- */ +a { + color: #267fda; + cursor: progress; +} +a.permalink { + display: none; +} + +a:hover, +a:focus { + color: #267fda; + background-color: none; + outline: none; + text-decoration: underline; +} + +h1#page-title { + margin-top: 0; + font-size: 28px; +} + +h2 { + color: gray; + border-bottom: 1px solid #f2f2f2; + font-size: 1.4em; +} +header h2 { + border-bottom: 0; +} +header h2.block-title { + text-transform: uppercase; + font-size: 0.9em; + margin: 5px 0 0 0.75em; + text-shadow: 1px 1px white; +} +@media screen and (max-width: 830px) { + header h2.block-title { + font-size: 0.7em; + } +} +header h2.block-title:after { + content: ":"; +} +.block-menu-block-1 h2.block-title { + border-top: 3px solid; + padding: 0.5em 0 0.1em 0.5em; + margin-bottom: 0; +} +.l-footer-columns h2.block-title { + border-top: 3px solid; + border-bottom: 0; + padding: 0.25em 0 0; + font-size: 1.2em; + margin-bottom: 0; +} +h2.field-label { + border-bottom: 0; + font-size: 1em; + text-transform: uppercase; + margin: 1em 0 0 0; +} +.section-library-search h2 { + border-bottom: 0; + font-size: 1em; + text-transform: uppercase; +} + +h3 { + color: gray; + text-transform: capitalize; + font-size: 1.2em; +} + +h4 { + text-transform: capitalize; + font-size: 1em; +} + +blockquote { + border-left: 0; + font-style: italic; + padding: 0 3em; +} +blockquote:before, blockquote:after { + content: "\201C"; + font-size: 4em; + color: #333333; + float: left; + margin: -10px 0 0 -40px; +} +blockquote:after { + content: "\201D"; + float: right; + margin: -70px -20px 0 0; +} + +.form-item .description { + font-size: 0.8125em; +} + +.view-mode-full li { + margin-left: 3em; +} + +.special { + font-size: 1.2em; +} + +.notice { + background-color: #f2f2f2; + font-style: italic; + padding: 0.5em 1em; +} + +.aside { + background-color: gray; + padding: 1em 1.25em; + width: 40%; + float: right; + margin: 0 0 1em 1em; + color: white; + font-size: 1em; + font-style: italic; +} +@media screen and (max-width: 769px) { + .aside { + width: 50%; + font-size: 0.9em; + padding: 0.75em 1em; + } +} +.aside a { + border-bottom: medium solid; + /* color: $color_gray_dark; */ +} +.aside a:hover, .aside a:focus { + /* background-color: $color_gray_light; */ +} + +.left { + float: left; + margin: 0 1em 1em 0; +} + +.right { + float: right; + margin: 0 0 1em 1em; +} + +.readmore, +.field-name-field-event-registration, +.registrationlink, +.resourcelink, +.field-name-field-resource-link, +.node-readmore { + margin: 1em 0; +} +@media screen and (max-width: 730px) { + .readmore, + .field-name-field-event-registration, + .registrationlink, + .resourcelink, + .field-name-field-resource-link, + .node-readmore { + margin: 0 0 0.5em 0; + } +} +.readmore a, +.readmore a:link, +.readmore a:visited, +.field-name-field-event-registration a, +.field-name-field-event-registration a:link, +.field-name-field-event-registration a:visited, +.registrationlink a, +.registrationlink a:link, +.registrationlink a:visited, +.resourcelink a, +.resourcelink a:link, +.resourcelink a:visited, +.field-name-field-resource-link a, +.field-name-field-resource-link a:link, +.field-name-field-resource-link a:visited, +.node-readmore a, +.node-readmore a:link, +.node-readmore a:visited { + width: auto; + padding: 0.25em 0.5em; + text-transform: uppercase; + box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5) inset; + transition: background-color 300ms ease-out 0s; + border: 1px solid; + cursor: pointer; +} +@media screen and (max-width: 830px) { + .readmore a, + .readmore a:link, + .readmore a:visited, + .field-name-field-event-registration a, + .field-name-field-event-registration a:link, + .field-name-field-event-registration a:visited, + .registrationlink a, + .registrationlink a:link, + .registrationlink a:visited, + .resourcelink a, + .resourcelink a:link, + .resourcelink a:visited, + .field-name-field-resource-link a, + .field-name-field-resource-link a:link, + .field-name-field-resource-link a:visited, + .node-readmore a, + .node-readmore a:link, + .node-readmore a:visited { + font-size: 0.8em; + } +} + +li.rsslink, li.calendarlink { + background: url(../images/iconsprite.png) -7px -40px no-repeat; + list-style: none; + padding-left: 32px; + margin-top: 0.25em; +} +li.calendarlink { + background: url(../images/iconsprite.png) -7px -10px no-repeat; +} + +.addtocal { + margin: 0 0.5em; +} +@media screen and (max-width: 730px) { + .addtocal { + float: none; + margin: 1em 0; + } +} + +.posted, +.postdate { + margin: -1em 0 1em; + font-size: 0.9em; + font-style: italic; +} + +.postdate { + margin: 0; +} + +.posted { + clear: both; +} + +.element-invisible.eioverride { + clip: auto; + height: auto; + overflow: visible; + position: relative; +} + +@media screen and (min-width: 730px) and (max-width: 830px) { + .smallmedium-6 { + position: relative; + width: 50%; + } + + .smallmedium-12 { + position: relative; + width: 100%; + } +} +/* HEADER AREA */ +header .header-middle { + background: url("../images/libraryzurb/header-background.png") no-repeat; + background-size: cover; + margin-top: -2px; + padding-left: 11px; +} +header div#topbar { + border: none !important; +} +@media all and (max-width: 830px) { + header { + background: none; + } +} +@media all and (max-width: 769px) { + header .large-5, + header .large-4 { + display: none; + } +} +header h2 { + color: #333333; +} + +.block-menu-block-1 { + margin-bottom: 2em; +} +.block-menu-block-1 ul li { + border-bottom: 1px solid; + list-style: none; + list-style-image: none; + padding: 0.75em 0 0.5em 1em; +} +.block-menu-block-1 ul li a, +.block-menu-block-1 ul li a:link, +.block-menu-block-1 ul li a:visited { + display: block; +} +.block-menu-block-1 ul li li { + padding: 0.35em 0.5em 0.35em 0; + border-bottom: 0; + line-height: 1em; + font-size: 0.9em; +} + +.sidebar .block:not(.block-menu-block-1) { + /* border: 1px solid; + font-size: 0.9em; */ + margin: 0 0 2em 0; +} +.sidebar .block:not(.block-menu-block-1) h2.block-title { + border: 0; + font-size: 22px; + text-transform: capitalize; + line-height: 1; + margin-top: 0; +} +.sidebar .block:not(.block-menu-block-1) .view-reward-earn .view-content { + padding: 0px 20px; +} + +.l-triptych h2.block-title { + border-bottom: 0; +} +@media screen and (max-width: 730px) { + .l-triptych h2.block-title { + border-top: 1px solid; + padding-top: 0.5em; + } +} +.l-triptych li { + margin-left: 0; + list-style-position: inside; +} +.l-triptych .block { + padding: 0 2em; +} +@media screen and (min-width: 730px) and (max-width: 830px) { + .l-triptych .block { + padding: 0 1em; + } +} +@media screen and (max-width: 730px) { + .l-triptych .block { + padding: 0; + } + .l-triptych .block p { + margin-bottom: 0; + } +} +.l-triptych .triptych-middle { + border-left: 1px solid; + border-right: 1px solid; +} +@media screen and (min-width: 730px) and (max-width: 830px) { + .l-triptych .triptych-middle { + border-right: 0; + } +} +@media screen and (max-width: 730px) { + .l-triptych .triptych-middle { + border: 0; + } +} + +.footcols { + background-color: #f2f2f2; + border-top: 1px solid; + margin-top: 2em; +} +@media screen and (max-width: 730px) { + .footcols { + margin-top: 0.5em; + } +} + +.l-footer-columns { + padding: 2.5em 0 2em; +} +@media screen and (max-width: 730px) { + .l-footer-columns { + padding: 1em 0; + } +} +.l-footer-columns ul li { + list-style: none; + list-style-image: none; + padding: 0.15em 0; +} + +@media screen and (max-width: 730px) { + .l-main { + margin-top: -20px; + } +} + +.view-mode-full .image { + width: 50%; + float: right; + margin: 0 0 0 4%; +} +.node-type-resource .view-mode-full .image { + width: auto; +} +li .view-mode-full .image { + margin-left: 0; +} +@media screen and (max-width: 769px) { + .view-mode-full .image { + float: none; + width: 100%; + margin: 0 0 1em 0; + } +} +.view-mode-full .image .flexslider { + padding: 0; + margin: 0; + border: 1px solid; + box-shadow: none; + border-radius: 0; +} +.view-mode-full .image .flexslider .flex-caption { + margin: 0.5em; + padding: 0.5em 0; + font-style: italic; + text-align: center; + line-height: 1.1em; + font-size: 0.8em; +} +.view-mode-full .image .flexslider .flex-caption p { + margin: 0; + padding: 0; +} +.view-mode-full .field-name-field-resource-name { + font-weight: bold; + text-transform: capitalize; + margin-bottom: 1em; +} +.view-mode-full .field-name-field-share .field-label { + text-transform: uppercase; + float: left; + margin-right: 0.5em; +} +.view-mode-full .field-name-field-share a:hover, +.view-mode-full .field-name-field-share a:focus { + background: none; +} +.view-mode-full .field-name-field-branch-phone { + margin: 1em 0; + font-weight: bold; +} +.view-mode-full .field-name-field-audience-term a { + display: inline-block; +} +.view-mode-full .field-name-field-audience-term a + a { + margin-left: 10px; +} + +/* views styling */ +.views-row { + line-height: 1.2em; + clear: both; + margin-bottom: 2em; +} +.block-views .views-row { + margin-bottom: 1em; +} +.views-row h3 { + text-transform: none; + margin-bottom: 0; +} +.views-row img { + /* float:right; + margin: 0.5em 0 0.5em 1em; + border: 1px solid; + */ + padding: 3px; +} + +/* Events Address */ +.view-events.view-display-id-address_pane .views-row { + clear: none; +} + +.view-events.view-display-id-map_block .views-row img { + float: none; + padding: 0; + border: 0 none; + margin: 0; +} + +.views-exposed-form { + padding: 0.5em 1em; + border: 1px solid; +} +.views-exposed-form button, +.views-exposed-form .button { + padding: 0.3em 0.5em; + text-transform: uppercase; +} +.views-exposed-form .views-exposed-widget .form-submit { + margin-top: 1.05em; +} +.views-exposed-form .views-exposed-widget input[type="file"], +.views-exposed-form .views-exposed-widget input[type="checkbox"], +.views-exposed-form .views-exposed-widget input[type="radio"], +.views-exposed-form .views-exposed-widget input[type="text"], +.views-exposed-form .views-exposed-widget select { + margin: 0; +} + +/* taxonomy page styling */ +.page-taxonomy-term .l-main h2.node-title { + font-size: 1.2em; + border-bottom: 0; + margin-bottom: 0; +} +.page-taxonomy-term .l-main img { + float: right; + margin: 0.5em 0 0.5em 1em; + border: 1px solid; + padding: 3px; +} +.page-taxonomy-term .l-main li.node-readmore { + list-style: none outside none; +} +.page-taxonomy-term .l-main .posted { + margin: 0; +} + +.comment_forbidden { + display: none; +} + +#comments h3 { + font-size: 0.9em; +} +#comments .submitted, +#comments .content { + line-height: 1.2em; + font-size: 0.8em; +} +#comments .submitted { + font-style: italic; +} + +.flexslider { + padding: 0; + margin: 0; + border: 0; + box-shadow: none; + border-radius: 0; +} +@media screen and (max-width: 730px) { + .flexslider p { + margin-bottom: 0.5em; + } +} +.flexslider h2 { + border: 0; +} +.flexslider li { + margin-left: 0; +} +.flexslider .views-field-field-image { + width: 70%; + margin-right: 4%; + float: left; + margin-bottom: 2em; +} +@media screen and (max-width: 769px) { + .flexslider .views-field-field-image { + float: none; + width: 100%; + margin-right: 0; + margin-bottom: 0.5em; + } +} +.field-name-field-page-slideshow-image .flexslider img { + width: 70%; + margin-right: 4%; + margin-bottom: 2em; + float: left; +} +@media screen and (max-width: 769px) { + .field-name-field-page-slideshow-image .flexslider img { + border: 1px solid; + width: 100%; + margin-right: 0; + margin-bottom: 0; + } +} +.field-name-field-page-slideshow-image .flexslider .flex-caption { + margin: 1em 0; + font-style: italic; +} +@media screen and (max-width: 769px) { + .field-name-field-page-slideshow-image .flexslider .flex-caption { + border: 1px solid; + border-top: 0; + width: 100%; + margin: 0.5em 0 1em 0; + padding: 1em 0.5em 0.5em; + text-align: center; + font-size: 0.8em; + line-height: 1.1em; + } +} +.flexslider .flex-control-nav { + left: 74%; + margin-top: -15%; + bottom: auto; + position: absolute; + text-align: none; + width: auto; +} +@media screen and (max-width: 830px) { + .flexslider .flex-control-nav { + margin-top: -8%; + } +} +@media screen and (max-width: 769px) { + .flexslider .flex-control-nav { + display: none; + } +} + +.flex-direction-nav a:before { + font-size: 26px; +} + +/* ----------------------------------------- + Page Name + ----------------------------------------- */ +div .addressfield-container-inline { + margin-bottom: 1em; + line-height: 1.4em; +} +div .addressfield-container-inline:after { + clear: none; +} + +.field-name-field-event-date-and-time, +.datetime { + line-height: 1.4em; + margin-bottom: 1em; + font-weight: bold; +} +.field-name-field-event-date-and-time .addtocal, .field-name-field-event-date-and-time .item-list, +.datetime .addtocal, +.datetime .item-list { + font-weight: normal; +} + +.block-views-branches-block { + font-size: 0.8em; +} +.block-views-branches-block h4 { + margin: 0; +} +@media screen and (min-width: 730px) { + .block-views-branches-block .views-field-field-branch-phone { + margin: 0; + padding: 0; + } +} +.block-views-branches-block .addressfield-container-inline { + margin: 0; +} +@media screen and (max-width: 730px) { + .block-views-branches-block .addressfield-container-inline { + margin-bottom: 0.5em; + } +} + +.sidebar span { + font-size: 17px; + font-family: arial !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; + line-height: 1.2; +} + +/*# sourceMappingURL=custom.css.map */ diff --git a/docroot/sites/all/themes/libraryzurb_teen/css/custom.css.map b/docroot/sites/all/themes/libraryzurb_teen/css/custom.css.map new file mode 100644 index 00000000..b75bef33 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/css/custom.css.map @@ -0,0 +1,7 @@ +{ +"version": 3, +"mappings": "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", +"sources": ["../scss/custom.scss","../scss/_variables.scss","../scss/_normalize.scss","../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss","../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss","../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss","../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss","../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss","../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss","../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss","../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_button-groups.scss","../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_dropdown-buttons.scss","../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_split-buttons.scss","../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_flex-video.scss","../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss","../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss","../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss","../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_reveal.scss","../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_joyride.scss","../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_clearing.scss","../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_alert-boxes.scss","../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_breadcrumbs.scss","../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_custom-forms.scss","../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_keystrokes.scss","../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_labels.scss","../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_inline-lists.scss","../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_pagination.scss","../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_panels.scss","../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_pricing-tables.scss","../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_progress-bars.scss","../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_side-nav.scss","../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_sub-nav.scss","../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss","../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_magellan.scss","../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_tables.scss","../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_thumbs.scss","../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_tooltips.scss","../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_dropdown.scss","../scss/base/_init.scss","../scss/base/_common.scss","../scss/base/_mixins.scss","../scss/base/_drupal.scss","../scss/layout/_header.scss","../scss/layout/_main.scss","../scss/components/_blocks.scss","../scss/components/_brand.scss","../scss/components/_buttons.scss","../scss/components/_foundation-icons.scss","../scss/components/_grid.scss","../scss/components/_page.scss","../scss/components/_post-footer.scss","../scss/components/_pre-header.scss","../scss/components/_quicktabs.scss","../scss/components/_top-bar.scss","../scss/components/_type.scss","../scss/components/_webforms.scss"], +"names": [], +"file": "custom.css" +} \ No newline at end of file diff --git a/docroot/sites/all/themes/libraryzurb_teen/css/foundation/foundation.css b/docroot/sites/all/themes/libraryzurb_teen/css/foundation/foundation.css new file mode 100644 index 00000000..1e17b15e --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/css/foundation/foundation.css @@ -0,0 +1,5815 @@ +meta.foundation-mq-small { + font-family: "only screen and (min-width: 768px)"; + width: 768px; +} + +meta.foundation-mq-medium { + font-family: "only screen and (min-width:1280px)"; + width: 1280px; +} + +meta.foundation-mq-large { + font-family: "only screen and (min-width:1440px)"; + width: 1440px; +} + +*, +*:before, +*:after { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +html, +body { + font-size: 100%; +} + +body { + background: #fff; + color: #222; + padding: 0; + margin: 0; + font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; + font-weight: normal; + font-style: normal; + line-height: 1; + position: relative; + cursor: default; +} + +a:hover { + cursor: pointer; +} + +img, +object, +embed { + max-width: 100%; + height: auto; +} + +object, +embed { + height: 100%; +} + +img { + -ms-interpolation-mode: bicubic; +} + +#map_canvas img, +#map_canvas embed, +#map_canvas object, +.map_canvas img, +.map_canvas embed, +.map_canvas object { + max-width: none !important; +} + +.left { + float: left !important; +} + +.right { + float: right !important; +} + +.text-left { + text-align: left !important; +} + +.text-right { + text-align: right !important; +} + +.text-center { + text-align: center !important; +} + +.text-justify { + text-align: justify !important; +} + +.hide { + display: none; +} + +.antialiased { + -webkit-font-smoothing: antialiased; +} + +img { + display: inline-block; + vertical-align: middle; +} + +textarea { + height: auto; + min-height: 50px; +} + +select { + width: 100%; +} + +/* Grid HTML Classes */ +.row { + width: 100%; + margin-left: auto; + margin-right: auto; + margin-top: 0; + margin-bottom: 0; + max-width: 62.5em; + *zoom: 1; +} +.row:before, .row:after { + content: " "; + display: table; +} +.row:after { + clear: both; +} +.row.collapse > .column, +.row.collapse > .columns { + position: relative; + padding-left: 0; + padding-right: 0; + float: left; +} +.row.collapse .row { + margin-left: 0; + margin-right: 0; +} +.row .row { + width: auto; + margin-left: -0.9375em; + margin-right: -0.9375em; + margin-top: 0; + margin-bottom: 0; + max-width: none; + *zoom: 1; +} +.row .row:before, .row .row:after { + content: " "; + display: table; +} +.row .row:after { + clear: both; +} +.row .row.collapse { + width: auto; + margin: 0; + max-width: none; + *zoom: 1; +} +.row .row.collapse:before, .row .row.collapse:after { + content: " "; + display: table; +} +.row .row.collapse:after { + clear: both; +} + +.column, +.columns { + position: relative; + padding-left: 0.9375em; + padding-right: 0.9375em; + width: 100%; + float: left; +} + +@media only screen { + .column, + .columns { + position: relative; + padding-left: 0.9375em; + padding-right: 0.9375em; + float: left; + } + + .small-1 { + position: relative; + width: 8.33333%; + } + + .small-2 { + position: relative; + width: 16.66667%; + } + + .small-3 { + position: relative; + width: 25%; + } + + .small-4 { + position: relative; + width: 33.33333%; + } + + .small-5 { + position: relative; + width: 41.66667%; + } + + .small-6 { + position: relative; + width: 50%; + } + + .small-7 { + position: relative; + width: 58.33333%; + } + + .small-8 { + position: relative; + width: 66.66667%; + } + + .small-9 { + position: relative; + width: 75%; + } + + .small-10 { + position: relative; + width: 83.33333%; + } + + .small-11 { + position: relative; + width: 91.66667%; + } + + .small-12 { + position: relative; + width: 100%; + } + + .small-offset-0 { + position: relative; + margin-left: 0%; + } + + .small-offset-1 { + position: relative; + margin-left: 8.33333%; + } + + .small-offset-2 { + position: relative; + margin-left: 16.66667%; + } + + .small-offset-3 { + position: relative; + margin-left: 25%; + } + + .small-offset-4 { + position: relative; + margin-left: 33.33333%; + } + + .small-offset-5 { + position: relative; + margin-left: 41.66667%; + } + + .small-offset-6 { + position: relative; + margin-left: 50%; + } + + .small-offset-7 { + position: relative; + margin-left: 58.33333%; + } + + .small-offset-8 { + position: relative; + margin-left: 66.66667%; + } + + .small-offset-9 { + position: relative; + margin-left: 75%; + } + + .small-offset-10 { + position: relative; + margin-left: 83.33333%; + } + + [class*="column"] + [class*="column"]:last-child { + float: right; + } + + [class*="column"] + [class*="column"].end { + float: left; + } + + .column.small-centered, + .columns.small-centered { + position: relative; + margin-left: auto; + margin-right: auto; + float: none !important; + } +} +/* Styles for screens that are atleast 768px; */ +@media only screen and (min-width: 768px) { + .large-1 { + position: relative; + width: 8.33333%; + } + + .large-2 { + position: relative; + width: 16.66667%; + } + + .large-3 { + position: relative; + width: 25%; + } + + .large-4 { + position: relative; + width: 33.33333%; + } + + .large-5 { + position: relative; + width: 41.66667%; + } + + .large-6 { + position: relative; + width: 50%; + } + + .large-7 { + position: relative; + width: 58.33333%; + } + + .large-8 { + position: relative; + width: 66.66667%; + } + + .large-9 { + position: relative; + width: 75%; + } + + .large-10 { + position: relative; + width: 83.33333%; + } + + .large-11 { + position: relative; + width: 91.66667%; + } + + .large-12 { + position: relative; + width: 100%; + } + + .row .large-offset-0 { + position: relative; + margin-left: 0%; + } + + .row .large-offset-1 { + position: relative; + margin-left: 8.33333%; + } + + .row .large-offset-2 { + position: relative; + margin-left: 16.66667%; + } + + .row .large-offset-3 { + position: relative; + margin-left: 25%; + } + + .row .large-offset-4 { + position: relative; + margin-left: 33.33333%; + } + + .row .large-offset-5 { + position: relative; + margin-left: 41.66667%; + } + + .row .large-offset-6 { + position: relative; + margin-left: 50%; + } + + .row .large-offset-7 { + position: relative; + margin-left: 58.33333%; + } + + .row .large-offset-8 { + position: relative; + margin-left: 66.66667%; + } + + .row .large-offset-9 { + position: relative; + margin-left: 75%; + } + + .row .large-offset-10 { + position: relative; + margin-left: 83.33333%; + } + + .row .large-offset-11 { + position: relative; + margin-left: 91.66667%; + } + + .push-1 { + position: relative; + left: 8.33333%; + right: auto; + } + + .pull-1 { + position: relative; + right: 8.33333%; + left: auto; + } + + .push-2 { + position: relative; + left: 16.66667%; + right: auto; + } + + .pull-2 { + position: relative; + right: 16.66667%; + left: auto; + } + + .push-3 { + position: relative; + left: 25%; + right: auto; + } + + .pull-3 { + position: relative; + right: 25%; + left: auto; + } + + .push-4 { + position: relative; + left: 33.33333%; + right: auto; + } + + .pull-4 { + position: relative; + right: 33.33333%; + left: auto; + } + + .push-5 { + position: relative; + left: 41.66667%; + right: auto; + } + + .pull-5 { + position: relative; + right: 41.66667%; + left: auto; + } + + .push-6 { + position: relative; + left: 50%; + right: auto; + } + + .pull-6 { + position: relative; + right: 50%; + left: auto; + } + + .push-7 { + position: relative; + left: 58.33333%; + right: auto; + } + + .pull-7 { + position: relative; + right: 58.33333%; + left: auto; + } + + .push-8 { + position: relative; + left: 66.66667%; + right: auto; + } + + .pull-8 { + position: relative; + right: 66.66667%; + left: auto; + } + + .push-9 { + position: relative; + left: 75%; + right: auto; + } + + .pull-9 { + position: relative; + right: 75%; + left: auto; + } + + .push-10 { + position: relative; + left: 83.33333%; + right: auto; + } + + .pull-10 { + position: relative; + right: 83.33333%; + left: auto; + } + + .push-11 { + position: relative; + left: 91.66667%; + right: auto; + } + + .pull-11 { + position: relative; + right: 91.66667%; + left: auto; + } + + .column.large-centered, + .columns.large-centered { + position: relative; + margin-left: auto; + margin-right: auto; + float: none !important; + } + + .column.large-uncentered, + .columns.large-uncentered { + margin-left: 0; + margin-right: 0; + float: left !important; + } + + .column.large-uncentered.opposite, + .columns.large-uncentered.opposite { + float: right !important; + } +} +/* Foundation Visibility HTML Classes */ +.show-for-small, +.show-for-medium-down, +.show-for-large-down { + display: inherit !important; +} + +.show-for-medium, +.show-for-medium-up, +.show-for-large, +.show-for-large-up, +.show-for-xlarge { + display: none !important; +} + +.hide-for-medium, +.hide-for-medium-up, +.hide-for-large, +.hide-for-large-up, +.hide-for-xlarge { + display: inherit !important; +} + +.hide-for-small, +.hide-for-medium-down, +.hide-for-large-down { + display: none !important; +} + +/* Specific visilbity for tables */ +table.show-for-small, table.show-for-medium-down, table.show-for-large-down, table.hide-for-medium, table.hide-for-medium-up, table.hide-for-large, table.hide-for-large-up, table.hide-for-xlarge { + display: table; +} + +thead.show-for-small, thead.show-for-medium-down, thead.show-for-large-down, thead.hide-for-medium, thead.hide-for-medium-up, thead.hide-for-large, thead.hide-for-large-up, thead.hide-for-xlarge { + display: table-header-group !important; +} + +tbody.show-for-small, tbody.show-for-medium-down, tbody.show-for-large-down, tbody.hide-for-medium, tbody.hide-for-medium-up, tbody.hide-for-large, tbody.hide-for-large-up, tbody.hide-for-xlarge { + display: table-row-group !important; +} + +tr.show-for-small, tr.show-for-medium-down, tr.show-for-large-down, tr.hide-for-medium, tr.hide-for-medium-up, tr.hide-for-large, tr.hide-for-large-up, tr.hide-for-xlarge { + display: table-row !important; +} + +td.show-for-small, td.show-for-medium-down, td.show-for-large-down, td.hide-for-medium, td.hide-for-medium-up, td.hide-for-large, td.hide-for-large-up, td.hide-for-xlarge, +th.show-for-small, +th.show-for-medium-down, +th.show-for-large-down, +th.hide-for-medium, +th.hide-for-medium-up, +th.hide-for-large, +th.hide-for-large-up, +th.hide-for-xlarge { + display: table-cell !important; +} + +/* Medium Displays: 768px - 1279px */ +@media only screen and (min-width: 768px) { + .show-for-medium, + .show-for-medium-up { + display: inherit !important; + } + + .show-for-small { + display: none !important; + } + + .hide-for-small { + display: inherit !important; + } + + .hide-for-medium, + .hide-for-medium-up { + display: none !important; + } + + /* Specific visilbity for tables */ + table.show-for-medium, table.show-for-medium-up, table.hide-for-small { + display: table; + } + + thead.show-for-medium, thead.show-for-medium-up, thead.hide-for-small { + display: table-header-group !important; + } + + tbody.show-for-medium, tbody.show-for-medium-up, tbody.hide-for-small { + display: table-row-group !important; + } + + tr.show-for-medium, tr.show-for-medium-up, tr.hide-for-small { + display: table-row !important; + } + + td.show-for-medium, td.show-for-medium-up, td.hide-for-small, + th.show-for-medium, + th.show-for-medium-up, + th.hide-for-small { + display: table-cell !important; + } +} +/* Large Displays: 1280px - 1440px */ +@media only screen and (min-width: 1280px) { + .show-for-large, + .show-for-large-up { + display: inherit !important; + } + + .show-for-medium, + .show-for-medium-down { + display: none !important; + } + + .hide-for-medium, + .hide-for-medium-down { + display: inherit !important; + } + + .hide-for-large, + .hide-for-large-up { + display: none !important; + } + + /* Specific visilbity for tables */ + table.show-for-large, table.show-for-large-up, table.hide-for-medium, table.hide-for-medium-down { + display: table; + } + + thead.show-for-large, thead.show-for-large-up, thead.hide-for-medium, thead.hide-for-medium-down { + display: table-header-group !important; + } + + tbody.show-for-large, tbody.show-for-large-up, tbody.hide-for-medium, tbody.hide-for-medium-down { + display: table-row-group !important; + } + + tr.show-for-large, tr.show-for-large-up, tr.hide-for-medium, tr.hide-for-medium-down { + display: table-row !important; + } + + td.show-for-large, td.show-for-large-up, td.hide-for-medium, td.hide-for-medium-down, + th.show-for-large, + th.show-for-large-up, + th.hide-for-medium, + th.hide-for-medium-down { + display: table-cell !important; + } +} +/* X-Large Displays: 1400px and up */ +@media only screen and (min-width: 1440px) { + .show-for-xlarge { + display: inherit !important; + } + + .show-for-large, + .show-for-large-down { + display: none !important; + } + + .hide-for-large, + .hide-for-large-down { + display: inherit !important; + } + + .hide-for-xlarge { + display: none !important; + } + + /* Specific visilbity for tables */ + table.show-for-xlarge, table.hide-for-large, table.hide-for-large-down { + display: table; + } + + thead.show-for-xlarge, thead.hide-for-large, thead.hide-for-large-down { + display: table-header-group !important; + } + + tbody.show-for-xlarge, tbody.hide-for-large, tbody.hide-for-large-down { + display: table-row-group !important; + } + + tr.show-for-xlarge, tr.hide-for-large, tr.hide-for-large-down { + display: table-row !important; + } + + td.show-for-xlarge, td.hide-for-large, td.hide-for-large-down, + th.show-for-xlarge, + th.hide-for-large, + th.hide-for-large-down { + display: table-cell !important; + } +} +/* Orientation targeting */ +.show-for-landscape, +.hide-for-portrait { + display: inherit !important; +} + +.hide-for-landscape, +.show-for-portrait { + display: none !important; +} + +/* Specific visilbity for tables */ +table.hide-for-landscape, table.show-for-portrait { + display: table; +} + +thead.hide-for-landscape, thead.show-for-portrait { + display: table-header-group !important; +} + +tbody.hide-for-landscape, tbody.show-for-portrait { + display: table-row-group !important; +} + +tr.hide-for-landscape, tr.show-for-portrait { + display: table-row !important; +} + +td.hide-for-landscape, td.show-for-portrait, +th.hide-for-landscape, +th.show-for-portrait { + display: table-cell !important; +} + +@media only screen and (orientation: landscape) { + .show-for-landscape, + .hide-for-portrait { + display: inherit !important; + } + + .hide-for-landscape, + .show-for-portrait { + display: none !important; + } + + /* Specific visilbity for tables */ + table.show-for-landscape, table.hide-for-portrait { + display: table; + } + + thead.show-for-landscape, thead.hide-for-portrait { + display: table-header-group !important; + } + + tbody.show-for-landscape, tbody.hide-for-portrait { + display: table-row-group !important; + } + + tr.show-for-landscape, tr.hide-for-portrait { + display: table-row !important; + } + + td.show-for-landscape, td.hide-for-portrait, + th.show-for-landscape, + th.hide-for-portrait { + display: table-cell !important; + } +} +@media only screen and (orientation: portrait) { + .show-for-portrait, + .hide-for-landscape { + display: inherit !important; + } + + .hide-for-portrait, + .show-for-landscape { + display: none !important; + } + + /* Specific visilbity for tables */ + table.show-for-portrait, table.hide-for-landscape { + display: table; + } + + thead.show-for-portrait, thead.hide-for-landscape { + display: table-header-group !important; + } + + tbody.show-for-portrait, tbody.hide-for-landscape { + display: table-row-group !important; + } + + tr.show-for-portrait, tr.hide-for-landscape { + display: table-row !important; + } + + td.show-for-portrait, td.hide-for-landscape, + th.show-for-portrait, + th.hide-for-landscape { + display: table-cell !important; + } +} +/* Touch-enabled device targeting */ +.show-for-touch { + display: none !important; +} + +.hide-for-touch { + display: inherit !important; +} + +.touch .show-for-touch { + display: inherit !important; +} + +.touch .hide-for-touch { + display: none !important; +} + +/* Specific visilbity for tables */ +table.hide-for-touch { + display: table; +} + +.touch table.show-for-touch { + display: table; +} + +thead.hide-for-touch { + display: table-header-group !important; +} + +.touch thead.show-for-touch { + display: table-header-group !important; +} + +tbody.hide-for-touch { + display: table-row-group !important; +} + +.touch tbody.show-for-touch { + display: table-row-group !important; +} + +tr.hide-for-touch { + display: table-row !important; +} + +.touch tr.show-for-touch { + display: table-row !important; +} + +td.hide-for-touch { + display: table-cell !important; +} + +.touch td.show-for-touch { + display: table-cell !important; +} + +th.hide-for-touch { + display: table-cell !important; +} + +.touch th.show-for-touch { + display: table-cell !important; +} + +/* Foundation Block Grids for below small breakpoint */ +@media only screen { + [class*="block-grid-"] { + display: block; + padding: 0; + margin: 0 -0.625em; + *zoom: 1; + } + [class*="block-grid-"]:before, [class*="block-grid-"]:after { + content: " "; + display: table; + } + [class*="block-grid-"]:after { + clear: both; + } + [class*="block-grid-"] > li { + display: inline; + height: auto; + float: left; + padding: 0 0.625em 1.25em; + } + + .small-block-grid-1 > li { + width: 100%; + padding: 0 0.625em 1.25em; + } + .small-block-grid-1 > li:nth-of-type(n) { + clear: none; + } + .small-block-grid-1 > li:nth-of-type(1n+1) { + clear: both; + } + + .small-block-grid-2 > li { + width: 50%; + padding: 0 0.625em 1.25em; + } + .small-block-grid-2 > li:nth-of-type(n) { + clear: none; + } + .small-block-grid-2 > li:nth-of-type(2n+1) { + clear: both; + } + + .small-block-grid-3 > li { + width: 33.33333%; + padding: 0 0.625em 1.25em; + } + .small-block-grid-3 > li:nth-of-type(n) { + clear: none; + } + .small-block-grid-3 > li:nth-of-type(3n+1) { + clear: both; + } + + .small-block-grid-4 > li { + width: 25%; + padding: 0 0.625em 1.25em; + } + .small-block-grid-4 > li:nth-of-type(n) { + clear: none; + } + .small-block-grid-4 > li:nth-of-type(4n+1) { + clear: both; + } + + .small-block-grid-5 > li { + width: 20%; + padding: 0 0.625em 1.25em; + } + .small-block-grid-5 > li:nth-of-type(n) { + clear: none; + } + .small-block-grid-5 > li:nth-of-type(5n+1) { + clear: both; + } + + .small-block-grid-6 > li { + width: 16.66667%; + padding: 0 0.625em 1.25em; + } + .small-block-grid-6 > li:nth-of-type(n) { + clear: none; + } + .small-block-grid-6 > li:nth-of-type(6n+1) { + clear: both; + } + + .small-block-grid-7 > li { + width: 14.28571%; + padding: 0 0.625em 1.25em; + } + .small-block-grid-7 > li:nth-of-type(n) { + clear: none; + } + .small-block-grid-7 > li:nth-of-type(7n+1) { + clear: both; + } + + .small-block-grid-8 > li { + width: 12.5%; + padding: 0 0.625em 1.25em; + } + .small-block-grid-8 > li:nth-of-type(n) { + clear: none; + } + .small-block-grid-8 > li:nth-of-type(8n+1) { + clear: both; + } + + .small-block-grid-9 > li { + width: 11.11111%; + padding: 0 0.625em 1.25em; + } + .small-block-grid-9 > li:nth-of-type(n) { + clear: none; + } + .small-block-grid-9 > li:nth-of-type(9n+1) { + clear: both; + } + + .small-block-grid-10 > li { + width: 10%; + padding: 0 0.625em 1.25em; + } + .small-block-grid-10 > li:nth-of-type(n) { + clear: none; + } + .small-block-grid-10 > li:nth-of-type(10n+1) { + clear: both; + } + + .small-block-grid-11 > li { + width: 9.09091%; + padding: 0 0.625em 1.25em; + } + .small-block-grid-11 > li:nth-of-type(n) { + clear: none; + } + .small-block-grid-11 > li:nth-of-type(11n+1) { + clear: both; + } + + .small-block-grid-12 > li { + width: 8.33333%; + padding: 0 0.625em 1.25em; + } + .small-block-grid-12 > li:nth-of-type(n) { + clear: none; + } + .small-block-grid-12 > li:nth-of-type(12n+1) { + clear: both; + } +} +/* Foundation Block Grids for above small breakpoint */ +@media only screen and (min-width: 768px) { + /* Remove small grid clearing */ + .small-block-grid-1 > li:nth-of-type(1n+1) { + clear: none; + } + + .small-block-grid-2 > li:nth-of-type(2n+1) { + clear: none; + } + + .small-block-grid-3 > li:nth-of-type(3n+1) { + clear: none; + } + + .small-block-grid-4 > li:nth-of-type(4n+1) { + clear: none; + } + + .small-block-grid-5 > li:nth-of-type(5n+1) { + clear: none; + } + + .small-block-grid-6 > li:nth-of-type(6n+1) { + clear: none; + } + + .small-block-grid-7 > li:nth-of-type(7n+1) { + clear: none; + } + + .small-block-grid-8 > li:nth-of-type(8n+1) { + clear: none; + } + + .small-block-grid-9 > li:nth-of-type(9n+1) { + clear: none; + } + + .small-block-grid-10 > li:nth-of-type(10n+1) { + clear: none; + } + + .small-block-grid-11 > li:nth-of-type(11n+1) { + clear: none; + } + + .small-block-grid-12 > li:nth-of-type(12n+1) { + clear: none; + } + + .large-block-grid-1 > li { + width: 100%; + padding: 0 0.625em 1.25em; + } + .large-block-grid-1 > li:nth-of-type(n) { + clear: none; + } + .large-block-grid-1 > li:nth-of-type(1n+1) { + clear: both; + } + + .large-block-grid-2 > li { + width: 50%; + padding: 0 0.625em 1.25em; + } + .large-block-grid-2 > li:nth-of-type(n) { + clear: none; + } + .large-block-grid-2 > li:nth-of-type(2n+1) { + clear: both; + } + + .large-block-grid-3 > li { + width: 33.33333%; + padding: 0 0.625em 1.25em; + } + .large-block-grid-3 > li:nth-of-type(n) { + clear: none; + } + .large-block-grid-3 > li:nth-of-type(3n+1) { + clear: both; + } + + .large-block-grid-4 > li { + width: 25%; + padding: 0 0.625em 1.25em; + } + .large-block-grid-4 > li:nth-of-type(n) { + clear: none; + } + .large-block-grid-4 > li:nth-of-type(4n+1) { + clear: both; + } + + .large-block-grid-5 > li { + width: 20%; + padding: 0 0.625em 1.25em; + } + .large-block-grid-5 > li:nth-of-type(n) { + clear: none; + } + .large-block-grid-5 > li:nth-of-type(5n+1) { + clear: both; + } + + .large-block-grid-6 > li { + width: 16.66667%; + padding: 0 0.625em 1.25em; + } + .large-block-grid-6 > li:nth-of-type(n) { + clear: none; + } + .large-block-grid-6 > li:nth-of-type(6n+1) { + clear: both; + } + + .large-block-grid-7 > li { + width: 14.28571%; + padding: 0 0.625em 1.25em; + } + .large-block-grid-7 > li:nth-of-type(n) { + clear: none; + } + .large-block-grid-7 > li:nth-of-type(7n+1) { + clear: both; + } + + .large-block-grid-8 > li { + width: 12.5%; + padding: 0 0.625em 1.25em; + } + .large-block-grid-8 > li:nth-of-type(n) { + clear: none; + } + .large-block-grid-8 > li:nth-of-type(8n+1) { + clear: both; + } + + .large-block-grid-9 > li { + width: 11.11111%; + padding: 0 0.625em 1.25em; + } + .large-block-grid-9 > li:nth-of-type(n) { + clear: none; + } + .large-block-grid-9 > li:nth-of-type(9n+1) { + clear: both; + } + + .large-block-grid-10 > li { + width: 10%; + padding: 0 0.625em 1.25em; + } + .large-block-grid-10 > li:nth-of-type(n) { + clear: none; + } + .large-block-grid-10 > li:nth-of-type(10n+1) { + clear: both; + } + + .large-block-grid-11 > li { + width: 9.09091%; + padding: 0 0.625em 1.25em; + } + .large-block-grid-11 > li:nth-of-type(n) { + clear: none; + } + .large-block-grid-11 > li:nth-of-type(11n+1) { + clear: both; + } + + .large-block-grid-12 > li { + width: 8.33333%; + padding: 0 0.625em 1.25em; + } + .large-block-grid-12 > li:nth-of-type(n) { + clear: none; + } + .large-block-grid-12 > li:nth-of-type(12n+1) { + clear: both; + } +} +p.lead { + font-size: 1.21875em; + line-height: 1.6; +} + +.subheader { + line-height: 1.4; + color: #6f6f6f; + font-weight: 300; + margin-top: 0.2em; + margin-bottom: 0.5em; +} + +/* Typography resets */ +div, +dl, +dt, +dd, +ul, +ol, +li, +h1, +h2, +h3, +h4, +h5, +h6, +pre, +form, +p, +blockquote, +th, +td { + margin: 0; + padding: 0; + direction: ltr; +} + +/* Default Link Styles */ +a { + color: #2ba6cb; + text-decoration: none; + line-height: inherit; +} +a:hover, a:focus { + color: #2795b6; +} +a img { + border: none; +} + +/* Default paragraph styles */ +p { + font-family: inherit; + font-weight: normal; + font-size: 1em; + line-height: 1.6; + margin-bottom: 1.25em; + text-rendering: optimizeLegibility; +} +p aside { + font-size: 0.875em; + line-height: 1.35; + font-style: italic; +} + +/* Default header styles */ +h1, h2, h3, h4, h5, h6 { + font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; + font-weight: bold; + font-style: normal; + color: #222; + text-rendering: optimizeLegibility; + margin-top: 0.2em; + margin-bottom: 0.5em; + line-height: 1.2125em; +} +h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { + font-size: 60%; + color: #6f6f6f; + line-height: 0; +} + +h1 { + font-size: 2.125em; +} + +h2 { + font-size: 1.6875em; +} + +h3 { + font-size: 1.375em; +} + +h4 { + font-size: 1.125em; +} + +h5 { + font-size: 1.125em; +} + +h6 { + font-size: 1em; +} + +hr { + border: solid #ddd; + border-width: 1px 0 0; + clear: both; + margin: 1.25em 0 1.1875em; + height: 0; +} + +/* Helpful Typography Defaults */ +em, +i { + font-style: italic; + line-height: inherit; +} + +strong, +b { + font-weight: bold; + line-height: inherit; +} + +small { + font-size: 60%; + line-height: inherit; +} + +code { + font-family: Consolas, "Liberation Mono", Courier, monospace; + font-weight: bold; + color: #7f0a0c; +} + +/* Lists */ +ul, +ol, +dl { + font-size: 1em; + line-height: 1.6; + margin-bottom: 1.25em; + list-style-position: outside; + font-family: inherit; +} + +ul, ol { + margin-left: 0; +} +ul.no-bullet, ol.no-bullet { + margin-left: 0; +} + +/* Unordered Lists */ +ul li ul, +ul li ol { + margin-left: 1.25em; + margin-bottom: 0; + font-size: 1em; + /* Override nested font-size change */ +} +ul.square li ul, ul.circle li ul, ul.disc li ul { + list-style: inherit; +} +ul.square { + list-style-type: square; +} +ul.circle { + list-style-type: circle; +} +ul.disc { + list-style-type: disc; +} +ul.no-bullet { + list-style: none; +} + +/* Ordered Lists */ +ol li ul, +ol li ol { + margin-left: 1.25em; + margin-bottom: 0; +} + +/* Definition Lists */ +dl dt { + margin-bottom: 0.3em; + font-weight: bold; +} +dl dd { + margin-bottom: 0.75em; +} + +/* Abbreviations */ +abbr, +acronym { + text-transform: uppercase; + font-size: 90%; + color: #222; + border-bottom: 1px dotted #ddd; + cursor: help; +} + +abbr { + text-transform: none; +} + +/* Blockquotes */ +blockquote { + margin: 0 0 1.25em; + padding: 0.5625em 1.25em 0 1.1875em; + border-left: 1px solid #ddd; +} +blockquote cite { + display: block; + font-size: 0.8125em; + color: #555555; +} +blockquote cite:before { + content: "\2014 \0020"; +} +blockquote cite a, +blockquote cite a:visited { + color: #555555; +} + +blockquote, +blockquote p { + line-height: 1.6; + color: #6f6f6f; +} + +/* Microformats */ +.vcard { + display: inline-block; + margin: 0 0 1.25em 0; + border: 1px solid #ddd; + padding: 0.625em 0.75em; +} +.vcard li { + margin: 0; + display: block; +} +.vcard .fn { + font-weight: bold; + font-size: 0.9375em; +} + +.vevent .summary { + font-weight: bold; +} +.vevent abbr { + cursor: default; + text-decoration: none; + font-weight: bold; + border: none; + padding: 0 0.0625em; +} + +@media only screen and (min-width: 768px) { + h1, h2, h3, h4, h5, h6 { + line-height: 1.4; + } + + h1 { + font-size: 2.75em; + } + + h2 { + font-size: 2.3125em; + } + + h3 { + font-size: 1.6875em; + } + + h4 { + font-size: 1.4375em; + } +} +/* + * Print styles. + * + * Inlined to avoid required HTTP connection: www.phpied.com/delay-loading-your-print-css/ + * Credit to Paul Irish and HTML5 Boilerplate (html5boilerplate.com) +*/ +.print-only { + display: none !important; +} + +@media print { + * { + background: transparent !important; + color: #000 !important; + /* Black prints faster: h5bp.com/s */ + box-shadow: none !important; + text-shadow: none !important; + } + + a, + a:visited { + text-decoration: underline; + } + + a[href]:after { + content: " (" attr(href) ")"; + } + + abbr[title]:after { + content: " (" attr(title) ")"; + } + + .ir a:after, + a[href^="javascript:"]:after, + a[href^="#"]:after { + content: ""; + } + + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + + thead { + display: table-header-group; + /* h5bp.com/t */ + } + + tr, + img { + page-break-inside: avoid; + } + + img { + max-width: 100% !important; + } + + @page { + margin: 0.5cm; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + + h2, + h3 { + page-break-after: avoid; + } + + .hide-on-print { + display: none !important; + } + + .print-only { + display: block !important; + } + + .hide-for-print { + display: none !important; + } + + .show-for-print { + display: inherit !important; + } +} +button, .button { + border-style: solid; + border-width: 1px; + cursor: pointer; + font-family: inherit; + font-weight: bold; + line-height: normal; + margin: 0 0 1.25em; + position: relative; + text-decoration: none; + text-align: center; + display: inline-block; + padding-top: 0.75em; + padding-right: 1.5em; + padding-bottom: 0.8125em; + padding-left: 1.5em; + font-size: 1em; + background-color: #2ba6cb; + border-color: #2284a1; + color: #fff; +} +button:hover, button:focus, .button:hover, .button:focus { + background-color: #2284a1; +} +button:hover, button:focus, .button:hover, .button:focus { + color: #fff; +} +button.secondary, .button.secondary { + background-color: #e9e9e9; + border-color: #d0d0d0; + color: #333; +} +button.secondary:hover, button.secondary:focus, .button.secondary:hover, .button.secondary:focus { + background-color: #d0d0d0; +} +button.secondary:hover, button.secondary:focus, .button.secondary:hover, .button.secondary:focus { + color: #333; +} +button.success, .button.success { + background-color: #5da423; + border-color: #457a1a; + color: #fff; +} +button.success:hover, button.success:focus, .button.success:hover, .button.success:focus { + background-color: #457a1a; +} +button.success:hover, button.success:focus, .button.success:hover, .button.success:focus { + color: #fff; +} +button.alert, .button.alert { + background-color: #c60f13; + border-color: #970b0e; + color: #fff; +} +button.alert:hover, button.alert:focus, .button.alert:hover, .button.alert:focus { + background-color: #970b0e; +} +button.alert:hover, button.alert:focus, .button.alert:hover, .button.alert:focus { + color: #fff; +} +button.large, .button.large { + padding-top: 1em; + padding-right: 2em; + padding-bottom: 1.0625em; + padding-left: 2em; + font-size: 1.25em; +} +button.small, .button.small { + padding-top: 0.5625em; + padding-right: 1.125em; + padding-bottom: 0.625em; + padding-left: 1.125em; + font-size: 0.8125em; +} +button.tiny, .button.tiny { + padding-top: 0.4375em; + padding-right: 0.875em; + padding-bottom: 0.5em; + padding-left: 0.875em; + font-size: 0.6875em; +} +button.expand, .button.expand { + padding-right: 0; + padding-left: 0; + width: 100%; +} +button.left-align, .button.left-align { + text-align: left; + text-indent: 0.75em; +} +button.right-align, .button.right-align { + text-align: right; + padding-right: 0.75em; +} +button.disabled, button[disabled], .button.disabled, .button[disabled] { + background-color: #2ba6cb; + border-color: #2284a1; + color: #fff; + cursor: default; + opacity: 0.6; + -webkit-box-shadow: none; + box-shadow: none; +} +button.disabled:hover, button.disabled:focus, button[disabled]:hover, button[disabled]:focus, .button.disabled:hover, .button.disabled:focus, .button[disabled]:hover, .button[disabled]:focus { + background-color: #2284a1; +} +button.disabled:hover, button.disabled:focus, button[disabled]:hover, button[disabled]:focus, .button.disabled:hover, .button.disabled:focus, .button[disabled]:hover, .button[disabled]:focus { + color: #fff; +} +button.disabled:hover, button.disabled:focus, button[disabled]:hover, button[disabled]:focus, .button.disabled:hover, .button.disabled:focus, .button[disabled]:hover, .button[disabled]:focus { + background-color: #2ba6cb; +} +button.disabled.secondary, button[disabled].secondary, .button.disabled.secondary, .button[disabled].secondary { + background-color: #e9e9e9; + border-color: #d0d0d0; + color: #333; + cursor: default; + opacity: 0.6; + -webkit-box-shadow: none; + box-shadow: none; +} +button.disabled.secondary:hover, button.disabled.secondary:focus, button[disabled].secondary:hover, button[disabled].secondary:focus, .button.disabled.secondary:hover, .button.disabled.secondary:focus, .button[disabled].secondary:hover, .button[disabled].secondary:focus { + background-color: #d0d0d0; +} +button.disabled.secondary:hover, button.disabled.secondary:focus, button[disabled].secondary:hover, button[disabled].secondary:focus, .button.disabled.secondary:hover, .button.disabled.secondary:focus, .button[disabled].secondary:hover, .button[disabled].secondary:focus { + color: #333; +} +button.disabled.secondary:hover, button.disabled.secondary:focus, button[disabled].secondary:hover, button[disabled].secondary:focus, .button.disabled.secondary:hover, .button.disabled.secondary:focus, .button[disabled].secondary:hover, .button[disabled].secondary:focus { + background-color: #e9e9e9; +} +button.disabled.success, button[disabled].success, .button.disabled.success, .button[disabled].success { + background-color: #5da423; + border-color: #457a1a; + color: #fff; + cursor: default; + opacity: 0.6; + -webkit-box-shadow: none; + box-shadow: none; +} +button.disabled.success:hover, button.disabled.success:focus, button[disabled].success:hover, button[disabled].success:focus, .button.disabled.success:hover, .button.disabled.success:focus, .button[disabled].success:hover, .button[disabled].success:focus { + background-color: #457a1a; +} +button.disabled.success:hover, button.disabled.success:focus, button[disabled].success:hover, button[disabled].success:focus, .button.disabled.success:hover, .button.disabled.success:focus, .button[disabled].success:hover, .button[disabled].success:focus { + color: #fff; +} +button.disabled.success:hover, button.disabled.success:focus, button[disabled].success:hover, button[disabled].success:focus, .button.disabled.success:hover, .button.disabled.success:focus, .button[disabled].success:hover, .button[disabled].success:focus { + background-color: #5da423; +} +button.disabled.alert, button[disabled].alert, .button.disabled.alert, .button[disabled].alert { + background-color: #c60f13; + border-color: #970b0e; + color: #fff; + cursor: default; + opacity: 0.6; + -webkit-box-shadow: none; + box-shadow: none; +} +button.disabled.alert:hover, button.disabled.alert:focus, button[disabled].alert:hover, button[disabled].alert:focus, .button.disabled.alert:hover, .button.disabled.alert:focus, .button[disabled].alert:hover, .button[disabled].alert:focus { + background-color: #970b0e; +} +button.disabled.alert:hover, button.disabled.alert:focus, button[disabled].alert:hover, button[disabled].alert:focus, .button.disabled.alert:hover, .button.disabled.alert:focus, .button[disabled].alert:hover, .button[disabled].alert:focus { + color: #fff; +} +button.disabled.alert:hover, button.disabled.alert:focus, button[disabled].alert:hover, button[disabled].alert:focus, .button.disabled.alert:hover, .button.disabled.alert:focus, .button[disabled].alert:hover, .button[disabled].alert:focus { + background-color: #c60f13; +} + +button, .button { + padding-top: 0.8125em; + padding-bottom: 0.75em; + -webkit-appearance: none; +} +button.tiny, .button.tiny { + padding-top: 0.5em; + padding-bottom: 0.4375em; + -webkit-appearance: none; +} +button.small, .button.small { + padding-top: 0.625em; + padding-bottom: 0.5625em; + -webkit-appearance: none; +} +button.large, .button.large { + padding-top: 1.03125em; + padding-bottom: 1.03125em; + -webkit-appearance: none; +} + +@media only screen { + button, .button { + -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5) inset; + box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5) inset; + -webkit-transition: background-color 300ms ease-out; + -moz-transition: background-color 300ms ease-out; + transition: background-color 300ms ease-out; + } + button:active, .button:active { + -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2) inset; + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2) inset; + } + button.radius, .button.radius { + -webkit-border-radius: 3px; + border-radius: 3px; + } + button.round, .button.round { + -webkit-border-radius: 1000px; + border-radius: 1000px; + } +} +@media only screen and (min-width: 768px) { + button, .button { + display: inline-block; + } +} +/* Standard Forms */ +form { + margin: 0 0 1em; +} + +/* Using forms within rows, we need to set some defaults */ +form .row .row { + margin: 0 -0.5em; +} +form .row .row .column, +form .row .row .columns { + padding: 0 0.5em; +} +form .row .row.collapse { + margin: 0; +} +form .row .row.collapse .column, +form .row .row.collapse .columns { + padding: 0; +} +form .row .row.collapse input { + -moz-border-radius-bottomright: 0; + -moz-border-radius-topright: 0; + -webkit-border-bottom-right-radius: 0; + -webkit-border-top-right-radius: 0; +} +form .row input.column, +form .row input.columns, +form .row textarea.column, +form .row textarea.columns { + padding-left: 0.5em; +} + +/* Label Styles */ +label { + font-size: 0.875em; + color: #4d4d4d; + cursor: pointer; + display: block; + font-weight: 500; + margin-bottom: 0.1875em; + /* Styles for required inputs */ +} +label.right { + float: none; + text-align: right; +} +label.inline { + margin: 0 0 1em 0; + padding: 0.625em 0; +} +label small { + text-transform: capitalize; + color: #666666; +} + +/* Attach elements to the beginning or end of an input */ +.prefix, +.postfix { + display: block; + position: relative; + z-index: 2; + text-align: center; + width: 100%; + padding-top: 0; + padding-bottom: 0; + border-style: solid; + border-width: 1px; + overflow: hidden; + font-size: 0.875em; + height: 2.3125em; + line-height: 2.3125em; +} + +/* Adjust padding, alignment and radius if pre/post element is a button */ +.postfix.button { + padding-left: 0; + padding-right: 0; + padding-top: 0; + padding-bottom: 0; + text-align: center; + line-height: 2.125em; +} + +.prefix.button { + padding-left: 0; + padding-right: 0; + padding-top: 0; + padding-bottom: 0; + text-align: center; + line-height: 2.125em; +} + +.prefix.button.radius { + -webkit-border-radius: 0; + border-radius: 0; + -moz-border-radius-bottomleft: 3px; + -moz-border-radius-topleft: 3px; + -webkit-border-bottom-left-radius: 3px; + -webkit-border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} + +.postfix.button.radius { + -webkit-border-radius: 0; + border-radius: 0; + -moz-border-radius-topright: 3px; + -moz-border-radius-bottomright: 3px; + -webkit-border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} + +.prefix.button.round { + -webkit-border-radius: 0; + border-radius: 0; + -moz-border-radius-bottomleft: 1000px; + -moz-border-radius-topleft: 1000px; + -webkit-border-bottom-left-radius: 1000px; + -webkit-border-top-left-radius: 1000px; + border-bottom-left-radius: 1000px; + border-top-left-radius: 1000px; +} + +.postfix.button.round { + -webkit-border-radius: 0; + border-radius: 0; + -moz-border-radius-topright: 1000px; + -moz-border-radius-bottomright: 1000px; + -webkit-border-top-right-radius: 1000px; + -webkit-border-bottom-right-radius: 1000px; + border-top-right-radius: 1000px; + border-bottom-right-radius: 1000px; +} + +/* Separate prefix and postfix styles when on span or label so buttons keep their own */ +span.prefix, label.prefix { + background: #f2f2f2; + border-color: #d9d9d9; + border-right: none; + color: #333; +} +span.prefix.radius, label.prefix.radius { + -webkit-border-radius: 0; + border-radius: 0; + -moz-border-radius-bottomleft: 3px; + -moz-border-radius-topleft: 3px; + -webkit-border-bottom-left-radius: 3px; + -webkit-border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} + +span.postfix, label.postfix { + background: #f2f2f2; + border-color: #cccccc; + border-left: none; + color: #333; +} +span.postfix.radius, label.postfix.radius { + -webkit-border-radius: 0; + border-radius: 0; + -moz-border-radius-topright: 3px; + -moz-border-radius-bottomright: 3px; + -webkit-border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} + +/* Input groups will automatically style first and last elements of the group */ +.input-group.radius > *:first-child, .input-group.radius > *:first-child * { + -moz-border-radius-bottomleft: 3px; + -moz-border-radius-topleft: 3px; + -webkit-border-bottom-left-radius: 3px; + -webkit-border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} +.input-group.radius > *:last-child, .input-group.radius > *:last-child * { + -moz-border-radius-topright: 3px; + -moz-border-radius-bottomright: 3px; + -webkit-border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} +.input-group.round > *:first-child, .input-group.round > *:first-child * { + -moz-border-radius-bottomleft: 1000px; + -moz-border-radius-topleft: 1000px; + -webkit-border-bottom-left-radius: 1000px; + -webkit-border-top-left-radius: 1000px; + border-bottom-left-radius: 1000px; + border-top-left-radius: 1000px; +} +.input-group.round > *:last-child, .input-group.round > *:last-child * { + -moz-border-radius-topright: 1000px; + -moz-border-radius-bottomright: 1000px; + -webkit-border-top-right-radius: 1000px; + -webkit-border-bottom-right-radius: 1000px; + border-top-right-radius: 1000px; + border-bottom-right-radius: 1000px; +} + +/* We use this to get basic styling on all basic form elements */ +input[type="text"], +input[type="password"], +input[type="date"], +input[type="datetime"], +input[type="datetime-local"], +input[type="month"], +input[type="week"], +input[type="email"], +input[type="number"], +input[type="search"], +input[type="tel"], +input[type="time"], +input[type="url"], +textarea { + -webkit-appearance: none; + -webkit-border-radius: 0; + border-radius: 0; + background-color: #fff; + font-family: inherit; + border: 1px solid #cccccc; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + color: rgba(0, 0, 0, 0.75); + display: block; + font-size: 0.875em; + margin: 0 0 1em 0; + padding: 0.5em; + height: 2.3125em; + width: 100%; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-transition: -webkit-box-shadow 0.45s, border-color 0.45s ease-in-out; + -moz-transition: -moz-box-shadow 0.45s, border-color 0.45s ease-in-out; + transition: box-shadow 0.45s, border-color 0.45s ease-in-out; +} +input[type="text"]:focus, +input[type="password"]:focus, +input[type="date"]:focus, +input[type="datetime"]:focus, +input[type="datetime-local"]:focus, +input[type="month"]:focus, +input[type="week"]:focus, +input[type="email"]:focus, +input[type="number"]:focus, +input[type="search"]:focus, +input[type="tel"]:focus, +input[type="time"]:focus, +input[type="url"]:focus, +textarea:focus { + -webkit-box-shadow: 0 0 5px #999999; + -moz-box-shadow: 0 0 5px #999999; + box-shadow: 0 0 5px #999999; + border-color: #999999; +} +input[type="text"]:focus, +input[type="password"]:focus, +input[type="date"]:focus, +input[type="datetime"]:focus, +input[type="datetime-local"]:focus, +input[type="month"]:focus, +input[type="week"]:focus, +input[type="email"]:focus, +input[type="number"]:focus, +input[type="search"]:focus, +input[type="tel"]:focus, +input[type="time"]:focus, +input[type="url"]:focus, +textarea:focus { + background: #fafafa; + border-color: #999999; + outline: none; +} +input[type="text"][disabled], +input[type="password"][disabled], +input[type="date"][disabled], +input[type="datetime"][disabled], +input[type="datetime-local"][disabled], +input[type="month"][disabled], +input[type="week"][disabled], +input[type="email"][disabled], +input[type="number"][disabled], +input[type="search"][disabled], +input[type="tel"][disabled], +input[type="time"][disabled], +input[type="url"][disabled], +textarea[disabled] { + background-color: #ddd; +} + +/* Adjust margin for form elements below */ +input[type="file"], +input[type="checkbox"], +input[type="radio"], +select { + margin: 0 0 1em 0; +} + +/* Normalize file input width */ +input[type="file"] { + width: 100%; +} + +/* We add basic fieldset styling */ +fieldset { + border: solid 1px #ddd; + padding: 1.25em; + margin: 1.125em 0; +} +fieldset legend { + font-weight: bold; + background: #fff; + padding: 0 0.1875em; + margin: 0; + margin-left: -0.1875em; +} + +/* Error Handling */ +[data-abide] .error small.error, [data-abide] span.error, [data-abide] small.error { + display: block; + padding: 0.375em 0.25em; + margin-top: 0; + margin-bottom: 1em; + font-size: 0.75em; + font-weight: bold; + background: #c60f13; + color: #fff; +} +[data-abide] span.error, [data-abide] small.error { + display: none; +} + +span.error, small.error { + display: block; + padding: 0.375em 0.25em; + margin-top: 0; + margin-bottom: 1em; + font-size: 0.75em; + font-weight: bold; + background: #c60f13; + color: #fff; +} + +.error input, +.error textarea, +.error select { + border-color: #c60f13; + background-color: rgba(198, 15, 19, 0.1); + margin-bottom: 0; +} +.error input:focus, +.error textarea:focus, +.error select:focus { + background: #fafafa; + border-color: #999999; +} +.error label, +.error label.error { + color: #c60f13; +} +.error > small, +.error small.error { + display: block; + padding: 0.375em 0.25em; + margin-top: 0; + margin-bottom: 1em; + font-size: 0.75em; + font-weight: bold; + background: #c60f13; + color: #fff; +} +.error span.error-message { + display: block; +} + +input.error, +textarea.error { + border-color: #c60f13; + background-color: rgba(198, 15, 19, 0.1); + margin-bottom: 0; +} +input.error:focus, +textarea.error:focus { + background: #fafafa; + border-color: #999999; +} + +.error select { + border-color: #c60f13; + background-color: rgba(198, 15, 19, 0.1); +} +.error select:focus { + background: #fafafa; + border-color: #999999; +} + +label.error { + color: #c60f13; +} + +/* Button Groups */ +.button-group { + list-style: none; + margin: 0; + *zoom: 1; +} +.button-group:before, .button-group:after { + content: " "; + display: table; +} +.button-group:after { + clear: both; +} +.button-group > * { + margin: 0 0 0 -1px; + float: left; +} +.button-group > *:first-child { + margin-left: 0; +} +.button-group.radius > *:first-child, .button-group.radius > *:first-child > a, .button-group.radius > *:first-child > button, .button-group.radius > *:first-child > .button { + -moz-border-radius-bottomleft: 3px; + -moz-border-radius-topleft: 3px; + -webkit-border-bottom-left-radius: 3px; + -webkit-border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} +.button-group.radius > *:last-child, .button-group.radius > *:last-child > a, .button-group.radius > *:last-child > button, .button-group.radius > *:last-child > .button { + -moz-border-radius-topright: 3px; + -moz-border-radius-bottomright: 3px; + -webkit-border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} +.button-group.round > *:first-child, .button-group.round > *:first-child > a, .button-group.round > *:first-child > button, .button-group.round > *:first-child > .button { + -moz-border-radius-bottomleft: 1000px; + -moz-border-radius-topleft: 1000px; + -webkit-border-bottom-left-radius: 1000px; + -webkit-border-top-left-radius: 1000px; + border-bottom-left-radius: 1000px; + border-top-left-radius: 1000px; +} +.button-group.round > *:last-child, .button-group.round > *:last-child > a, .button-group.round > *:last-child > button, .button-group.round > *:last-child > .button { + -moz-border-radius-topright: 1000px; + -moz-border-radius-bottomright: 1000px; + -webkit-border-top-right-radius: 1000px; + -webkit-border-bottom-right-radius: 1000px; + border-top-right-radius: 1000px; + border-bottom-right-radius: 1000px; +} +.button-group.even-2 li { + width: 50%; +} +.button-group.even-2 li button, .button-group.even-2 li .button { + width: 100%; +} +.button-group.even-3 li { + width: 33.33333%; +} +.button-group.even-3 li button, .button-group.even-3 li .button { + width: 100%; +} +.button-group.even-4 li { + width: 25%; +} +.button-group.even-4 li button, .button-group.even-4 li .button { + width: 100%; +} +.button-group.even-5 li { + width: 20%; +} +.button-group.even-5 li button, .button-group.even-5 li .button { + width: 100%; +} +.button-group.even-6 li { + width: 16.66667%; +} +.button-group.even-6 li button, .button-group.even-6 li .button { + width: 100%; +} +.button-group.even-7 li { + width: 14.28571%; +} +.button-group.even-7 li button, .button-group.even-7 li .button { + width: 100%; +} +.button-group.even-8 li { + width: 12.5%; +} +.button-group.even-8 li button, .button-group.even-8 li .button { + width: 100%; +} + +.button-bar { + *zoom: 1; +} +.button-bar:before, .button-bar:after { + content: " "; + display: table; +} +.button-bar:after { + clear: both; +} +.button-bar .button-group { + float: left; + margin-right: 0.625em; +} +.button-bar .button-group div { + overflow: hidden; +} + +/* Dropdown Button */ +.dropdown.button { + position: relative; + padding-right: 3.1875em; +} +.dropdown.button:before { + position: absolute; + content: ""; + width: 0; + height: 0; + display: block; + border-style: solid; + border-color: #fff transparent transparent transparent; + top: 50%; +} +.dropdown.button:before { + border-width: 0.5625em; + right: 1.5em; + margin-top: -0.25em; +} +.dropdown.button:before { + border-color: #fff transparent transparent transparent; +} +.dropdown.button.tiny { + padding-right: 2.1875em; +} +.dropdown.button.tiny:before { + border-width: 0.4375em; + right: 0.875em; + margin-top: -0.15625em; +} +.dropdown.button.tiny:before { + border-color: #fff transparent transparent transparent; +} +.dropdown.button.small { + padding-right: 2.8125em; +} +.dropdown.button.small:before { + border-width: 0.5625em; + right: 1.125em; + margin-top: -0.21875em; +} +.dropdown.button.small:before { + border-color: #fff transparent transparent transparent; +} +.dropdown.button.large { + padding-right: 4em; +} +.dropdown.button.large:before { + border-width: 0.625em; + right: 1.75em; + margin-top: -0.3125em; +} +.dropdown.button.large:before { + border-color: #fff transparent transparent transparent; +} +.dropdown.button.secondary:before { + border-color: #333 transparent transparent transparent; +} + +/* Split Buttons */ +.split.button { + position: relative; + padding-right: 4.8em; +} +.split.button span { + display: block; + height: 100%; + position: absolute; + right: 0; + top: 0; + border-left: solid 1px; +} +.split.button span:before { + position: absolute; + content: ""; + width: 0; + height: 0; + display: block; + border-style: inset; + left: 50%; +} +.split.button span:active { + background-color: rgba(0, 0, 0, 0.1); +} +.split.button span { + border-left-color: #1e728c; +} +.split.button span { + width: 3em; +} +.split.button span:before { + border-top-style: solid; + border-width: 0.5625em; + top: 1.125em; + margin-left: -0.5625em; +} +.split.button span:before { + border-color: #fff transparent transparent transparent; +} +.split.button.secondary span { + border-left-color: #c3c3c3; +} +.split.button.secondary span:before { + border-color: #fff transparent transparent transparent; +} +.split.button.alert span { + border-left-color: #7f0a0c; +} +.split.button.success span { + border-left-color: #396516; +} +.split.button.tiny { + padding-right: 3.9375em; +} +.split.button.tiny span { + width: 2.84375em; +} +.split.button.tiny span:before { + border-top-style: solid; + border-width: 0.4375em; + top: 0.875em; + margin-left: -0.3125em; +} +.split.button.small { + padding-right: 3.9375em; +} +.split.button.small span { + width: 2.8125em; +} +.split.button.small span:before { + border-top-style: solid; + border-width: 0.5625em; + top: 0.84375em; + margin-left: -0.5625em; +} +.split.button.large { + padding-right: 6em; +} +.split.button.large span { + width: 3.75em; +} +.split.button.large span:before { + border-top-style: solid; + border-width: 0.625em; + top: 1.3125em; + margin-left: -0.5625em; +} +.split.button.expand { + padding-left: 2em; +} +.split.button.secondary span:before { + border-color: #333 transparent transparent transparent; +} +.split.button.radius span { + -moz-border-radius-topright: 3px; + -moz-border-radius-bottomright: 3px; + -webkit-border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} +.split.button.round span { + -moz-border-radius-topright: 1000px; + -moz-border-radius-bottomright: 1000px; + -webkit-border-top-right-radius: 1000px; + -webkit-border-bottom-right-radius: 1000px; + border-top-right-radius: 1000px; + border-bottom-right-radius: 1000px; +} + +/* Flex Video */ +.flex-video { + position: relative; + padding-top: 1.5625em; + padding-bottom: 67.5%; + height: 0; + margin-bottom: 1em; + overflow: hidden; +} +.flex-video.widescreen { + padding-bottom: 57.25%; +} +.flex-video.vimeo { + padding-top: 0; +} +.flex-video iframe, +.flex-video object, +.flex-video embed, +.flex-video video { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +/* Sections */ +[data-section=''], [data-section='auto'], .section-container.auto, +[data-section='vertical-tabs'], .section-container.vertical-tabs, +[data-section='vertical-nav'], .section-container.vertical-nav, +[data-section='horizontal-nav'], .section-container.horizontal-nav, +[data-section='accordion'], .section-container.accordion { + width: 100%; + position: relative; + display: block; + margin-bottom: 1.25em; +} +[data-section=''][data-section-small-style], [data-section='auto'][data-section-small-style], .section-container.auto[data-section-small-style], +[data-section='vertical-tabs'][data-section-small-style], .section-container.vertical-tabs[data-section-small-style], +[data-section='vertical-nav'][data-section-small-style], .section-container.vertical-nav[data-section-small-style], +[data-section='horizontal-nav'][data-section-small-style], .section-container.horizontal-nav[data-section-small-style], +[data-section='accordion'][data-section-small-style], .section-container.accordion[data-section-small-style] { + width: 100% !important; +} +[data-section=''][data-section-small-style] > [data-section-region], [data-section=''][data-section-small-style] > section, [data-section=''][data-section-small-style] > .section, [data-section='auto'][data-section-small-style] > [data-section-region], [data-section='auto'][data-section-small-style] > section, [data-section='auto'][data-section-small-style] > .section, .section-container.auto[data-section-small-style] > [data-section-region], .section-container.auto[data-section-small-style] > section, .section-container.auto[data-section-small-style] > .section, +[data-section='vertical-tabs'][data-section-small-style] > [data-section-region], +[data-section='vertical-tabs'][data-section-small-style] > section, +[data-section='vertical-tabs'][data-section-small-style] > .section, .section-container.vertical-tabs[data-section-small-style] > [data-section-region], .section-container.vertical-tabs[data-section-small-style] > section, .section-container.vertical-tabs[data-section-small-style] > .section, +[data-section='vertical-nav'][data-section-small-style] > [data-section-region], +[data-section='vertical-nav'][data-section-small-style] > section, +[data-section='vertical-nav'][data-section-small-style] > .section, .section-container.vertical-nav[data-section-small-style] > [data-section-region], .section-container.vertical-nav[data-section-small-style] > section, .section-container.vertical-nav[data-section-small-style] > .section, +[data-section='horizontal-nav'][data-section-small-style] > [data-section-region], +[data-section='horizontal-nav'][data-section-small-style] > section, +[data-section='horizontal-nav'][data-section-small-style] > .section, .section-container.horizontal-nav[data-section-small-style] > [data-section-region], .section-container.horizontal-nav[data-section-small-style] > section, .section-container.horizontal-nav[data-section-small-style] > .section, +[data-section='accordion'][data-section-small-style] > [data-section-region], +[data-section='accordion'][data-section-small-style] > section, +[data-section='accordion'][data-section-small-style] > .section, .section-container.accordion[data-section-small-style] > [data-section-region], .section-container.accordion[data-section-small-style] > section, .section-container.accordion[data-section-small-style] > .section { + padding: 0 !important; + margin: 0 !important; +} +[data-section=''][data-section-small-style] > [data-section-region] > [data-section-title], [data-section=''][data-section-small-style] > [data-section-region] > .title, [data-section=''][data-section-small-style] > section > [data-section-title], [data-section=''][data-section-small-style] > section > .title, [data-section=''][data-section-small-style] > .section > [data-section-title], [data-section=''][data-section-small-style] > .section > .title, [data-section='auto'][data-section-small-style] > [data-section-region] > [data-section-title], [data-section='auto'][data-section-small-style] > [data-section-region] > .title, [data-section='auto'][data-section-small-style] > section > [data-section-title], [data-section='auto'][data-section-small-style] > section > .title, [data-section='auto'][data-section-small-style] > .section > [data-section-title], [data-section='auto'][data-section-small-style] > .section > .title, .section-container.auto[data-section-small-style] > [data-section-region] > [data-section-title], .section-container.auto[data-section-small-style] > [data-section-region] > .title, .section-container.auto[data-section-small-style] > section > [data-section-title], .section-container.auto[data-section-small-style] > section > .title, .section-container.auto[data-section-small-style] > .section > [data-section-title], .section-container.auto[data-section-small-style] > .section > .title, +[data-section='vertical-tabs'][data-section-small-style] > [data-section-region] > [data-section-title], +[data-section='vertical-tabs'][data-section-small-style] > [data-section-region] > .title, +[data-section='vertical-tabs'][data-section-small-style] > section > [data-section-title], +[data-section='vertical-tabs'][data-section-small-style] > section > .title, +[data-section='vertical-tabs'][data-section-small-style] > .section > [data-section-title], +[data-section='vertical-tabs'][data-section-small-style] > .section > .title, .section-container.vertical-tabs[data-section-small-style] > [data-section-region] > [data-section-title], .section-container.vertical-tabs[data-section-small-style] > [data-section-region] > .title, .section-container.vertical-tabs[data-section-small-style] > section > [data-section-title], .section-container.vertical-tabs[data-section-small-style] > section > .title, .section-container.vertical-tabs[data-section-small-style] > .section > [data-section-title], .section-container.vertical-tabs[data-section-small-style] > .section > .title, +[data-section='vertical-nav'][data-section-small-style] > [data-section-region] > [data-section-title], +[data-section='vertical-nav'][data-section-small-style] > [data-section-region] > .title, +[data-section='vertical-nav'][data-section-small-style] > section > [data-section-title], +[data-section='vertical-nav'][data-section-small-style] > section > .title, +[data-section='vertical-nav'][data-section-small-style] > .section > [data-section-title], +[data-section='vertical-nav'][data-section-small-style] > .section > .title, .section-container.vertical-nav[data-section-small-style] > [data-section-region] > [data-section-title], .section-container.vertical-nav[data-section-small-style] > [data-section-region] > .title, .section-container.vertical-nav[data-section-small-style] > section > [data-section-title], .section-container.vertical-nav[data-section-small-style] > section > .title, .section-container.vertical-nav[data-section-small-style] > .section > [data-section-title], .section-container.vertical-nav[data-section-small-style] > .section > .title, +[data-section='horizontal-nav'][data-section-small-style] > [data-section-region] > [data-section-title], +[data-section='horizontal-nav'][data-section-small-style] > [data-section-region] > .title, +[data-section='horizontal-nav'][data-section-small-style] > section > [data-section-title], +[data-section='horizontal-nav'][data-section-small-style] > section > .title, +[data-section='horizontal-nav'][data-section-small-style] > .section > [data-section-title], +[data-section='horizontal-nav'][data-section-small-style] > .section > .title, .section-container.horizontal-nav[data-section-small-style] > [data-section-region] > [data-section-title], .section-container.horizontal-nav[data-section-small-style] > [data-section-region] > .title, .section-container.horizontal-nav[data-section-small-style] > section > [data-section-title], .section-container.horizontal-nav[data-section-small-style] > section > .title, .section-container.horizontal-nav[data-section-small-style] > .section > [data-section-title], .section-container.horizontal-nav[data-section-small-style] > .section > .title, +[data-section='accordion'][data-section-small-style] > [data-section-region] > [data-section-title], +[data-section='accordion'][data-section-small-style] > [data-section-region] > .title, +[data-section='accordion'][data-section-small-style] > section > [data-section-title], +[data-section='accordion'][data-section-small-style] > section > .title, +[data-section='accordion'][data-section-small-style] > .section > [data-section-title], +[data-section='accordion'][data-section-small-style] > .section > .title, .section-container.accordion[data-section-small-style] > [data-section-region] > [data-section-title], .section-container.accordion[data-section-small-style] > [data-section-region] > .title, .section-container.accordion[data-section-small-style] > section > [data-section-title], .section-container.accordion[data-section-small-style] > section > .title, .section-container.accordion[data-section-small-style] > .section > [data-section-title], .section-container.accordion[data-section-small-style] > .section > .title { + width: 100% !important; +} +[data-section=''] > section, [data-section=''] > .section, [data-section=''] > [data-section-region], [data-section='auto'] > section, [data-section='auto'] > .section, [data-section='auto'] > [data-section-region], .section-container.auto > section, .section-container.auto > .section, .section-container.auto > [data-section-region], +[data-section='vertical-tabs'] > section, +[data-section='vertical-tabs'] > .section, +[data-section='vertical-tabs'] > [data-section-region], .section-container.vertical-tabs > section, .section-container.vertical-tabs > .section, .section-container.vertical-tabs > [data-section-region], +[data-section='vertical-nav'] > section, +[data-section='vertical-nav'] > .section, +[data-section='vertical-nav'] > [data-section-region], .section-container.vertical-nav > section, .section-container.vertical-nav > .section, .section-container.vertical-nav > [data-section-region], +[data-section='horizontal-nav'] > section, +[data-section='horizontal-nav'] > .section, +[data-section='horizontal-nav'] > [data-section-region], .section-container.horizontal-nav > section, .section-container.horizontal-nav > .section, .section-container.horizontal-nav > [data-section-region], +[data-section='accordion'] > section, +[data-section='accordion'] > .section, +[data-section='accordion'] > [data-section-region], .section-container.accordion > section, .section-container.accordion > .section, .section-container.accordion > [data-section-region] { + margin: 0; +} +[data-section=''] > section > [data-section-title], [data-section=''] > section > .title, [data-section=''] > .section > [data-section-title], [data-section=''] > .section > .title, [data-section=''] > [data-section-region] > [data-section-title], [data-section=''] > [data-section-region] > .title, [data-section='auto'] > section > [data-section-title], [data-section='auto'] > section > .title, [data-section='auto'] > .section > [data-section-title], [data-section='auto'] > .section > .title, [data-section='auto'] > [data-section-region] > [data-section-title], [data-section='auto'] > [data-section-region] > .title, .section-container.auto > section > [data-section-title], .section-container.auto > section > .title, .section-container.auto > .section > [data-section-title], .section-container.auto > .section > .title, .section-container.auto > [data-section-region] > [data-section-title], .section-container.auto > [data-section-region] > .title, +[data-section='vertical-tabs'] > section > [data-section-title], +[data-section='vertical-tabs'] > section > .title, +[data-section='vertical-tabs'] > .section > [data-section-title], +[data-section='vertical-tabs'] > .section > .title, +[data-section='vertical-tabs'] > [data-section-region] > [data-section-title], +[data-section='vertical-tabs'] > [data-section-region] > .title, .section-container.vertical-tabs > section > [data-section-title], .section-container.vertical-tabs > section > .title, .section-container.vertical-tabs > .section > [data-section-title], .section-container.vertical-tabs > .section > .title, .section-container.vertical-tabs > [data-section-region] > [data-section-title], .section-container.vertical-tabs > [data-section-region] > .title, +[data-section='vertical-nav'] > section > [data-section-title], +[data-section='vertical-nav'] > section > .title, +[data-section='vertical-nav'] > .section > [data-section-title], +[data-section='vertical-nav'] > .section > .title, +[data-section='vertical-nav'] > [data-section-region] > [data-section-title], +[data-section='vertical-nav'] > [data-section-region] > .title, .section-container.vertical-nav > section > [data-section-title], .section-container.vertical-nav > section > .title, .section-container.vertical-nav > .section > [data-section-title], .section-container.vertical-nav > .section > .title, .section-container.vertical-nav > [data-section-region] > [data-section-title], .section-container.vertical-nav > [data-section-region] > .title, +[data-section='horizontal-nav'] > section > [data-section-title], +[data-section='horizontal-nav'] > section > .title, +[data-section='horizontal-nav'] > .section > [data-section-title], +[data-section='horizontal-nav'] > .section > .title, +[data-section='horizontal-nav'] > [data-section-region] > [data-section-title], +[data-section='horizontal-nav'] > [data-section-region] > .title, .section-container.horizontal-nav > section > [data-section-title], .section-container.horizontal-nav > section > .title, .section-container.horizontal-nav > .section > [data-section-title], .section-container.horizontal-nav > .section > .title, .section-container.horizontal-nav > [data-section-region] > [data-section-title], .section-container.horizontal-nav > [data-section-region] > .title, +[data-section='accordion'] > section > [data-section-title], +[data-section='accordion'] > section > .title, +[data-section='accordion'] > .section > [data-section-title], +[data-section='accordion'] > .section > .title, +[data-section='accordion'] > [data-section-region] > [data-section-title], +[data-section='accordion'] > [data-section-region] > .title, .section-container.accordion > section > [data-section-title], .section-container.accordion > section > .title, .section-container.accordion > .section > [data-section-title], .section-container.accordion > .section > .title, .section-container.accordion > [data-section-region] > [data-section-title], .section-container.accordion > [data-section-region] > .title { + margin-bottom: 0; +} +[data-section=''] > section > [data-section-title] a, [data-section=''] > section > .title a, [data-section=''] > .section > [data-section-title] a, [data-section=''] > .section > .title a, [data-section=''] > [data-section-region] > [data-section-title] a, [data-section=''] > [data-section-region] > .title a, [data-section='auto'] > section > [data-section-title] a, [data-section='auto'] > section > .title a, [data-section='auto'] > .section > [data-section-title] a, [data-section='auto'] > .section > .title a, [data-section='auto'] > [data-section-region] > [data-section-title] a, [data-section='auto'] > [data-section-region] > .title a, .section-container.auto > section > [data-section-title] a, .section-container.auto > section > .title a, .section-container.auto > .section > [data-section-title] a, .section-container.auto > .section > .title a, .section-container.auto > [data-section-region] > [data-section-title] a, .section-container.auto > [data-section-region] > .title a, +[data-section='vertical-tabs'] > section > [data-section-title] a, +[data-section='vertical-tabs'] > section > .title a, +[data-section='vertical-tabs'] > .section > [data-section-title] a, +[data-section='vertical-tabs'] > .section > .title a, +[data-section='vertical-tabs'] > [data-section-region] > [data-section-title] a, +[data-section='vertical-tabs'] > [data-section-region] > .title a, .section-container.vertical-tabs > section > [data-section-title] a, .section-container.vertical-tabs > section > .title a, .section-container.vertical-tabs > .section > [data-section-title] a, .section-container.vertical-tabs > .section > .title a, .section-container.vertical-tabs > [data-section-region] > [data-section-title] a, .section-container.vertical-tabs > [data-section-region] > .title a, +[data-section='vertical-nav'] > section > [data-section-title] a, +[data-section='vertical-nav'] > section > .title a, +[data-section='vertical-nav'] > .section > [data-section-title] a, +[data-section='vertical-nav'] > .section > .title a, +[data-section='vertical-nav'] > [data-section-region] > [data-section-title] a, +[data-section='vertical-nav'] > [data-section-region] > .title a, .section-container.vertical-nav > section > [data-section-title] a, .section-container.vertical-nav > section > .title a, .section-container.vertical-nav > .section > [data-section-title] a, .section-container.vertical-nav > .section > .title a, .section-container.vertical-nav > [data-section-region] > [data-section-title] a, .section-container.vertical-nav > [data-section-region] > .title a, +[data-section='horizontal-nav'] > section > [data-section-title] a, +[data-section='horizontal-nav'] > section > .title a, +[data-section='horizontal-nav'] > .section > [data-section-title] a, +[data-section='horizontal-nav'] > .section > .title a, +[data-section='horizontal-nav'] > [data-section-region] > [data-section-title] a, +[data-section='horizontal-nav'] > [data-section-region] > .title a, .section-container.horizontal-nav > section > [data-section-title] a, .section-container.horizontal-nav > section > .title a, .section-container.horizontal-nav > .section > [data-section-title] a, .section-container.horizontal-nav > .section > .title a, .section-container.horizontal-nav > [data-section-region] > [data-section-title] a, .section-container.horizontal-nav > [data-section-region] > .title a, +[data-section='accordion'] > section > [data-section-title] a, +[data-section='accordion'] > section > .title a, +[data-section='accordion'] > .section > [data-section-title] a, +[data-section='accordion'] > .section > .title a, +[data-section='accordion'] > [data-section-region] > [data-section-title] a, +[data-section='accordion'] > [data-section-region] > .title a, .section-container.accordion > section > [data-section-title] a, .section-container.accordion > section > .title a, .section-container.accordion > .section > [data-section-title] a, .section-container.accordion > .section > .title a, .section-container.accordion > [data-section-region] > [data-section-title] a, .section-container.accordion > [data-section-region] > .title a { + width: 100%; + display: inline-block; + white-space: nowrap; +} +[data-section=''] > section > [data-section-content], [data-section=''] > section > .content, [data-section=''] > .section > [data-section-content], [data-section=''] > .section > .content, [data-section=''] > [data-section-region] > [data-section-content], [data-section=''] > [data-section-region] > .content, [data-section='auto'] > section > [data-section-content], [data-section='auto'] > section > .content, [data-section='auto'] > .section > [data-section-content], [data-section='auto'] > .section > .content, [data-section='auto'] > [data-section-region] > [data-section-content], [data-section='auto'] > [data-section-region] > .content, .section-container.auto > section > [data-section-content], .section-container.auto > section > .content, .section-container.auto > .section > [data-section-content], .section-container.auto > .section > .content, .section-container.auto > [data-section-region] > [data-section-content], .section-container.auto > [data-section-region] > .content, +[data-section='vertical-tabs'] > section > [data-section-content], +[data-section='vertical-tabs'] > section > .content, +[data-section='vertical-tabs'] > .section > [data-section-content], +[data-section='vertical-tabs'] > .section > .content, +[data-section='vertical-tabs'] > [data-section-region] > [data-section-content], +[data-section='vertical-tabs'] > [data-section-region] > .content, .section-container.vertical-tabs > section > [data-section-content], .section-container.vertical-tabs > section > .content, .section-container.vertical-tabs > .section > [data-section-content], .section-container.vertical-tabs > .section > .content, .section-container.vertical-tabs > [data-section-region] > [data-section-content], .section-container.vertical-tabs > [data-section-region] > .content, +[data-section='vertical-nav'] > section > [data-section-content], +[data-section='vertical-nav'] > section > .content, +[data-section='vertical-nav'] > .section > [data-section-content], +[data-section='vertical-nav'] > .section > .content, +[data-section='vertical-nav'] > [data-section-region] > [data-section-content], +[data-section='vertical-nav'] > [data-section-region] > .content, .section-container.vertical-nav > section > [data-section-content], .section-container.vertical-nav > section > .content, .section-container.vertical-nav > .section > [data-section-content], .section-container.vertical-nav > .section > .content, .section-container.vertical-nav > [data-section-region] > [data-section-content], .section-container.vertical-nav > [data-section-region] > .content, +[data-section='horizontal-nav'] > section > [data-section-content], +[data-section='horizontal-nav'] > section > .content, +[data-section='horizontal-nav'] > .section > [data-section-content], +[data-section='horizontal-nav'] > .section > .content, +[data-section='horizontal-nav'] > [data-section-region] > [data-section-content], +[data-section='horizontal-nav'] > [data-section-region] > .content, .section-container.horizontal-nav > section > [data-section-content], .section-container.horizontal-nav > section > .content, .section-container.horizontal-nav > .section > [data-section-content], .section-container.horizontal-nav > .section > .content, .section-container.horizontal-nav > [data-section-region] > [data-section-content], .section-container.horizontal-nav > [data-section-region] > .content, +[data-section='accordion'] > section > [data-section-content], +[data-section='accordion'] > section > .content, +[data-section='accordion'] > .section > [data-section-content], +[data-section='accordion'] > .section > .content, +[data-section='accordion'] > [data-section-region] > [data-section-content], +[data-section='accordion'] > [data-section-region] > .content, .section-container.accordion > section > [data-section-content], .section-container.accordion > section > .content, .section-container.accordion > .section > [data-section-content], .section-container.accordion > .section > .content, .section-container.accordion > [data-section-region] > [data-section-content], .section-container.accordion > [data-section-region] > .content { + display: none; +} +[data-section=''] > section.active > [data-section-content], [data-section=''] > section.active > .content, [data-section=''] > .section.active > [data-section-content], [data-section=''] > .section.active > .content, [data-section=''] > [data-section-region].active > [data-section-content], [data-section=''] > [data-section-region].active > .content, [data-section='auto'] > section.active > [data-section-content], [data-section='auto'] > section.active > .content, [data-section='auto'] > .section.active > [data-section-content], [data-section='auto'] > .section.active > .content, [data-section='auto'] > [data-section-region].active > [data-section-content], [data-section='auto'] > [data-section-region].active > .content, .section-container.auto > section.active > [data-section-content], .section-container.auto > section.active > .content, .section-container.auto > .section.active > [data-section-content], .section-container.auto > .section.active > .content, .section-container.auto > [data-section-region].active > [data-section-content], .section-container.auto > [data-section-region].active > .content, +[data-section='vertical-tabs'] > section.active > [data-section-content], +[data-section='vertical-tabs'] > section.active > .content, +[data-section='vertical-tabs'] > .section.active > [data-section-content], +[data-section='vertical-tabs'] > .section.active > .content, +[data-section='vertical-tabs'] > [data-section-region].active > [data-section-content], +[data-section='vertical-tabs'] > [data-section-region].active > .content, .section-container.vertical-tabs > section.active > [data-section-content], .section-container.vertical-tabs > section.active > .content, .section-container.vertical-tabs > .section.active > [data-section-content], .section-container.vertical-tabs > .section.active > .content, .section-container.vertical-tabs > [data-section-region].active > [data-section-content], .section-container.vertical-tabs > [data-section-region].active > .content, +[data-section='vertical-nav'] > section.active > [data-section-content], +[data-section='vertical-nav'] > section.active > .content, +[data-section='vertical-nav'] > .section.active > [data-section-content], +[data-section='vertical-nav'] > .section.active > .content, +[data-section='vertical-nav'] > [data-section-region].active > [data-section-content], +[data-section='vertical-nav'] > [data-section-region].active > .content, .section-container.vertical-nav > section.active > [data-section-content], .section-container.vertical-nav > section.active > .content, .section-container.vertical-nav > .section.active > [data-section-content], .section-container.vertical-nav > .section.active > .content, .section-container.vertical-nav > [data-section-region].active > [data-section-content], .section-container.vertical-nav > [data-section-region].active > .content, +[data-section='horizontal-nav'] > section.active > [data-section-content], +[data-section='horizontal-nav'] > section.active > .content, +[data-section='horizontal-nav'] > .section.active > [data-section-content], +[data-section='horizontal-nav'] > .section.active > .content, +[data-section='horizontal-nav'] > [data-section-region].active > [data-section-content], +[data-section='horizontal-nav'] > [data-section-region].active > .content, .section-container.horizontal-nav > section.active > [data-section-content], .section-container.horizontal-nav > section.active > .content, .section-container.horizontal-nav > .section.active > [data-section-content], .section-container.horizontal-nav > .section.active > .content, .section-container.horizontal-nav > [data-section-region].active > [data-section-content], .section-container.horizontal-nav > [data-section-region].active > .content, +[data-section='accordion'] > section.active > [data-section-content], +[data-section='accordion'] > section.active > .content, +[data-section='accordion'] > .section.active > [data-section-content], +[data-section='accordion'] > .section.active > .content, +[data-section='accordion'] > [data-section-region].active > [data-section-content], +[data-section='accordion'] > [data-section-region].active > .content, .section-container.accordion > section.active > [data-section-content], .section-container.accordion > section.active > .content, .section-container.accordion > .section.active > [data-section-content], .section-container.accordion > .section.active > .content, .section-container.accordion > [data-section-region].active > [data-section-content], .section-container.accordion > [data-section-region].active > .content { + display: block; +} +[data-section=''] > section:not(.active), [data-section=''] > .section:not(.active), [data-section=''] > [data-section-region]:not(.active), [data-section='auto'] > section:not(.active), [data-section='auto'] > .section:not(.active), [data-section='auto'] > [data-section-region]:not(.active), .section-container.auto > section:not(.active), .section-container.auto > .section:not(.active), .section-container.auto > [data-section-region]:not(.active), +[data-section='vertical-tabs'] > section:not(.active), +[data-section='vertical-tabs'] > .section:not(.active), +[data-section='vertical-tabs'] > [data-section-region]:not(.active), .section-container.vertical-tabs > section:not(.active), .section-container.vertical-tabs > .section:not(.active), .section-container.vertical-tabs > [data-section-region]:not(.active), +[data-section='vertical-nav'] > section:not(.active), +[data-section='vertical-nav'] > .section:not(.active), +[data-section='vertical-nav'] > [data-section-region]:not(.active), .section-container.vertical-nav > section:not(.active), .section-container.vertical-nav > .section:not(.active), .section-container.vertical-nav > [data-section-region]:not(.active), +[data-section='horizontal-nav'] > section:not(.active), +[data-section='horizontal-nav'] > .section:not(.active), +[data-section='horizontal-nav'] > [data-section-region]:not(.active), .section-container.horizontal-nav > section:not(.active), .section-container.horizontal-nav > .section:not(.active), .section-container.horizontal-nav > [data-section-region]:not(.active), +[data-section='accordion'] > section:not(.active), +[data-section='accordion'] > .section:not(.active), +[data-section='accordion'] > [data-section-region]:not(.active), .section-container.accordion > section:not(.active), .section-container.accordion > .section:not(.active), .section-container.accordion > [data-section-region]:not(.active) { + padding: 0 !important; +} +[data-section=''] > section > [data-section-title], [data-section=''] > section > .title, [data-section=''] > .section > [data-section-title], [data-section=''] > .section > .title, [data-section=''] > [data-section-region] > [data-section-title], [data-section=''] > [data-section-region] > .title, [data-section='auto'] > section > [data-section-title], [data-section='auto'] > section > .title, [data-section='auto'] > .section > [data-section-title], [data-section='auto'] > .section > .title, [data-section='auto'] > [data-section-region] > [data-section-title], [data-section='auto'] > [data-section-region] > .title, .section-container.auto > section > [data-section-title], .section-container.auto > section > .title, .section-container.auto > .section > [data-section-title], .section-container.auto > .section > .title, .section-container.auto > [data-section-region] > [data-section-title], .section-container.auto > [data-section-region] > .title, +[data-section='vertical-tabs'] > section > [data-section-title], +[data-section='vertical-tabs'] > section > .title, +[data-section='vertical-tabs'] > .section > [data-section-title], +[data-section='vertical-tabs'] > .section > .title, +[data-section='vertical-tabs'] > [data-section-region] > [data-section-title], +[data-section='vertical-tabs'] > [data-section-region] > .title, .section-container.vertical-tabs > section > [data-section-title], .section-container.vertical-tabs > section > .title, .section-container.vertical-tabs > .section > [data-section-title], .section-container.vertical-tabs > .section > .title, .section-container.vertical-tabs > [data-section-region] > [data-section-title], .section-container.vertical-tabs > [data-section-region] > .title, +[data-section='vertical-nav'] > section > [data-section-title], +[data-section='vertical-nav'] > section > .title, +[data-section='vertical-nav'] > .section > [data-section-title], +[data-section='vertical-nav'] > .section > .title, +[data-section='vertical-nav'] > [data-section-region] > [data-section-title], +[data-section='vertical-nav'] > [data-section-region] > .title, .section-container.vertical-nav > section > [data-section-title], .section-container.vertical-nav > section > .title, .section-container.vertical-nav > .section > [data-section-title], .section-container.vertical-nav > .section > .title, .section-container.vertical-nav > [data-section-region] > [data-section-title], .section-container.vertical-nav > [data-section-region] > .title, +[data-section='horizontal-nav'] > section > [data-section-title], +[data-section='horizontal-nav'] > section > .title, +[data-section='horizontal-nav'] > .section > [data-section-title], +[data-section='horizontal-nav'] > .section > .title, +[data-section='horizontal-nav'] > [data-section-region] > [data-section-title], +[data-section='horizontal-nav'] > [data-section-region] > .title, .section-container.horizontal-nav > section > [data-section-title], .section-container.horizontal-nav > section > .title, .section-container.horizontal-nav > .section > [data-section-title], .section-container.horizontal-nav > .section > .title, .section-container.horizontal-nav > [data-section-region] > [data-section-title], .section-container.horizontal-nav > [data-section-region] > .title, +[data-section='accordion'] > section > [data-section-title], +[data-section='accordion'] > section > .title, +[data-section='accordion'] > .section > [data-section-title], +[data-section='accordion'] > .section > .title, +[data-section='accordion'] > [data-section-region] > [data-section-title], +[data-section='accordion'] > [data-section-region] > .title, .section-container.accordion > section > [data-section-title], .section-container.accordion > section > .title, .section-container.accordion > .section > [data-section-title], .section-container.accordion > .section > .title, .section-container.accordion > [data-section-region] > [data-section-title], .section-container.accordion > [data-section-region] > .title { + width: 100%; +} + +.section-container.auto, +.section-container.vertical-tabs, +.section-container.vertical-nav, +.section-container.horizontal-nav, +.section-container.accordion { + border-top: 1px solid #ccc; +} +.section-container.auto > section > .title, .section-container.auto > .section > .title, +.section-container.vertical-tabs > section > .title, +.section-container.vertical-tabs > .section > .title, +.section-container.vertical-nav > section > .title, +.section-container.vertical-nav > .section > .title, +.section-container.horizontal-nav > section > .title, +.section-container.horizontal-nav > .section > .title, +.section-container.accordion > section > .title, +.section-container.accordion > .section > .title { + background-color: #efefef; + cursor: pointer; + border: solid 1px #ccc; +} +.section-container.auto > section > .title a, .section-container.auto > .section > .title a, +.section-container.vertical-tabs > section > .title a, +.section-container.vertical-tabs > .section > .title a, +.section-container.vertical-nav > section > .title a, +.section-container.vertical-nav > .section > .title a, +.section-container.horizontal-nav > section > .title a, +.section-container.horizontal-nav > .section > .title a, +.section-container.accordion > section > .title a, +.section-container.accordion > .section > .title a { + padding: 0.9375em; + color: #333; + font-size: 0.875em; + background: none; +} +.section-container.auto > section > .title:hover, .section-container.auto > .section > .title:hover, +.section-container.vertical-tabs > section > .title:hover, +.section-container.vertical-tabs > .section > .title:hover, +.section-container.vertical-nav > section > .title:hover, +.section-container.vertical-nav > .section > .title:hover, +.section-container.horizontal-nav > section > .title:hover, +.section-container.horizontal-nav > .section > .title:hover, +.section-container.accordion > section > .title:hover, +.section-container.accordion > .section > .title:hover { + background-color: #e2e2e2; +} +.section-container.auto > section > .content, .section-container.auto > .section > .content, +.section-container.vertical-tabs > section > .content, +.section-container.vertical-tabs > .section > .content, +.section-container.vertical-nav > section > .content, +.section-container.vertical-nav > .section > .content, +.section-container.horizontal-nav > section > .content, +.section-container.horizontal-nav > .section > .content, +.section-container.accordion > section > .content, +.section-container.accordion > .section > .content { + padding: 0.9375em; + background-color: #fff; + border: solid 1px #ccc; +} +.section-container.auto > section > .content > *:last-child, .section-container.auto > .section > .content > *:last-child, +.section-container.vertical-tabs > section > .content > *:last-child, +.section-container.vertical-tabs > .section > .content > *:last-child, +.section-container.vertical-nav > section > .content > *:last-child, +.section-container.vertical-nav > .section > .content > *:last-child, +.section-container.horizontal-nav > section > .content > *:last-child, +.section-container.horizontal-nav > .section > .content > *:last-child, +.section-container.accordion > section > .content > *:last-child, +.section-container.accordion > .section > .content > *:last-child { + margin-bottom: 0; +} +.section-container.auto > section > .content > *:first-child, .section-container.auto > .section > .content > *:first-child, +.section-container.vertical-tabs > section > .content > *:first-child, +.section-container.vertical-tabs > .section > .content > *:first-child, +.section-container.vertical-nav > section > .content > *:first-child, +.section-container.vertical-nav > .section > .content > *:first-child, +.section-container.horizontal-nav > section > .content > *:first-child, +.section-container.horizontal-nav > .section > .content > *:first-child, +.section-container.accordion > section > .content > *:first-child, +.section-container.accordion > .section > .content > *:first-child { + padding-top: 0; +} +.section-container.auto > section > .content > *:last-child:not(.flex-video), .section-container.auto > .section > .content > *:last-child:not(.flex-video), +.section-container.vertical-tabs > section > .content > *:last-child:not(.flex-video), +.section-container.vertical-tabs > .section > .content > *:last-child:not(.flex-video), +.section-container.vertical-nav > section > .content > *:last-child:not(.flex-video), +.section-container.vertical-nav > .section > .content > *:last-child:not(.flex-video), +.section-container.horizontal-nav > section > .content > *:last-child:not(.flex-video), +.section-container.horizontal-nav > .section > .content > *:last-child:not(.flex-video), +.section-container.accordion > section > .content > *:last-child:not(.flex-video), +.section-container.accordion > .section > .content > *:last-child:not(.flex-video) { + padding-bottom: 0; +} +.section-container.auto > section.active > .title, .section-container.auto > .section.active > .title, +.section-container.vertical-tabs > section.active > .title, +.section-container.vertical-tabs > .section.active > .title, +.section-container.vertical-nav > section.active > .title, +.section-container.vertical-nav > .section.active > .title, +.section-container.horizontal-nav > section.active > .title, +.section-container.horizontal-nav > .section.active > .title, +.section-container.accordion > section.active > .title, +.section-container.accordion > .section.active > .title { + background: #d6d6d6; +} +.section-container.auto > section.active > .title a, .section-container.auto > .section.active > .title a, +.section-container.vertical-tabs > section.active > .title a, +.section-container.vertical-tabs > .section.active > .title a, +.section-container.vertical-nav > section.active > .title a, +.section-container.vertical-nav > .section.active > .title a, +.section-container.horizontal-nav > section.active > .title a, +.section-container.horizontal-nav > .section.active > .title a, +.section-container.accordion > section.active > .title a, +.section-container.accordion > .section.active > .title a { + color: #333; +} +.section-container.auto > section:not(.active), .section-container.auto > .section:not(.active), +.section-container.vertical-tabs > section:not(.active), +.section-container.vertical-tabs > .section:not(.active), +.section-container.vertical-nav > section:not(.active), +.section-container.vertical-nav > .section:not(.active), +.section-container.horizontal-nav > section:not(.active), +.section-container.horizontal-nav > .section:not(.active), +.section-container.accordion > section:not(.active), +.section-container.accordion > .section:not(.active) { + padding: 0 !important; +} +.section-container.auto > section > .title, .section-container.auto > .section > .title, +.section-container.vertical-tabs > section > .title, +.section-container.vertical-tabs > .section > .title, +.section-container.vertical-nav > section > .title, +.section-container.vertical-nav > .section > .title, +.section-container.horizontal-nav > section > .title, +.section-container.horizontal-nav > .section > .title, +.section-container.accordion > section > .title, +.section-container.accordion > .section > .title { + border-top: none; +} + +[data-section='tabs'], .section-container.tabs { + width: 100%; + position: relative; + display: block; + margin-bottom: 1.25em; +} +[data-section='tabs']:not([data-section-resized]):not([data-section-small-style]), .section-container.tabs:not([data-section-resized]):not([data-section-small-style]) { + visibility: hidden; +} +[data-section='tabs'] > section > [data-section-title], [data-section='tabs'] > section > .title, [data-section='tabs'] > .section > [data-section-title], [data-section='tabs'] > .section > .title, [data-section='tabs'] > [data-section-region] > [data-section-title], [data-section='tabs'] > [data-section-region] > .title, .section-container.tabs > section > [data-section-title], .section-container.tabs > section > .title, .section-container.tabs > .section > [data-section-title], .section-container.tabs > .section > .title, .section-container.tabs > [data-section-region] > [data-section-title], .section-container.tabs > [data-section-region] > .title { + margin-bottom: 0; +} +[data-section='tabs'] > section > [data-section-title] a, [data-section='tabs'] > section > .title a, [data-section='tabs'] > .section > [data-section-title] a, [data-section='tabs'] > .section > .title a, [data-section='tabs'] > [data-section-region] > [data-section-title] a, [data-section='tabs'] > [data-section-region] > .title a, .section-container.tabs > section > [data-section-title] a, .section-container.tabs > section > .title a, .section-container.tabs > .section > [data-section-title] a, .section-container.tabs > .section > .title a, .section-container.tabs > [data-section-region] > [data-section-title] a, .section-container.tabs > [data-section-region] > .title a { + width: 100%; + display: inline-block; + white-space: nowrap; +} +[data-section='tabs'] > section > [data-section-content], [data-section='tabs'] > section > .content, [data-section='tabs'] > .section > [data-section-content], [data-section='tabs'] > .section > .content, [data-section='tabs'] > [data-section-region] > [data-section-content], [data-section='tabs'] > [data-section-region] > .content, .section-container.tabs > section > [data-section-content], .section-container.tabs > section > .content, .section-container.tabs > .section > [data-section-content], .section-container.tabs > .section > .content, .section-container.tabs > [data-section-region] > [data-section-content], .section-container.tabs > [data-section-region] > .content { + display: none; +} +[data-section='tabs'] > section.active > [data-section-content], [data-section='tabs'] > section.active > .content, [data-section='tabs'] > .section.active > [data-section-content], [data-section='tabs'] > .section.active > .content, [data-section='tabs'] > [data-section-region].active > [data-section-content], [data-section='tabs'] > [data-section-region].active > .content, .section-container.tabs > section.active > [data-section-content], .section-container.tabs > section.active > .content, .section-container.tabs > .section.active > [data-section-content], .section-container.tabs > .section.active > .content, .section-container.tabs > [data-section-region].active > [data-section-content], .section-container.tabs > [data-section-region].active > .content { + display: block; +} +[data-section='tabs'] > section:not(.active), [data-section='tabs'] > .section:not(.active), [data-section='tabs'] > [data-section-region]:not(.active), .section-container.tabs > section:not(.active), .section-container.tabs > .section:not(.active), .section-container.tabs > [data-section-region]:not(.active) { + padding: 0 !important; +} +[data-section='tabs'] > section > [data-section-title], [data-section='tabs'] > section > .title, [data-section='tabs'] > .section > [data-section-title], [data-section='tabs'] > .section > .title, [data-section='tabs'] > [data-section-region] > [data-section-title], [data-section='tabs'] > [data-section-region] > .title, .section-container.tabs > section > [data-section-title], .section-container.tabs > section > .title, .section-container.tabs > .section > [data-section-title], .section-container.tabs > .section > .title, .section-container.tabs > [data-section-region] > [data-section-title], .section-container.tabs > [data-section-region] > .title { + width: auto; + position: absolute; + top: 0; + left: 0; +} + +.section-container.tabs { + border: none; +} +.section-container.tabs > section > .title, .section-container.tabs > .section > .title { + background-color: #efefef; + cursor: pointer; + border: solid 1px #ccc; +} +.section-container.tabs > section > .title a, .section-container.tabs > .section > .title a { + padding: 0.9375em; + color: #333; + font-size: 0.875em; + background: none; +} +.section-container.tabs > section > .title:hover, .section-container.tabs > .section > .title:hover { + background-color: #e2e2e2; +} +.section-container.tabs > section > .content, .section-container.tabs > .section > .content { + padding: 0.9375em; + background-color: #fff; + border: solid 1px #ccc; +} +.section-container.tabs > section > .content > *:last-child, .section-container.tabs > .section > .content > *:last-child { + margin-bottom: 0; +} +.section-container.tabs > section > .content > *:first-child, .section-container.tabs > .section > .content > *:first-child { + padding-top: 0; +} +.section-container.tabs > section > .content > *:last-child:not(.flex-video), .section-container.tabs > .section > .content > *:last-child:not(.flex-video) { + padding-bottom: 0; +} +.section-container.tabs > section.active > .title, .section-container.tabs > .section.active > .title { + background: #fff; +} +.section-container.tabs > section.active > .title a, .section-container.tabs > .section.active > .title a { + color: #333; +} +.section-container.tabs > section:not(.active), .section-container.tabs > .section:not(.active) { + padding: 0 !important; +} +.section-container.tabs > section.active > .title, .section-container.tabs > .section.active > .title { + border-bottom: 0; +} + +@media only screen and (min-width: 768px) { + [data-section=''], [data-section='auto'], .section-container.auto { + width: 100%; + position: relative; + display: block; + margin-bottom: 1.25em; + } + [data-section='']:not([data-section-resized]):not([data-section-small-style]), [data-section='auto']:not([data-section-resized]):not([data-section-small-style]), .section-container.auto:not([data-section-resized]):not([data-section-small-style]) { + visibility: hidden; + } + [data-section=''] > section > [data-section-title], [data-section=''] > section > .title, [data-section=''] > .section > [data-section-title], [data-section=''] > .section > .title, [data-section=''] > [data-section-region] > [data-section-title], [data-section=''] > [data-section-region] > .title, [data-section='auto'] > section > [data-section-title], [data-section='auto'] > section > .title, [data-section='auto'] > .section > [data-section-title], [data-section='auto'] > .section > .title, [data-section='auto'] > [data-section-region] > [data-section-title], [data-section='auto'] > [data-section-region] > .title, .section-container.auto > section > [data-section-title], .section-container.auto > section > .title, .section-container.auto > .section > [data-section-title], .section-container.auto > .section > .title, .section-container.auto > [data-section-region] > [data-section-title], .section-container.auto > [data-section-region] > .title { + margin-bottom: 0; + } + [data-section=''] > section > [data-section-title] a, [data-section=''] > section > .title a, [data-section=''] > .section > [data-section-title] a, [data-section=''] > .section > .title a, [data-section=''] > [data-section-region] > [data-section-title] a, [data-section=''] > [data-section-region] > .title a, [data-section='auto'] > section > [data-section-title] a, [data-section='auto'] > section > .title a, [data-section='auto'] > .section > [data-section-title] a, [data-section='auto'] > .section > .title a, [data-section='auto'] > [data-section-region] > [data-section-title] a, [data-section='auto'] > [data-section-region] > .title a, .section-container.auto > section > [data-section-title] a, .section-container.auto > section > .title a, .section-container.auto > .section > [data-section-title] a, .section-container.auto > .section > .title a, .section-container.auto > [data-section-region] > [data-section-title] a, .section-container.auto > [data-section-region] > .title a { + width: 100%; + display: inline-block; + white-space: nowrap; + } + [data-section=''] > section > [data-section-content], [data-section=''] > section > .content, [data-section=''] > .section > [data-section-content], [data-section=''] > .section > .content, [data-section=''] > [data-section-region] > [data-section-content], [data-section=''] > [data-section-region] > .content, [data-section='auto'] > section > [data-section-content], [data-section='auto'] > section > .content, [data-section='auto'] > .section > [data-section-content], [data-section='auto'] > .section > .content, [data-section='auto'] > [data-section-region] > [data-section-content], [data-section='auto'] > [data-section-region] > .content, .section-container.auto > section > [data-section-content], .section-container.auto > section > .content, .section-container.auto > .section > [data-section-content], .section-container.auto > .section > .content, .section-container.auto > [data-section-region] > [data-section-content], .section-container.auto > [data-section-region] > .content { + display: none; + } + [data-section=''] > section.active > [data-section-content], [data-section=''] > section.active > .content, [data-section=''] > .section.active > [data-section-content], [data-section=''] > .section.active > .content, [data-section=''] > [data-section-region].active > [data-section-content], [data-section=''] > [data-section-region].active > .content, [data-section='auto'] > section.active > [data-section-content], [data-section='auto'] > section.active > .content, [data-section='auto'] > .section.active > [data-section-content], [data-section='auto'] > .section.active > .content, [data-section='auto'] > [data-section-region].active > [data-section-content], [data-section='auto'] > [data-section-region].active > .content, .section-container.auto > section.active > [data-section-content], .section-container.auto > section.active > .content, .section-container.auto > .section.active > [data-section-content], .section-container.auto > .section.active > .content, .section-container.auto > [data-section-region].active > [data-section-content], .section-container.auto > [data-section-region].active > .content { + display: block; + } + [data-section=''] > section:not(.active), [data-section=''] > .section:not(.active), [data-section=''] > [data-section-region]:not(.active), [data-section='auto'] > section:not(.active), [data-section='auto'] > .section:not(.active), [data-section='auto'] > [data-section-region]:not(.active), .section-container.auto > section:not(.active), .section-container.auto > .section:not(.active), .section-container.auto > [data-section-region]:not(.active) { + padding: 0 !important; + } + [data-section=''] > section > [data-section-title], [data-section=''] > section > .title, [data-section=''] > .section > [data-section-title], [data-section=''] > .section > .title, [data-section=''] > [data-section-region] > [data-section-title], [data-section=''] > [data-section-region] > .title, [data-section='auto'] > section > [data-section-title], [data-section='auto'] > section > .title, [data-section='auto'] > .section > [data-section-title], [data-section='auto'] > .section > .title, [data-section='auto'] > [data-section-region] > [data-section-title], [data-section='auto'] > [data-section-region] > .title, .section-container.auto > section > [data-section-title], .section-container.auto > section > .title, .section-container.auto > .section > [data-section-title], .section-container.auto > .section > .title, .section-container.auto > [data-section-region] > [data-section-title], .section-container.auto > [data-section-region] > .title { + width: auto; + position: absolute; + top: 0; + left: 0; + } + + .section-container.auto { + border: none; + } + .section-container.auto > section > .title, .section-container.auto > .section > .title { + background-color: #efefef; + cursor: pointer; + border: solid 1px #ccc; + } + .section-container.auto > section > .title a, .section-container.auto > .section > .title a { + padding: 0.9375em; + color: #333; + font-size: 0.875em; + background: none; + } + .section-container.auto > section > .title:hover, .section-container.auto > .section > .title:hover { + background-color: #e2e2e2; + } + .section-container.auto > section > .content, .section-container.auto > .section > .content { + padding: 0.9375em; + background-color: #fff; + border: solid 1px #ccc; + } + .section-container.auto > section > .content > *:last-child, .section-container.auto > .section > .content > *:last-child { + margin-bottom: 0; + } + .section-container.auto > section > .content > *:first-child, .section-container.auto > .section > .content > *:first-child { + padding-top: 0; + } + .section-container.auto > section > .content > *:last-child:not(.flex-video), .section-container.auto > .section > .content > *:last-child:not(.flex-video) { + padding-bottom: 0; + } + .section-container.auto > section.active > .title, .section-container.auto > .section.active > .title { + background: #fff; + } + .section-container.auto > section.active > .title a, .section-container.auto > .section.active > .title a { + color: #333; + } + .section-container.auto > section:not(.active), .section-container.auto > .section:not(.active) { + padding: 0 !important; + } + .section-container.auto > section.active > .title, .section-container.auto > .section.active > .title { + border-bottom: 0; + } + + [data-section='vertical-tabs'], .section-container.vertical-tabs { + width: 100%; + position: relative; + display: block; + margin-bottom: 1.25em; + } + [data-section='vertical-tabs']:not([data-section-resized]):not([data-section-small-style]), .section-container.vertical-tabs:not([data-section-resized]):not([data-section-small-style]) { + visibility: hidden; + } + [data-section='vertical-tabs'][data-section-small-style], .section-container.vertical-tabs[data-section-small-style] { + width: 100% !important; + } + [data-section='vertical-tabs'][data-section-small-style] > [data-section-region], [data-section='vertical-tabs'][data-section-small-style] > section, [data-section='vertical-tabs'][data-section-small-style] > .section, .section-container.vertical-tabs[data-section-small-style] > [data-section-region], .section-container.vertical-tabs[data-section-small-style] > section, .section-container.vertical-tabs[data-section-small-style] > .section { + padding: 0 !important; + margin: 0 !important; + } + [data-section='vertical-tabs'][data-section-small-style] > [data-section-region] > [data-section-title], [data-section='vertical-tabs'][data-section-small-style] > [data-section-region] > .title, [data-section='vertical-tabs'][data-section-small-style] > section > [data-section-title], [data-section='vertical-tabs'][data-section-small-style] > section > .title, [data-section='vertical-tabs'][data-section-small-style] > .section > [data-section-title], [data-section='vertical-tabs'][data-section-small-style] > .section > .title, .section-container.vertical-tabs[data-section-small-style] > [data-section-region] > [data-section-title], .section-container.vertical-tabs[data-section-small-style] > [data-section-region] > .title, .section-container.vertical-tabs[data-section-small-style] > section > [data-section-title], .section-container.vertical-tabs[data-section-small-style] > section > .title, .section-container.vertical-tabs[data-section-small-style] > .section > [data-section-title], .section-container.vertical-tabs[data-section-small-style] > .section > .title { + width: 100% !important; + } + [data-section='vertical-tabs'] > section > [data-section-title], [data-section='vertical-tabs'] > section > .title, [data-section='vertical-tabs'] > .section > [data-section-title], [data-section='vertical-tabs'] > .section > .title, [data-section='vertical-tabs'] > [data-section-region] > [data-section-title], [data-section='vertical-tabs'] > [data-section-region] > .title, .section-container.vertical-tabs > section > [data-section-title], .section-container.vertical-tabs > section > .title, .section-container.vertical-tabs > .section > [data-section-title], .section-container.vertical-tabs > .section > .title, .section-container.vertical-tabs > [data-section-region] > [data-section-title], .section-container.vertical-tabs > [data-section-region] > .title { + margin-bottom: 0; + } + [data-section='vertical-tabs'] > section > [data-section-title] a, [data-section='vertical-tabs'] > section > .title a, [data-section='vertical-tabs'] > .section > [data-section-title] a, [data-section='vertical-tabs'] > .section > .title a, [data-section='vertical-tabs'] > [data-section-region] > [data-section-title] a, [data-section='vertical-tabs'] > [data-section-region] > .title a, .section-container.vertical-tabs > section > [data-section-title] a, .section-container.vertical-tabs > section > .title a, .section-container.vertical-tabs > .section > [data-section-title] a, .section-container.vertical-tabs > .section > .title a, .section-container.vertical-tabs > [data-section-region] > [data-section-title] a, .section-container.vertical-tabs > [data-section-region] > .title a { + width: 100%; + display: inline-block; + white-space: nowrap; + } + [data-section='vertical-tabs'] > section > [data-section-content], [data-section='vertical-tabs'] > section > .content, [data-section='vertical-tabs'] > .section > [data-section-content], [data-section='vertical-tabs'] > .section > .content, [data-section='vertical-tabs'] > [data-section-region] > [data-section-content], [data-section='vertical-tabs'] > [data-section-region] > .content, .section-container.vertical-tabs > section > [data-section-content], .section-container.vertical-tabs > section > .content, .section-container.vertical-tabs > .section > [data-section-content], .section-container.vertical-tabs > .section > .content, .section-container.vertical-tabs > [data-section-region] > [data-section-content], .section-container.vertical-tabs > [data-section-region] > .content { + display: none; + } + [data-section='vertical-tabs'] > section.active > [data-section-content], [data-section='vertical-tabs'] > section.active > .content, [data-section='vertical-tabs'] > .section.active > [data-section-content], [data-section='vertical-tabs'] > .section.active > .content, [data-section='vertical-tabs'] > [data-section-region].active > [data-section-content], [data-section='vertical-tabs'] > [data-section-region].active > .content, .section-container.vertical-tabs > section.active > [data-section-content], .section-container.vertical-tabs > section.active > .content, .section-container.vertical-tabs > .section.active > [data-section-content], .section-container.vertical-tabs > .section.active > .content, .section-container.vertical-tabs > [data-section-region].active > [data-section-content], .section-container.vertical-tabs > [data-section-region].active > .content { + display: block; + } + [data-section='vertical-tabs'] > section:not(.active), [data-section='vertical-tabs'] > .section:not(.active), [data-section='vertical-tabs'] > [data-section-region]:not(.active), .section-container.vertical-tabs > section:not(.active), .section-container.vertical-tabs > .section:not(.active), .section-container.vertical-tabs > [data-section-region]:not(.active) { + padding: 0 !important; + } + [data-section='vertical-tabs'] > section > [data-section-title], [data-section='vertical-tabs'] > section > .title, [data-section='vertical-tabs'] > .section > [data-section-title], [data-section='vertical-tabs'] > .section > .title, [data-section='vertical-tabs'] > [data-section-region] > [data-section-title], [data-section='vertical-tabs'] > [data-section-region] > .title, .section-container.vertical-tabs > section > [data-section-title], .section-container.vertical-tabs > section > .title, .section-container.vertical-tabs > .section > [data-section-title], .section-container.vertical-tabs > .section > .title, .section-container.vertical-tabs > [data-section-region] > [data-section-title], .section-container.vertical-tabs > [data-section-region] > .title { + position: absolute; + top: 0; + left: 0; + width: 12.5em; + } + [data-section='vertical-tabs'] > section.active, [data-section='vertical-tabs'] > .section.active, [data-section='vertical-tabs'] > [data-section-region].active, .section-container.vertical-tabs > section.active, .section-container.vertical-tabs > .section.active, .section-container.vertical-tabs > [data-section-region].active { + padding-left: 12.5em; + } + [data-section='vertical-tabs'] > section.active > [data-section-title], [data-section='vertical-tabs'] > section.active > .title, [data-section='vertical-tabs'] > .section.active > [data-section-title], [data-section='vertical-tabs'] > .section.active > .title, [data-section='vertical-tabs'] > [data-section-region].active > [data-section-title], [data-section='vertical-tabs'] > [data-section-region].active > .title, .section-container.vertical-tabs > section.active > [data-section-title], .section-container.vertical-tabs > section.active > .title, .section-container.vertical-tabs > .section.active > [data-section-title], .section-container.vertical-tabs > .section.active > .title, .section-container.vertical-tabs > [data-section-region].active > [data-section-title], .section-container.vertical-tabs > [data-section-region].active > .title { + width: 12.5em; + } + + .section-container.vertical-tabs { + border: none; + } + .section-container.vertical-tabs > section > .title, .section-container.vertical-tabs > .section > .title { + background-color: #efefef; + cursor: pointer; + border: solid 1px #ccc; + } + .section-container.vertical-tabs > section > .title a, .section-container.vertical-tabs > .section > .title a { + padding: 0.9375em; + color: #333; + font-size: 0.875em; + background: none; + } + .section-container.vertical-tabs > section > .title:hover, .section-container.vertical-tabs > .section > .title:hover { + background-color: #e2e2e2; + } + .section-container.vertical-tabs > section > .content, .section-container.vertical-tabs > .section > .content { + padding: 0.9375em; + background-color: #fff; + border: solid 1px #ccc; + } + .section-container.vertical-tabs > section > .content > *:last-child, .section-container.vertical-tabs > .section > .content > *:last-child { + margin-bottom: 0; + } + .section-container.vertical-tabs > section > .content > *:first-child, .section-container.vertical-tabs > .section > .content > *:first-child { + padding-top: 0; + } + .section-container.vertical-tabs > section > .content > *:last-child:not(.flex-video), .section-container.vertical-tabs > .section > .content > *:last-child:not(.flex-video) { + padding-bottom: 0; + } + .section-container.vertical-tabs > section.active > .title, .section-container.vertical-tabs > .section.active > .title { + background: #d6d6d6; + } + .section-container.vertical-tabs > section.active > .title a, .section-container.vertical-tabs > .section.active > .title a { + color: #333; + } + .section-container.vertical-tabs > section:not(.active), .section-container.vertical-tabs > .section:not(.active) { + padding: 0 !important; + } + .section-container.vertical-tabs > section.active, .section-container.vertical-tabs > .section.active { + padding-left: 12.4375em; + } + .section-container.vertical-tabs > section.active > .title, .section-container.vertical-tabs > .section.active > .title { + background-color: #d6d6d6; + } + + [data-section='vertical-nav'], .section-container.vertical-nav { + width: 100%; + position: relative; + display: block; + margin-bottom: 1.25em; + } + [data-section='vertical-nav']:not([data-section-resized]):not([data-section-small-style]), .section-container.vertical-nav:not([data-section-resized]):not([data-section-small-style]) { + visibility: hidden; + } + [data-section='vertical-nav'][data-section-small-style], .section-container.vertical-nav[data-section-small-style] { + width: 100% !important; + } + [data-section='vertical-nav'][data-section-small-style] > [data-section-region], [data-section='vertical-nav'][data-section-small-style] > section, [data-section='vertical-nav'][data-section-small-style] > .section, .section-container.vertical-nav[data-section-small-style] > [data-section-region], .section-container.vertical-nav[data-section-small-style] > section, .section-container.vertical-nav[data-section-small-style] > .section { + padding: 0 !important; + margin: 0 !important; + } + [data-section='vertical-nav'][data-section-small-style] > [data-section-region] > [data-section-title], [data-section='vertical-nav'][data-section-small-style] > [data-section-region] > .title, [data-section='vertical-nav'][data-section-small-style] > section > [data-section-title], [data-section='vertical-nav'][data-section-small-style] > section > .title, [data-section='vertical-nav'][data-section-small-style] > .section > [data-section-title], [data-section='vertical-nav'][data-section-small-style] > .section > .title, .section-container.vertical-nav[data-section-small-style] > [data-section-region] > [data-section-title], .section-container.vertical-nav[data-section-small-style] > [data-section-region] > .title, .section-container.vertical-nav[data-section-small-style] > section > [data-section-title], .section-container.vertical-nav[data-section-small-style] > section > .title, .section-container.vertical-nav[data-section-small-style] > .section > [data-section-title], .section-container.vertical-nav[data-section-small-style] > .section > .title { + width: 100% !important; + } + [data-section='vertical-nav'] > section, [data-section='vertical-nav'] > .section, [data-section='vertical-nav'] > [data-section-region], .section-container.vertical-nav > section, .section-container.vertical-nav > .section, .section-container.vertical-nav > [data-section-region] { + position: relative; + display: inline-block; + } + [data-section='vertical-nav'] > section > [data-section-title], [data-section='vertical-nav'] > section > .title, [data-section='vertical-nav'] > .section > [data-section-title], [data-section='vertical-nav'] > .section > .title, [data-section='vertical-nav'] > [data-section-region] > [data-section-title], [data-section='vertical-nav'] > [data-section-region] > .title, .section-container.vertical-nav > section > [data-section-title], .section-container.vertical-nav > section > .title, .section-container.vertical-nav > .section > [data-section-title], .section-container.vertical-nav > .section > .title, .section-container.vertical-nav > [data-section-region] > [data-section-title], .section-container.vertical-nav > [data-section-region] > .title { + margin-bottom: 0; + } + [data-section='vertical-nav'] > section > [data-section-title] a, [data-section='vertical-nav'] > section > .title a, [data-section='vertical-nav'] > .section > [data-section-title] a, [data-section='vertical-nav'] > .section > .title a, [data-section='vertical-nav'] > [data-section-region] > [data-section-title] a, [data-section='vertical-nav'] > [data-section-region] > .title a, .section-container.vertical-nav > section > [data-section-title] a, .section-container.vertical-nav > section > .title a, .section-container.vertical-nav > .section > [data-section-title] a, .section-container.vertical-nav > .section > .title a, .section-container.vertical-nav > [data-section-region] > [data-section-title] a, .section-container.vertical-nav > [data-section-region] > .title a { + width: 100%; + display: inline-block; + white-space: nowrap; + } + [data-section='vertical-nav'] > section > [data-section-content], [data-section='vertical-nav'] > section > .content, [data-section='vertical-nav'] > .section > [data-section-content], [data-section='vertical-nav'] > .section > .content, [data-section='vertical-nav'] > [data-section-region] > [data-section-content], [data-section='vertical-nav'] > [data-section-region] > .content, .section-container.vertical-nav > section > [data-section-content], .section-container.vertical-nav > section > .content, .section-container.vertical-nav > .section > [data-section-content], .section-container.vertical-nav > .section > .content, .section-container.vertical-nav > [data-section-region] > [data-section-content], .section-container.vertical-nav > [data-section-region] > .content { + display: none; + } + [data-section='vertical-nav'] > section.active > [data-section-content], [data-section='vertical-nav'] > section.active > .content, [data-section='vertical-nav'] > .section.active > [data-section-content], [data-section='vertical-nav'] > .section.active > .content, [data-section='vertical-nav'] > [data-section-region].active > [data-section-content], [data-section='vertical-nav'] > [data-section-region].active > .content, .section-container.vertical-nav > section.active > [data-section-content], .section-container.vertical-nav > section.active > .content, .section-container.vertical-nav > .section.active > [data-section-content], .section-container.vertical-nav > .section.active > .content, .section-container.vertical-nav > [data-section-region].active > [data-section-content], .section-container.vertical-nav > [data-section-region].active > .content { + display: block; + } + [data-section='vertical-nav'] > section:not(.active), [data-section='vertical-nav'] > .section:not(.active), [data-section='vertical-nav'] > [data-section-region]:not(.active), .section-container.vertical-nav > section:not(.active), .section-container.vertical-nav > .section:not(.active), .section-container.vertical-nav > [data-section-region]:not(.active) { + padding: 0 !important; + } + [data-section='vertical-nav'] > section > [data-section-title], [data-section='vertical-nav'] > section > .title, [data-section='vertical-nav'] > .section > [data-section-title], [data-section='vertical-nav'] > .section > .title, [data-section='vertical-nav'] > [data-section-region] > [data-section-title], [data-section='vertical-nav'] > [data-section-region] > .title, .section-container.vertical-nav > section > [data-section-title], .section-container.vertical-nav > section > .title, .section-container.vertical-nav > .section > [data-section-title], .section-container.vertical-nav > .section > .title, .section-container.vertical-nav > [data-section-region] > [data-section-title], .section-container.vertical-nav > [data-section-region] > .title { + position: static; + width: auto; + } + [data-section='vertical-nav'] > section > [data-section-title] a, [data-section='vertical-nav'] > section > .title a, [data-section='vertical-nav'] > .section > [data-section-title] a, [data-section='vertical-nav'] > .section > .title a, [data-section='vertical-nav'] > [data-section-region] > [data-section-title] a, [data-section='vertical-nav'] > [data-section-region] > .title a, .section-container.vertical-nav > section > [data-section-title] a, .section-container.vertical-nav > section > .title a, .section-container.vertical-nav > .section > [data-section-title] a, .section-container.vertical-nav > .section > .title a, .section-container.vertical-nav > [data-section-region] > [data-section-title] a, .section-container.vertical-nav > [data-section-region] > .title a { + display: block; + } + [data-section='vertical-nav'] > section > [data-section-content], [data-section='vertical-nav'] > section > .content, [data-section='vertical-nav'] > .section > [data-section-content], [data-section='vertical-nav'] > .section > .content, [data-section='vertical-nav'] > [data-section-region] > [data-section-content], [data-section='vertical-nav'] > [data-section-region] > .content, .section-container.vertical-nav > section > [data-section-content], .section-container.vertical-nav > section > .content, .section-container.vertical-nav > .section > [data-section-content], .section-container.vertical-nav > .section > .content, .section-container.vertical-nav > [data-section-region] > [data-section-content], .section-container.vertical-nav > [data-section-region] > .content { + position: absolute; + top: 0; + left: 0; + z-index: 999; + min-width: 12.5em; + } + + .section-container.vertical-nav { + border: none; + } + .section-container.vertical-nav > section > .title, .section-container.vertical-nav > .section > .title { + background-color: #efefef; + cursor: pointer; + border: solid 1px #ccc; + } + .section-container.vertical-nav > section > .title a, .section-container.vertical-nav > .section > .title a { + padding: 0.9375em; + color: #333; + font-size: 0.875em; + background: none; + } + .section-container.vertical-nav > section > .title:hover, .section-container.vertical-nav > .section > .title:hover { + background-color: #e2e2e2; + } + .section-container.vertical-nav > section > .content, .section-container.vertical-nav > .section > .content { + padding: 0.9375em; + background-color: #fff; + border: solid 1px #ccc; + } + .section-container.vertical-nav > section > .content > *:last-child, .section-container.vertical-nav > .section > .content > *:last-child { + margin-bottom: 0; + } + .section-container.vertical-nav > section > .content > *:first-child, .section-container.vertical-nav > .section > .content > *:first-child { + padding-top: 0; + } + .section-container.vertical-nav > section > .content > *:last-child:not(.flex-video), .section-container.vertical-nav > .section > .content > *:last-child:not(.flex-video) { + padding-bottom: 0; + } + .section-container.vertical-nav > section.active > .title, .section-container.vertical-nav > .section.active > .title { + background: #d6d6d6; + } + .section-container.vertical-nav > section.active > .title a, .section-container.vertical-nav > .section.active > .title a { + color: #333; + } + .section-container.vertical-nav > section:not(.active), .section-container.vertical-nav > .section:not(.active) { + padding: 0 !important; + } + + [data-section='horizontal-nav'], .section-container.horizontal-nav { + width: 100%; + position: relative; + display: block; + margin-bottom: 1.25em; + } + [data-section='horizontal-nav']:not([data-section-resized]):not([data-section-small-style]), .section-container.horizontal-nav:not([data-section-resized]):not([data-section-small-style]) { + visibility: hidden; + } + [data-section='horizontal-nav'][data-section-small-style], .section-container.horizontal-nav[data-section-small-style] { + width: 100% !important; + } + [data-section='horizontal-nav'][data-section-small-style] > [data-section-region], [data-section='horizontal-nav'][data-section-small-style] > section, [data-section='horizontal-nav'][data-section-small-style] > .section, .section-container.horizontal-nav[data-section-small-style] > [data-section-region], .section-container.horizontal-nav[data-section-small-style] > section, .section-container.horizontal-nav[data-section-small-style] > .section { + padding: 0 !important; + margin: 0 !important; + } + [data-section='horizontal-nav'][data-section-small-style] > [data-section-region] > [data-section-title], [data-section='horizontal-nav'][data-section-small-style] > [data-section-region] > .title, [data-section='horizontal-nav'][data-section-small-style] > section > [data-section-title], [data-section='horizontal-nav'][data-section-small-style] > section > .title, [data-section='horizontal-nav'][data-section-small-style] > .section > [data-section-title], [data-section='horizontal-nav'][data-section-small-style] > .section > .title, .section-container.horizontal-nav[data-section-small-style] > [data-section-region] > [data-section-title], .section-container.horizontal-nav[data-section-small-style] > [data-section-region] > .title, .section-container.horizontal-nav[data-section-small-style] > section > [data-section-title], .section-container.horizontal-nav[data-section-small-style] > section > .title, .section-container.horizontal-nav[data-section-small-style] > .section > [data-section-title], .section-container.horizontal-nav[data-section-small-style] > .section > .title { + width: 100% !important; + } + [data-section='horizontal-nav'] > section, [data-section='horizontal-nav'] > .section, [data-section='horizontal-nav'] > [data-section-region], .section-container.horizontal-nav > section, .section-container.horizontal-nav > .section, .section-container.horizontal-nav > [data-section-region] { + position: relative; + float: left; + } + [data-section='horizontal-nav'] > section > [data-section-title], [data-section='horizontal-nav'] > section > .title, [data-section='horizontal-nav'] > .section > [data-section-title], [data-section='horizontal-nav'] > .section > .title, [data-section='horizontal-nav'] > [data-section-region] > [data-section-title], [data-section='horizontal-nav'] > [data-section-region] > .title, .section-container.horizontal-nav > section > [data-section-title], .section-container.horizontal-nav > section > .title, .section-container.horizontal-nav > .section > [data-section-title], .section-container.horizontal-nav > .section > .title, .section-container.horizontal-nav > [data-section-region] > [data-section-title], .section-container.horizontal-nav > [data-section-region] > .title { + margin-bottom: 0; + } + [data-section='horizontal-nav'] > section > [data-section-title] a, [data-section='horizontal-nav'] > section > .title a, [data-section='horizontal-nav'] > .section > [data-section-title] a, [data-section='horizontal-nav'] > .section > .title a, [data-section='horizontal-nav'] > [data-section-region] > [data-section-title] a, [data-section='horizontal-nav'] > [data-section-region] > .title a, .section-container.horizontal-nav > section > [data-section-title] a, .section-container.horizontal-nav > section > .title a, .section-container.horizontal-nav > .section > [data-section-title] a, .section-container.horizontal-nav > .section > .title a, .section-container.horizontal-nav > [data-section-region] > [data-section-title] a, .section-container.horizontal-nav > [data-section-region] > .title a { + width: 100%; + display: inline-block; + white-space: nowrap; + } + [data-section='horizontal-nav'] > section > [data-section-content], [data-section='horizontal-nav'] > section > .content, [data-section='horizontal-nav'] > .section > [data-section-content], [data-section='horizontal-nav'] > .section > .content, [data-section='horizontal-nav'] > [data-section-region] > [data-section-content], [data-section='horizontal-nav'] > [data-section-region] > .content, .section-container.horizontal-nav > section > [data-section-content], .section-container.horizontal-nav > section > .content, .section-container.horizontal-nav > .section > [data-section-content], .section-container.horizontal-nav > .section > .content, .section-container.horizontal-nav > [data-section-region] > [data-section-content], .section-container.horizontal-nav > [data-section-region] > .content { + display: none; + } + [data-section='horizontal-nav'] > section.active > [data-section-content], [data-section='horizontal-nav'] > section.active > .content, [data-section='horizontal-nav'] > .section.active > [data-section-content], [data-section='horizontal-nav'] > .section.active > .content, [data-section='horizontal-nav'] > [data-section-region].active > [data-section-content], [data-section='horizontal-nav'] > [data-section-region].active > .content, .section-container.horizontal-nav > section.active > [data-section-content], .section-container.horizontal-nav > section.active > .content, .section-container.horizontal-nav > .section.active > [data-section-content], .section-container.horizontal-nav > .section.active > .content, .section-container.horizontal-nav > [data-section-region].active > [data-section-content], .section-container.horizontal-nav > [data-section-region].active > .content { + display: block; + } + [data-section='horizontal-nav'] > section:not(.active), [data-section='horizontal-nav'] > .section:not(.active), [data-section='horizontal-nav'] > [data-section-region]:not(.active), .section-container.horizontal-nav > section:not(.active), .section-container.horizontal-nav > .section:not(.active), .section-container.horizontal-nav > [data-section-region]:not(.active) { + padding: 0 !important; + } + [data-section='horizontal-nav'] > section > [data-section-title], [data-section='horizontal-nav'] > section > .title, [data-section='horizontal-nav'] > .section > [data-section-title], [data-section='horizontal-nav'] > .section > .title, [data-section='horizontal-nav'] > [data-section-region] > [data-section-title], [data-section='horizontal-nav'] > [data-section-region] > .title, .section-container.horizontal-nav > section > [data-section-title], .section-container.horizontal-nav > section > .title, .section-container.horizontal-nav > .section > [data-section-title], .section-container.horizontal-nav > .section > .title, .section-container.horizontal-nav > [data-section-region] > [data-section-title], .section-container.horizontal-nav > [data-section-region] > .title { + position: static; + width: auto; + } + [data-section='horizontal-nav'] > section > [data-section-title] a, [data-section='horizontal-nav'] > section > .title a, [data-section='horizontal-nav'] > .section > [data-section-title] a, [data-section='horizontal-nav'] > .section > .title a, [data-section='horizontal-nav'] > [data-section-region] > [data-section-title] a, [data-section='horizontal-nav'] > [data-section-region] > .title a, .section-container.horizontal-nav > section > [data-section-title] a, .section-container.horizontal-nav > section > .title a, .section-container.horizontal-nav > .section > [data-section-title] a, .section-container.horizontal-nav > .section > .title a, .section-container.horizontal-nav > [data-section-region] > [data-section-title] a, .section-container.horizontal-nav > [data-section-region] > .title a { + display: block; + } + [data-section='horizontal-nav'] > section > [data-section-content], [data-section='horizontal-nav'] > section > .content, [data-section='horizontal-nav'] > .section > [data-section-content], [data-section='horizontal-nav'] > .section > .content, [data-section='horizontal-nav'] > [data-section-region] > [data-section-content], [data-section='horizontal-nav'] > [data-section-region] > .content, .section-container.horizontal-nav > section > [data-section-content], .section-container.horizontal-nav > section > .content, .section-container.horizontal-nav > .section > [data-section-content], .section-container.horizontal-nav > .section > .content, .section-container.horizontal-nav > [data-section-region] > [data-section-content], .section-container.horizontal-nav > [data-section-region] > .content { + width: auto; + position: absolute; + top: 0; + left: 0; + z-index: 999; + min-width: 12.5em; + } + + .section-container.horizontal-nav { + background: #efefef; + border: 1px solid #ccc; + } + .section-container.horizontal-nav > section > .title, .section-container.horizontal-nav > .section > .title { + background-color: #efefef; + cursor: pointer; + border: solid 1px #ccc; + } + .section-container.horizontal-nav > section > .title a, .section-container.horizontal-nav > .section > .title a { + padding: 0.9375em; + color: #333; + font-size: 0.875em; + background: none; + } + .section-container.horizontal-nav > section > .title:hover, .section-container.horizontal-nav > .section > .title:hover { + background-color: #e2e2e2; + } + .section-container.horizontal-nav > section > .content, .section-container.horizontal-nav > .section > .content { + padding: 0.9375em; + background-color: #fff; + border: solid 1px #ccc; + } + .section-container.horizontal-nav > section > .content > *:last-child, .section-container.horizontal-nav > .section > .content > *:last-child { + margin-bottom: 0; + } + .section-container.horizontal-nav > section > .content > *:first-child, .section-container.horizontal-nav > .section > .content > *:first-child { + padding-top: 0; + } + .section-container.horizontal-nav > section > .content > *:last-child:not(.flex-video), .section-container.horizontal-nav > .section > .content > *:last-child:not(.flex-video) { + padding-bottom: 0; + } + .section-container.horizontal-nav > section.active > .title, .section-container.horizontal-nav > .section.active > .title { + background: #d6d6d6; + } + .section-container.horizontal-nav > section.active > .title a, .section-container.horizontal-nav > .section.active > .title a { + color: #333; + } + .section-container.horizontal-nav > section:not(.active), .section-container.horizontal-nav > .section:not(.active) { + padding: 0 !important; + } +} +.no-js [data-section], .no-js .section-container { + width: 100%; + position: relative; + display: block; + margin-bottom: 1.25em; +} +.no-js [data-section][data-section-small-style], .no-js .section-container[data-section-small-style] { + width: 100% !important; +} +.no-js [data-section][data-section-small-style] > [data-section-region], .no-js [data-section][data-section-small-style] > section, .no-js [data-section][data-section-small-style] > .section, .no-js .section-container[data-section-small-style] > [data-section-region], .no-js .section-container[data-section-small-style] > section, .no-js .section-container[data-section-small-style] > .section { + padding: 0 !important; + margin: 0 !important; +} +.no-js [data-section][data-section-small-style] > [data-section-region] > [data-section-title], .no-js [data-section][data-section-small-style] > [data-section-region] > .title, .no-js [data-section][data-section-small-style] > section > [data-section-title], .no-js [data-section][data-section-small-style] > section > .title, .no-js [data-section][data-section-small-style] > .section > [data-section-title], .no-js [data-section][data-section-small-style] > .section > .title, .no-js .section-container[data-section-small-style] > [data-section-region] > [data-section-title], .no-js .section-container[data-section-small-style] > [data-section-region] > .title, .no-js .section-container[data-section-small-style] > section > [data-section-title], .no-js .section-container[data-section-small-style] > section > .title, .no-js .section-container[data-section-small-style] > .section > [data-section-title], .no-js .section-container[data-section-small-style] > .section > .title { + width: 100% !important; +} +.no-js [data-section] > section, .no-js [data-section] > .section, .no-js [data-section] > [data-section-region], .no-js .section-container > section, .no-js .section-container > .section, .no-js .section-container > [data-section-region] { + margin: 0; +} +.no-js [data-section] > section > [data-section-title], .no-js [data-section] > section > .title, .no-js [data-section] > .section > [data-section-title], .no-js [data-section] > .section > .title, .no-js [data-section] > [data-section-region] > [data-section-title], .no-js [data-section] > [data-section-region] > .title, .no-js .section-container > section > [data-section-title], .no-js .section-container > section > .title, .no-js .section-container > .section > [data-section-title], .no-js .section-container > .section > .title, .no-js .section-container > [data-section-region] > [data-section-title], .no-js .section-container > [data-section-region] > .title { + margin-bottom: 0; +} +.no-js [data-section] > section > [data-section-title] a, .no-js [data-section] > section > .title a, .no-js [data-section] > .section > [data-section-title] a, .no-js [data-section] > .section > .title a, .no-js [data-section] > [data-section-region] > [data-section-title] a, .no-js [data-section] > [data-section-region] > .title a, .no-js .section-container > section > [data-section-title] a, .no-js .section-container > section > .title a, .no-js .section-container > .section > [data-section-title] a, .no-js .section-container > .section > .title a, .no-js .section-container > [data-section-region] > [data-section-title] a, .no-js .section-container > [data-section-region] > .title a { + width: 100%; + display: inline-block; + white-space: nowrap; +} +.no-js [data-section] > section > [data-section-content], .no-js [data-section] > section > .content, .no-js [data-section] > .section > [data-section-content], .no-js [data-section] > .section > .content, .no-js [data-section] > [data-section-region] > [data-section-content], .no-js [data-section] > [data-section-region] > .content, .no-js .section-container > section > [data-section-content], .no-js .section-container > section > .content, .no-js .section-container > .section > [data-section-content], .no-js .section-container > .section > .content, .no-js .section-container > [data-section-region] > [data-section-content], .no-js .section-container > [data-section-region] > .content { + display: none; +} +.no-js [data-section] > section.active > [data-section-content], .no-js [data-section] > section.active > .content, .no-js [data-section] > .section.active > [data-section-content], .no-js [data-section] > .section.active > .content, .no-js [data-section] > [data-section-region].active > [data-section-content], .no-js [data-section] > [data-section-region].active > .content, .no-js .section-container > section.active > [data-section-content], .no-js .section-container > section.active > .content, .no-js .section-container > .section.active > [data-section-content], .no-js .section-container > .section.active > .content, .no-js .section-container > [data-section-region].active > [data-section-content], .no-js .section-container > [data-section-region].active > .content { + display: block; +} +.no-js [data-section] > section:not(.active), .no-js [data-section] > .section:not(.active), .no-js [data-section] > [data-section-region]:not(.active), .no-js .section-container > section:not(.active), .no-js .section-container > .section:not(.active), .no-js .section-container > [data-section-region]:not(.active) { + padding: 0 !important; +} +.no-js [data-section] > section > [data-section-title], .no-js [data-section] > section > .title, .no-js [data-section] > .section > [data-section-title], .no-js [data-section] > .section > .title, .no-js [data-section] > [data-section-region] > [data-section-title], .no-js [data-section] > [data-section-region] > .title, .no-js .section-container > section > [data-section-title], .no-js .section-container > section > .title, .no-js .section-container > .section > [data-section-title], .no-js .section-container > .section > .title, .no-js .section-container > [data-section-region] > [data-section-title], .no-js .section-container > [data-section-region] > .title { + width: 100%; +} +.no-js .section-container { + border-top: 1px solid #ccc; +} +.no-js .section-container > section > .title, .no-js .section-container > .section > .title { + background-color: #efefef; + cursor: pointer; + border: solid 1px #ccc; +} +.no-js .section-container > section > .title a, .no-js .section-container > .section > .title a { + padding: 0.9375em; + color: #333; + font-size: 0.875em; + background: none; +} +.no-js .section-container > section > .title:hover, .no-js .section-container > .section > .title:hover { + background-color: #e2e2e2; +} +.no-js .section-container > section > .content, .no-js .section-container > .section > .content { + padding: 0.9375em; + background-color: #fff; + border: solid 1px #ccc; +} +.no-js .section-container > section > .content > *:last-child, .no-js .section-container > .section > .content > *:last-child { + margin-bottom: 0; +} +.no-js .section-container > section > .content > *:first-child, .no-js .section-container > .section > .content > *:first-child { + padding-top: 0; +} +.no-js .section-container > section > .content > *:last-child:not(.flex-video), .no-js .section-container > .section > .content > *:last-child:not(.flex-video) { + padding-bottom: 0; +} +.no-js .section-container > section.active > .title, .no-js .section-container > .section.active > .title { + background: #d6d6d6; +} +.no-js .section-container > section.active > .title a, .no-js .section-container > .section.active > .title a { + color: #333; +} +.no-js .section-container > section:not(.active), .no-js .section-container > .section:not(.active) { + padding: 0 !important; +} +.no-js .section-container > section > .title, .no-js .section-container > .section > .title { + border-top: none; +} + +/* Wrapped around .top-bar to contain to grid width */ +.contain-to-grid { + width: 100%; + background: #111; +} +.contain-to-grid .top-bar { + margin-bottom: 0; +} + +.fixed { + width: 100%; + left: 0; + position: fixed; + top: 0; + z-index: 99; +} +.fixed.expanded:not(.top-bar) { + overflow-y: auto; + height: auto; + width: 100%; + max-height: 100%; +} +.fixed.expanded:not(.top-bar) .title-area { + position: fixed; + width: 100%; + z-index: 99; +} +.fixed.expanded:not(.top-bar) .top-bar-section { + z-index: 98; + margin-top: 45px; +} + +.top-bar { + overflow: hidden; + height: 45px; + line-height: 45px; + position: relative; + background: #111; + margin-bottom: 0; +} +.top-bar ul { + margin-bottom: 0; + list-style: none; +} +.top-bar .row { + max-width: none; +} +.top-bar form, +.top-bar input { + margin-bottom: 0; +} +.top-bar input { + height: 2.45em; +} +.top-bar .button { + padding-top: .5em; + padding-bottom: .5em; + margin-bottom: 0; +} +.top-bar .title-area { + position: relative; + margin: 0; +} +.top-bar .name { + height: 45px; + margin: 0; + font-size: 16px; +} +.top-bar .name h1 { + line-height: 45px; + font-size: 1.0625em; + margin: 0; +} +.top-bar .name h1 a { + font-weight: bold; + color: #fff; + width: 50%; + display: block; + padding: 0 15px; +} +.top-bar .toggle-topbar { + position: absolute; + right: 0; + top: 0; +} +.top-bar .toggle-topbar a { + color: #fff; + text-transform: uppercase; + font-size: 0.8125em; + font-weight: bold; + position: relative; + display: block; + padding: 0 15px; + height: 45px; + line-height: 45px; +} +.top-bar .toggle-topbar.menu-icon { + right: 15px; + top: 50%; + margin-top: -16px; + padding-left: 40px; +} +.top-bar .toggle-topbar.menu-icon a { + text-indent: -48px; + width: 34px; + height: 34px; + line-height: 33px; + padding: 0; + color: #fff; +} +.top-bar .toggle-topbar.menu-icon a span { + position: absolute; + right: 0; + display: block; + width: 16px; + height: 0; + -webkit-box-shadow: 0 10px 0 1px #fff, 0 16px 0 1px #fff, 0 22px 0 1px #fff; + box-shadow: 0 10px 0 1px #fff, 0 16px 0 1px #fff, 0 22px 0 1px #fff; +} +.top-bar.expanded { + height: auto; + background: transparent; +} +.top-bar.expanded .title-area { + background: #111; +} +.top-bar.expanded .toggle-topbar a { + color: #888; +} +.top-bar.expanded .toggle-topbar a span { + -webkit-box-shadow: 0 10px 0 1px #888, 0 16px 0 1px #888, 0 22px 0 1px #888; + box-shadow: 0 10px 0 1px #888, 0 16px 0 1px #888, 0 22px 0 1px #888; +} + +.top-bar-section { + left: 0; + position: relative; + width: auto; + -webkit-transition: left 300ms ease-out; + -moz-transition: left 300ms ease-out; + transition: left 300ms ease-out; +} +.top-bar-section ul { + width: 100%; + height: auto; + display: block; + background: #222; + font-size: 16px; + margin: 0; +} +.top-bar-section .divider, +.top-bar-section [role="separator"] { + border-bottom: solid 1px #2b2b2b; + border-top: solid 1px black; + clear: both; + height: 1px; + width: 100%; +} +.top-bar-section ul li > a { + display: block; + width: 100%; + color: #fff; + padding: 12px 0 12px 0; + padding-left: 15px; + font-size: 0.8125em; + font-weight: bold; + background: #222; +} +.top-bar-section ul li > a.button { + background: #2ba6cb; + font-size: 0.8125em; + padding-right: 15px; + padding-left: 15px; +} +.top-bar-section ul li > a.button:hover { + background: #2284a1; +} +.top-bar-section ul li > a.button.secondary { + background: #e9e9e9; +} +.top-bar-section ul li > a.button.secondary:hover { + background: #d0d0d0; +} +.top-bar-section ul li > a.button.success { + background: #5da423; +} +.top-bar-section ul li > a.button.success:hover { + background: #457a1a; +} +.top-bar-section ul li > a.button.alert { + background: #c60f13; +} +.top-bar-section ul li > a.button.alert:hover { + background: #970b0e; +} +.top-bar-section ul li:hover > a { + background: black; + color: #fff; +} +.top-bar-section ul li.active > a { + background: #090909; + color: #fff; +} +.top-bar-section .has-form { + padding: 15px; +} +.top-bar-section .has-dropdown { + position: relative; +} +.top-bar-section .has-dropdown > a:after { + content: ""; + display: block; + width: 0; + height: 0; + border: inset 5px; + border-color: transparent transparent transparent rgba(255, 255, 255, 0.5); + border-left-style: solid; + margin-right: 15px; + margin-top: -4.5px; + position: absolute; + top: 50%; + right: 0; +} +.top-bar-section .has-dropdown.moved { + position: static; +} +.top-bar-section .has-dropdown.moved > .dropdown { + display: block; +} +.top-bar-section .dropdown { + position: absolute; + left: 100%; + top: 0; + display: none; + z-index: 99; +} +.top-bar-section .dropdown li { + width: 100%; + height: auto; +} +.top-bar-section .dropdown li a { + font-weight: normal; + padding: 8px 15px; +} +.top-bar-section .dropdown li a.parent-link { + font-weight: bold; +} +.top-bar-section .dropdown li.title h5 { + margin-bottom: 0; +} +.top-bar-section .dropdown li.title h5 a { + color: #fff; + line-height: 22.5px; + display: block; +} +.top-bar-section .dropdown label { + padding: 8px 15px 2px; + margin-bottom: 0; + text-transform: uppercase; + color: #555; + font-weight: bold; + font-size: 0.625em; +} + +.top-bar-js-breakpoint { + width: 940px !important; + visibility: hidden; +} + +.js-generated { + display: block; +} + +@media only screen and (min-width: 940px) { + .top-bar { + background: #111; + *zoom: 1; + overflow: visible; + } + .top-bar:before, .top-bar:after { + content: " "; + display: table; + } + .top-bar:after { + clear: both; + } + .top-bar .toggle-topbar { + display: none; + } + .top-bar .title-area { + float: left; + } + .top-bar .name h1 a { + width: auto; + } + .top-bar input, + .top-bar .button { + line-height: 2em; + font-size: 0.875em; + height: 2em; + padding: 0 10px; + position: relative; + top: 8px; + } + .top-bar.expanded { + background: #111; + } + + .contain-to-grid .top-bar { + max-width: 62.5em; + margin: 0 auto; + margin-bottom: 0; + } + + .top-bar-section { + -webkit-transition: none 0 0; + -moz-transition: none 0 0; + transition: none 0 0; + left: 0 !important; + } + .top-bar-section ul { + width: auto; + height: auto !important; + display: inline; + } + .top-bar-section ul li { + float: left; + } + .top-bar-section ul li .js-generated { + display: none; + } + .top-bar-section li.hover > a:not(.button) { + background: black; + color: #fff; + } + .top-bar-section li a:not(.button) { + padding: 0 15px; + line-height: 45px; + background: #111; + } + .top-bar-section li a:not(.button):hover { + background: black; + } + .top-bar-section .has-dropdown > a { + padding-right: 35px !important; + } + .top-bar-section .has-dropdown > a:after { + content: ""; + display: block; + width: 0; + height: 0; + border: inset 5px; + border-color: rgba(255, 255, 255, 0.5) transparent transparent transparent; + border-top-style: solid; + margin-top: -2.5px; + top: 22.5px; + } + .top-bar-section .has-dropdown.moved { + position: relative; + } + .top-bar-section .has-dropdown.moved > .dropdown { + display: none; + } + .top-bar-section .has-dropdown.hover > .dropdown, .top-bar-section .has-dropdown.not-click:hover > .dropdown { + display: block; + } + .top-bar-section .has-dropdown .dropdown li.has-dropdown > a:after { + border: none; + content: "\00bb"; + top: 1em; + margin-top: -7px; + right: 5px; + } + .top-bar-section .dropdown { + left: 0; + top: auto; + background: transparent; + min-width: 100%; + } + .top-bar-section .dropdown li a { + color: #fff; + line-height: 1; + white-space: nowrap; + padding: 7px 15px; + background: #1e1e1e; + } + .top-bar-section .dropdown li label { + white-space: nowrap; + background: #1e1e1e; + } + .top-bar-section .dropdown li .dropdown { + left: 100%; + top: 0; + } + .top-bar-section > ul > .divider, .top-bar-section > ul > [role="separator"] { + border-bottom: none; + border-top: none; + border-right: solid 1px #2b2b2b; + border-left: solid 1px black; + clear: none; + height: 45px; + width: 0; + } + .top-bar-section .has-form { + background: #111; + padding: 0 15px; + height: 45px; + } + .top-bar-section ul.right li .dropdown { + left: auto; + right: 0; + } + .top-bar-section ul.right li .dropdown li .dropdown { + right: 100%; + } + + .no-js .top-bar-section ul li:hover > a { + background: black; + color: #fff; + } + .no-js .top-bar-section ul li:active > a { + background: #090909; + color: #fff; + } + .no-js .top-bar-section .has-dropdown:hover > .dropdown { + display: block; + } +} +@-webkit-keyframes rotate { + from { + -webkit-transform: rotate(0deg); + } + to { + -webkit-transform: rotate(360deg); + } +} +@-moz-keyframes rotate { + from { + -moz-transform: rotate(0deg); + } + to { + -moz-transform: rotate(360deg); + } +} +@-o-keyframes rotate { + from { + -o-transform: rotate(0deg); + } + to { + -o-transform: rotate(360deg); + } +} +@keyframes rotate { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} +/* Orbit Graceful Loading */ +.slideshow-wrapper { + position: relative; +} +.slideshow-wrapper ul { + list-style-type: none; + margin: 0; +} +.slideshow-wrapper ul li, +.slideshow-wrapper ul li .orbit-caption { + display: none; +} +.slideshow-wrapper ul li:first-child { + display: block; +} +.slideshow-wrapper .orbit-container { + background-color: transparent; +} +.slideshow-wrapper .orbit-container li { + display: block; +} +.slideshow-wrapper .orbit-container li .orbit-caption { + display: block; +} + +.preloader { + display: block; + width: 40px; + height: 40px; + position: absolute; + top: 50%; + left: 50%; + margin-top: -20px; + margin-left: -20px; + border: solid 3px; + border-color: #555 #fff; + -webkit-border-radius: 1000px; + border-radius: 1000px; + -webkit-animation-name: rotate; + -webkit-animation-duration: 1.5s; + -webkit-animation-iteration-count: infinite; + -webkit-animation-timing-function: linear; + -moz-animation-name: rotate; + -moz-animation-duration: 1.5s; + -moz-animation-iteration-count: infinite; + -moz-animation-timing-function: linear; + -o-animation-name: rotate; + -o-animation-duration: 1.5s; + -o-animation-iteration-count: infinite; + -o-animation-timing-function: linear; + animation-name: rotate; + animation-duration: 1.5s; + animation-iteration-count: infinite; + animation-timing-function: linear; +} + +.orbit-container { + overflow: hidden; + width: 100%; + position: relative; + background: #f5f5f5; +} +.orbit-container .orbit-slides-container { + list-style: none; + margin: 0; + padding: 0; + position: relative; +} +.orbit-container .orbit-slides-container img { + display: block; + max-width: 100%; +} +.orbit-container .orbit-slides-container > * { + position: absolute; + top: 0; + width: 100%; + margin-left: 100%; +} +.orbit-container .orbit-slides-container > *:first-child { + margin-left: 0%; +} +.orbit-container .orbit-slides-container > * .orbit-caption { + position: absolute; + bottom: 0; + background-color: rgba(0, 0, 0, 0.6); + color: #fff; + width: 100%; + padding: 10px 14px; + font-size: 0.875em; +} +.orbit-container .orbit-slide-number { + position: absolute; + top: 10px; + left: 10px; + font-size: 12px; + color: #fff; + background: transparent; + z-index: 10; +} +.orbit-container .orbit-slide-number span { + font-weight: 700; + padding: 0.3125em; +} +.orbit-container .orbit-timer { + position: absolute; + top: 10px; + right: 10px; + height: 6px; + width: 100px; + z-index: 10; +} +.orbit-container .orbit-timer .orbit-progress { + height: 100%; + background-color: rgba(0, 0, 0, 0.6); + display: block; + width: 0%; +} +.orbit-container .orbit-timer > span { + display: none; + position: absolute; + top: 10px; + right: 0; + width: 11px; + height: 14px; + border: solid 4px #000; + border-top: none; + border-bottom: none; +} +.orbit-container .orbit-timer.paused > span { + right: -6px; + top: 9px; + width: 11px; + height: 14px; + border: inset 8px; + border-right-style: solid; + border-color: transparent transparent transparent #000; +} +.orbit-container:hover .orbit-timer > span { + display: block; +} +.orbit-container .orbit-prev, +.orbit-container .orbit-next { + position: absolute; + top: 50%; + margin-top: -25px; + background-color: rgba(0, 0, 0, 0.6); + width: 50px; + height: 60px; + line-height: 50px; + color: white; + text-indent: -9999px !important; + z-index: 10; +} +.orbit-container .orbit-prev:hover, +.orbit-container .orbit-next:hover { + background-color: rgba(0, 0, 0, 0.6); +} +.orbit-container .orbit-prev > span, +.orbit-container .orbit-next > span { + position: absolute; + top: 50%; + margin-top: -16px; + display: block; + width: 0; + height: 0; + border: inset 16px; +} +.orbit-container .orbit-prev { + left: 0; +} +.orbit-container .orbit-prev > span { + border-right-style: solid; + border-color: transparent; + border-right-color: #fff; +} +.orbit-container .orbit-prev:hover > span { + border-right-color: #ccc; +} +.orbit-container .orbit-next { + right: 0; +} +.orbit-container .orbit-next > span { + border-color: transparent; + border-left-style: solid; + border-left-color: #fff; + left: 50%; + margin-left: -8px; +} +.orbit-container .orbit-next:hover > span { + border-left-color: #ccc; +} + +.orbit-bullets { + margin: 0 auto 30px auto; + overflow: hidden; + position: relative; + top: 10px; +} +.orbit-bullets li { + display: block; + width: 0.75em; + height: 0.75em; + background: #999; + float: left; + margin-right: 6px; + border: solid 1px #555; + -webkit-border-radius: 1000px; + border-radius: 1000px; +} +.orbit-bullets li.active { + background: #555; +} +.orbit-bullets li:last-child { + margin-right: 0; +} + +.touch .orbit-container .orbit-prev, +.touch .orbit-container .orbit-next { + display: none; +} +.touch .orbit-bullets { + display: none; +} + +@media only screen and (min-width: 768px) { + .touch .orbit-container .orbit-prev, + .touch .orbit-container .orbit-next { + display: inherit; + } + .touch .orbit-bullets { + display: block; + } +} +@media only screen and (max-width: 768px) { + .orbit-stack-on-small .orbit-slides-container { + height: auto !important; + } + .orbit-stack-on-small .orbit-slides-container > * { + position: relative; + margin-left: 0% !important; + } + .orbit-stack-on-small .orbit-timer, + .orbit-stack-on-small .orbit-next, + .orbit-stack-on-small .orbit-prev, + .orbit-stack-on-small .orbit-bullets { + display: none; + } +} +.reveal-modal-bg { + position: fixed; + height: 100%; + width: 100%; + background: #000; + background: rgba(0, 0, 0, 0.45); + z-index: 98; + display: none; + top: 0; + left: 0; +} + +.reveal-modal { + visibility: hidden; + display: none; + position: absolute; + left: 50%; + z-index: 99; + height: auto; + margin-left: -40%; + width: 80%; + background-color: #fff; + padding: 1.25em; + border: solid 1px #666; + -webkit-box-shadow: 0 0 10px rgba(0, 0, 0, 0.4); + box-shadow: 0 0 10px rgba(0, 0, 0, 0.4); + top: 50px; +} +.reveal-modal .column, +.reveal-modal .columns { + min-width: 0; +} +.reveal-modal > :first-child { + margin-top: 0; +} +.reveal-modal > :last-child { + margin-bottom: 0; +} +.reveal-modal .close-reveal-modal { + font-size: 1.375em; + line-height: 1; + position: absolute; + top: 0.5em; + right: 0.6875em; + color: #aaa; + font-weight: bold; + cursor: pointer; +} + +@media only screen and (min-width: 768px) { + .reveal-modal { + padding: 1.875em; + top: 6.25em; + } + .reveal-modal.tiny { + margin-left: -15%; + width: 30%; + } + .reveal-modal.small { + margin-left: -20%; + width: 40%; + } + .reveal-modal.medium { + margin-left: -30%; + width: 60%; + } + .reveal-modal.large { + margin-left: -35%; + width: 70%; + } + .reveal-modal.xlarge { + margin-left: -47.5%; + width: 95%; + } +} +@media print { + .reveal-modal { + background: #fff !important; + } +} +/* Foundation Joyride */ +.joyride-list { + display: none; +} + +/* Default styles for the container */ +.joyride-tip-guide { + display: none; + position: absolute; + background: black; + color: #fff; + z-index: 101; + top: 0; + left: 2.5%; + font-family: inherit; + font-weight: normal; + width: 95%; +} + +.lt-ie9 .joyride-tip-guide { + max-width: 800px; + left: 50%; + margin-left: -400px; +} + +.joyride-content-wrapper { + width: 100%; + padding: 1.125em 1.25em 1.5em; +} +.joyride-content-wrapper .button { + margin-bottom: 0 !important; +} + +/* Add a little css triangle pip, older browser just miss out on the fanciness of it */ +.joyride-tip-guide .joyride-nub { + display: block; + position: absolute; + left: 22px; + width: 0; + height: 0; + border: inset 14px; +} +.joyride-tip-guide .joyride-nub.top { + border-top-style: solid; + border-color: black; + border-top-color: transparent !important; + border-left-color: transparent !important; + border-right-color: transparent !important; + top: -28px; +} +.joyride-tip-guide .joyride-nub.bottom { + border-bottom-style: solid; + border-color: black !important; + border-bottom-color: transparent !important; + border-left-color: transparent !important; + border-right-color: transparent !important; + bottom: -28px; +} +.joyride-tip-guide .joyride-nub.right { + right: -28px; +} +.joyride-tip-guide .joyride-nub.left { + left: -28px; +} + +/* Typography */ +.joyride-tip-guide h1, +.joyride-tip-guide h2, +.joyride-tip-guide h3, +.joyride-tip-guide h4, +.joyride-tip-guide h5, +.joyride-tip-guide h6 { + line-height: 1.25; + margin: 0; + font-weight: bold; + color: #fff; +} + +.joyride-tip-guide p { + margin: 0 0 1.125em 0; + font-size: 0.875em; + line-height: 1.3; +} + +.joyride-timer-indicator-wrap { + width: 50px; + height: 3px; + border: solid 1px #555; + position: absolute; + right: 1.0625em; + bottom: 1em; +} + +.joyride-timer-indicator { + display: block; + width: 0; + height: inherit; + background: #666; +} + +.joyride-close-tip { + position: absolute; + right: 12px; + top: 10px; + color: #777 !important; + text-decoration: none; + font-size: 30px; + font-weight: normal; + line-height: .5 !important; +} +.joyride-close-tip:hover, .joyride-close-tip:focus { + color: #eee !important; +} + +.joyride-modal-bg { + position: fixed; + height: 100%; + width: 100%; + background: transparent; + background: rgba(0, 0, 0, 0.5); + z-index: 100; + display: none; + top: 0; + left: 0; + cursor: pointer; +} + +.joyride-expose-wrapper { + background-color: #ffffff; + position: absolute; + border-radius: 3px; + z-index: 102; + -moz-box-shadow: 0 0 30px #ffffff; + -webkit-box-shadow: 0 0 15px #ffffff; + box-shadow: 0 0 15px #ffffff; +} + +.joyride-expose-cover { + background: transparent; + border-radius: 3px; + position: absolute; + z-index: 9999; + top: 0; + left: 0; +} + +/* Styles for screens that are atleast 768px; */ +@media only screen and (min-width: 768px) { + .joyride-tip-guide { + width: 300px; + left: inherit; + } + .joyride-tip-guide .joyride-nub.bottom { + border-color: black !important; + border-bottom-color: transparent !important; + border-left-color: transparent !important; + border-right-color: transparent !important; + bottom: -28px; + } + .joyride-tip-guide .joyride-nub.right { + border-color: black !important; + border-top-color: transparent !important; + border-right-color: transparent !important; + border-bottom-color: transparent !important; + top: 22px; + left: auto; + right: -28px; + } + .joyride-tip-guide .joyride-nub.left { + border-color: black !important; + border-top-color: transparent !important; + border-left-color: transparent !important; + border-bottom-color: transparent !important; + top: 22px; + left: -28px; + right: auto; + } +} +/* Clearing Styles */ +[data-clearing] { + *zoom: 1; + margin-bottom: 0; + margin-left: 0; + list-style: none; +} +[data-clearing]:before, [data-clearing]:after { + content: " "; + display: table; +} +[data-clearing]:after { + clear: both; +} +[data-clearing] li { + float: left; + margin-right: 10px; +} + +.clearing-blackout { + background: #111; + position: fixed; + width: 100%; + height: 100%; + top: 0; + left: 0; + z-index: 998; +} +.clearing-blackout .clearing-close { + display: block; +} + +.clearing-container { + position: relative; + z-index: 998; + height: 100%; + overflow: hidden; + margin: 0; +} + +.visible-img { + height: 95%; + position: relative; +} +.visible-img img { + position: absolute; + left: 50%; + top: 50%; + margin-left: -50%; + max-height: 100%; + max-width: 100%; +} + +.clearing-caption { + color: #fff; + line-height: 1.3; + margin-bottom: 0; + text-align: center; + bottom: 0; + background: #111; + width: 100%; + padding: 10px 30px; + position: absolute; + left: 0; +} + +.clearing-close { + z-index: 999; + padding-left: 20px; + padding-top: 10px; + font-size: 40px; + line-height: 1; + color: #fff; + display: none; +} +.clearing-close:hover, .clearing-close:focus { + color: #ccc; +} + +.clearing-assembled .clearing-container { + height: 100%; +} +.clearing-assembled .clearing-container .carousel > ul { + display: none; +} + +.clearing-feature li { + display: none; +} +.clearing-feature li.clearing-featured-img { + display: block; +} + +@media only screen and (min-width: 768px) { + .clearing-main-prev, + .clearing-main-next { + position: absolute; + height: 100%; + width: 40px; + top: 0; + } + .clearing-main-prev > span, + .clearing-main-next > span { + position: absolute; + top: 50%; + display: block; + width: 0; + height: 0; + border: solid 16px; + } + + .clearing-main-prev { + left: 0; + } + .clearing-main-prev > span { + left: 5px; + border-color: transparent; + border-right-color: #fff; + } + + .clearing-main-next { + right: 0; + } + .clearing-main-next > span { + border-color: transparent; + border-left-color: #fff; + } + + .clearing-main-prev.disabled, + .clearing-main-next.disabled { + opacity: 0.5; + } + + .clearing-assembled .clearing-container .carousel { + background: #111; + height: 150px; + margin-top: 5px; + } + .clearing-assembled .clearing-container .carousel > ul { + display: block; + z-index: 999; + width: 200%; + height: 100%; + margin-left: 0; + position: relative; + left: 0; + } + .clearing-assembled .clearing-container .carousel > ul li { + display: block; + width: 175px; + height: inherit; + padding: 0; + float: left; + overflow: hidden; + margin-right: 1px; + position: relative; + cursor: pointer; + opacity: 0.4; + } + .clearing-assembled .clearing-container .carousel > ul li.fix-height img { + min-height: 100%; + height: 100%; + max-width: none; + } + .clearing-assembled .clearing-container .carousel > ul li a.th { + border: none; + -webkit-box-shadow: none; + box-shadow: none; + display: block; + } + .clearing-assembled .clearing-container .carousel > ul li img { + cursor: pointer !important; + min-width: 100% !important; + } + .clearing-assembled .clearing-container .carousel > ul li.visible { + opacity: 1; + } + .clearing-assembled .clearing-container .visible-img { + background: #111; + overflow: hidden; + height: 75%; + } + + .clearing-close { + position: absolute; + top: 10px; + right: 20px; + padding-left: 0; + padding-top: 0; + } +} +/* Foundation Alerts */ +.alert-box { + border-style: solid; + border-width: 1px; + display: block; + font-weight: bold; + margin-bottom: 1.25em; + position: relative; + padding: 0.6875em 1.3125em 0.75em 0.6875em; + font-size: 0.875em; + background-color: #2ba6cb; + border-color: #2284a1; + color: #fff; +} +.alert-box .close { + font-size: 1.375em; + padding: 5px 4px 4px; + line-height: 0; + position: absolute; + top: 0.4375em; + right: 0.3125em; + color: #333; + opacity: 0.3; +} +.alert-box .close:hover, .alert-box .close:focus { + opacity: 0.5; +} +.alert-box.radius { + -webkit-border-radius: 3px; + border-radius: 3px; +} +.alert-box.round { + -webkit-border-radius: 1000px; + border-radius: 1000px; +} +.alert-box.success { + background-color: #5da423; + border-color: #457a1a; + color: #fff; +} +.alert-box.alert { + background-color: #c60f13; + border-color: #970b0e; + color: #fff; +} +.alert-box.secondary { + background-color: #e9e9e9; + border-color: #d0d0d0; + color: #505050; +} + +/* Breadcrumbs */ +.breadcrumbs { + display: block; + padding: 0.5625em 0.875em 0.5625em; + overflow: hidden; + margin-left: 0; + list-style: none; + border-style: solid; + border-width: 1px; + background-color: #f6f6f6; + border-color: gainsboro; + -webkit-border-radius: 3px; + border-radius: 3px; +} +.breadcrumbs > * { + margin: 0; + float: left; + font-size: 0.6875em; + text-transform: uppercase; +} +.breadcrumbs > *:hover a, .breadcrumbs > *:focus a { + text-decoration: underline; +} +.breadcrumbs > * a, +.breadcrumbs > * span { + text-transform: uppercase; + color: #2ba6cb; +} +.breadcrumbs > *.current { + cursor: default; + color: #333; +} +.breadcrumbs > *.current a { + cursor: default; + color: #333; +} +.breadcrumbs > *.current:hover, .breadcrumbs > *.current:hover a, .breadcrumbs > *.current:focus, .breadcrumbs > *.current:focus a { + text-decoration: none; +} +.breadcrumbs > *.unavailable { + color: #999; +} +.breadcrumbs > *.unavailable a { + color: #999; +} +.breadcrumbs > *.unavailable:hover, .breadcrumbs > *.unavailable:hover a, .breadcrumbs > *.unavailable:focus, +.breadcrumbs > *.unavailable a:focus { + text-decoration: none; + color: #999; + cursor: default; +} +.breadcrumbs > *:before { + content: "/"; + color: #aaa; + margin: 0 0.75em; + position: relative; + top: 1px; +} +.breadcrumbs > *:first-child:before { + content: " "; + margin: 0; +} + +/* Custom Checkbox and Radio Inputs */ +form.custom .hidden-field { + margin-left: -99999px; + position: absolute; + visibility: hidden; +} +form.custom .custom { + display: inline-block; + width: 16px; + height: 16px; + position: relative; + top: -1px; + /* fix centering issue */ + vertical-align: middle; + border: solid 1px #ccc; + background: #fff; +} +form.custom .custom.checkbox { + -webkit-border-radius: 0; + border-radius: 0; + padding: 0; +} +form.custom .custom.radio { + -webkit-border-radius: 1000px; + border-radius: 1000px; + padding: 3px; +} +form.custom .custom.checkbox:before { + content: ""; + display: block; + font-size: 16px; + color: #fff; +} +form.custom .custom.radio.checked:before { + content: ""; + display: block; + width: 8px; + height: 8px; + -webkit-border-radius: 1000px; + border-radius: 1000px; + background: #222; + position: relative; +} +form.custom .custom.checkbox.checked:before { + content: "\00d7"; + color: #222; + position: absolute; + top: -50%; + left: 50%; + margin-top: 4px; + margin-left: -5px; +} + +/* Custom Select Options and Dropdowns */ +form.custom { + /* Custom input, disabled */ +} +form.custom .custom.dropdown { + display: block; + position: relative; + top: 0; + height: 2.3125em; + margin-bottom: 1.25em; + margin-top: 0; + padding: 0; + width: 100%; + background: #fff; + background: -moz-linear-gradient(top, #fff 0%, #f3f3f3 100%); + background: -webkit-linear-gradient(top, #fff 0%, #f3f3f3 100%); + -webkit-box-shadow: none; + background: linear-gradient(to bottom, #fff 0%, #f3f3f3 100%); + box-shadow: none; + font-size: 0.875em; + vertical-align: top; +} +form.custom .custom.dropdown ul { + overflow-y: auto; + max-height: 200px; +} +form.custom .custom.dropdown .current { + cursor: default; + white-space: nowrap; + line-height: 2.25em; + color: rgba(0, 0, 0, 0.75); + text-decoration: none; + overflow: hidden; + display: block; + margin-left: 0.5em; + margin-right: 2.3125em; +} +form.custom .custom.dropdown .selector { + cursor: default; + position: absolute; + width: 2.5em; + height: 2.3125em; + display: block; + right: 0; + top: 0; +} +form.custom .custom.dropdown .selector:after { + content: ""; + display: block; + content: ""; + display: block; + width: 0; + height: 0; + border: inset 5px; + border-color: #aaa transparent transparent transparent; + border-top-style: solid; + position: absolute; + left: 0.9375em; + top: 50%; + margin-top: -3px; +} +form.custom .custom.dropdown:hover a.selector:after, form.custom .custom.dropdown.open a.selector:after { + content: ""; + display: block; + width: 0; + height: 0; + border: inset 5px; + border-color: #222 transparent transparent transparent; + border-top-style: solid; +} +form.custom .custom.dropdown .disabled { + color: #888; +} +form.custom .custom.dropdown .disabled:hover { + background: transparent; + color: #888; +} +form.custom .custom.dropdown .disabled:hover:after { + display: none; +} +form.custom .custom.dropdown.open ul { + display: block; + z-index: 10; + min-width: 100%; + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + box-sizing: content-box; +} +form.custom .custom.dropdown.small { + max-width: 134px; +} +form.custom .custom.dropdown.medium { + max-width: 254px; +} +form.custom .custom.dropdown.large { + max-width: 434px; +} +form.custom .custom.dropdown.expand { + width: 100% !important; +} +form.custom .custom.dropdown.open.small ul { + min-width: 134px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +form.custom .custom.dropdown.open.medium ul { + min-width: 254px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +form.custom .custom.dropdown.open.large ul { + min-width: 434px; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +form.custom .error .custom.dropdown { + border-color: #c60f13; + background-color: rgba(198, 15, 19, 0.1); + background: rgba(198, 15, 19, 0.1); + margin-bottom: 0; +} +form.custom .error .custom.dropdown:focus { + background: #fafafa; + border-color: #999999; +} +form.custom .error .custom.dropdown + small.error { + margin-top: 0; +} +form.custom .custom.dropdown ul { + position: absolute; + width: auto; + display: none; + margin: 0; + left: -1px; + top: auto; + -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.1); + margin: 0; + padding: 0; + background: #fff; + border: solid 1px #cccccc; + font-size: 16px; +} +form.custom .custom.dropdown ul li { + color: #555; + font-size: 0.875em; + cursor: default; + padding-top: 0.25em; + padding-bottom: 0.25em; + padding-left: 0.375em; + padding-right: 2.375em; + min-height: 1.5em; + line-height: 1.5em; + margin: 0; + white-space: nowrap; + list-style: none; +} +form.custom .custom.dropdown ul li.selected { + background: #eeeeee; + color: #000; +} +form.custom .custom.dropdown ul li:hover { + background-color: #e4e4e4; + color: #000; +} +form.custom .custom.dropdown ul li.selected:hover { + background: #eeeeee; + cursor: default; + color: #000; +} +form.custom .custom.dropdown ul.show { + display: block; +} +form.custom .custom.disabled { + background: #ddd; +} + +/* Keystroke Characters */ +.keystroke, +kbd { + background-color: #ededed; + border-color: #dbdbdb; + color: #222; + border-style: solid; + border-width: 1px; + margin: 0; + font-family: "Consolas", "Menlo", "Courier", monospace; + font-size: 0.875em; + padding: 0.125em 0.25em 0; + -webkit-border-radius: 3px; + border-radius: 3px; +} + +/* Labels */ +.label { + font-weight: bold; + text-align: center; + text-decoration: none; + line-height: 1; + white-space: nowrap; + display: inline-block; + position: relative; + padding: 0.1875em 0.625em 0.25em; + font-size: 0.875em; + background-color: #2ba6cb; + color: #fff; +} +.label.radius { + -webkit-border-radius: 3px; + border-radius: 3px; +} +.label.round { + -webkit-border-radius: 1000px; + border-radius: 1000px; +} +.label.alert { + background-color: #c60f13; + color: #fff; +} +.label.success { + background-color: #5da423; + color: #fff; +} +.label.secondary { + background-color: #e9e9e9; + color: #333; +} + +/* Inline Lists */ +.inline-list { + margin: 0 auto 1.0625em auto; + margin-left: -1.375em; + margin-right: 0; + padding: 0; + list-style: none; + overflow: hidden; +} +.inline-list > li { + list-style: none; + float: left; + margin-left: 1.375em; + display: block; +} +.inline-list > li > * { + display: block; +} + +/* Default Pagination */ +ul.pagination { + display: block; + height: 1.5em; + margin-left: -0.3125em; +} +ul.pagination li { + height: 1.5em; + color: #222; + font-size: 0.875em; + margin-left: 0.3125em; +} +ul.pagination li a { + display: block; + padding: 0.0625em 0.4375em 0.0625em; + color: #999; +} +ul.pagination li:hover a, +ul.pagination li a:focus { + background: #e6e6e6; +} +ul.pagination li.unavailable a { + cursor: default; + color: #999; +} +ul.pagination li.unavailable:hover a, ul.pagination li.unavailable a:focus { + background: transparent; +} +ul.pagination li.current a { + background: #2ba6cb; + color: #fff; + font-weight: bold; + cursor: default; +} +ul.pagination li.current a:hover, ul.pagination li.current a:focus { + background: #2ba6cb; +} +ul.pagination li { + float: left; + display: block; +} + +/* Pagination centred wrapper */ +.pagination-centered { + text-align: center; +} +.pagination-centered ul.pagination li { + float: none; + display: inline-block; +} + +/* Panels */ +.panel { + border-style: solid; + border-width: 1px; + border-color: #d9d9d9; + margin-bottom: 1.25em; + padding: 1.25em; + background: #f2f2f2; +} +.panel > :first-child { + margin-top: 0; +} +.panel > :last-child { + margin-bottom: 0; +} +.panel h1, .panel h2, .panel h3, .panel h4, .panel h5, .panel h6, .panel p { + color: #333; +} +.panel h1, .panel h2, .panel h3, .panel h4, .panel h5, .panel h6 { + line-height: 1; + margin-bottom: 0.625em; +} +.panel h1.subheader, .panel h2.subheader, .panel h3.subheader, .panel h4.subheader, .panel h5.subheader, .panel h6.subheader { + line-height: 1.4; +} +.panel.callout { + border-style: solid; + border-width: 1px; + border-color: #2284a1; + margin-bottom: 1.25em; + padding: 1.25em; + background: #2ba6cb; + -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5) inset; + box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5) inset; +} +.panel.callout > :first-child { + margin-top: 0; +} +.panel.callout > :last-child { + margin-bottom: 0; +} +.panel.callout h1, .panel.callout h2, .panel.callout h3, .panel.callout h4, .panel.callout h5, .panel.callout h6, .panel.callout p { + color: #fff; +} +.panel.callout h1, .panel.callout h2, .panel.callout h3, .panel.callout h4, .panel.callout h5, .panel.callout h6 { + line-height: 1; + margin-bottom: 0.625em; +} +.panel.callout h1.subheader, .panel.callout h2.subheader, .panel.callout h3.subheader, .panel.callout h4.subheader, .panel.callout h5.subheader, .panel.callout h6.subheader { + line-height: 1.4; +} +.panel.callout a { + color: #fff; +} +.panel.radius { + -webkit-border-radius: 3px; + border-radius: 3px; +} + +/* Pricing Tables */ +.pricing-table { + border: solid 1px #ddd; + margin-left: 0; + margin-bottom: 1.25em; +} +.pricing-table * { + list-style: none; + line-height: 1; +} +.pricing-table .title { + background-color: #ddd; + padding: 0.9375em 1.25em; + text-align: center; + color: #333; + font-weight: bold; + font-size: 1em; +} +.pricing-table .price { + background-color: #eee; + padding: 0.9375em 1.25em; + text-align: center; + color: #333; + font-weight: normal; + font-size: 1.25em; +} +.pricing-table .description { + background-color: #fff; + padding: 0.9375em; + text-align: center; + color: #777; + font-size: 0.75em; + font-weight: normal; + line-height: 1.4; + border-bottom: dotted 1px #ddd; +} +.pricing-table .bullet-item { + background-color: #fff; + padding: 0.9375em; + text-align: center; + color: #333; + font-size: 0.875em; + font-weight: normal; + border-bottom: dotted 1px #ddd; +} +.pricing-table .cta-button { + background-color: #f5f5f5; + text-align: center; + padding: 1.25em 1.25em 0; +} + +/* Progress Bar */ +.progress { + background-color: transparent; + height: 1.5625em; + border: 1px solid #cccccc; + padding: 0.125em; + margin-bottom: 0.625em; +} +.progress .meter { + background: #2ba6cb; + height: 100%; + display: block; +} +.progress.secondary .meter { + background: #e9e9e9; + height: 100%; + display: block; +} +.progress.success .meter { + background: #5da423; + height: 100%; + display: block; +} +.progress.alert .meter { + background: #c60f13; + height: 100%; + display: block; +} +.progress.radius { + -webkit-border-radius: 3px; + border-radius: 3px; +} +.progress.radius .meter { + -webkit-border-radius: 2px; + border-radius: 2px; +} +.progress.round { + -webkit-border-radius: 1000px; + border-radius: 1000px; +} +.progress.round .meter { + -webkit-border-radius: 999px; + border-radius: 999px; +} + +/* Side Nav */ +.side-nav { + display: block; + margin: 0; + padding: 0.875em 0; + list-style-type: none; + list-style-position: inside; +} +.side-nav li { + margin: 0 0 0.4375em 0; + font-size: 0.875em; +} +.side-nav li a { + display: block; + color: #2ba6cb; +} +.side-nav li.active > a:first-child { + color: #4d4d4d; + font-weight: bold; +} +.side-nav li.divider { + border-top: 1px solid; + height: 0; + padding: 0; + list-style: none; + border-top-color: #e6e6e6; +} + +/* Side Nav */ +.sub-nav { + display: block; + width: auto; + overflow: hidden; + margin: -0.25em 0 1.125em; + padding-top: 0.25em; + margin-right: 0; + margin-left: -0.5625em; +} +.sub-nav dt, +.sub-nav dd, +.sub-nav li { + float: left; + display: inline; + margin-left: 0.5625em; + margin-bottom: 0.625em; + font-weight: normal; + font-size: 0.875em; +} +.sub-nav dt a, +.sub-nav dd a, +.sub-nav li a { + color: #999; + text-decoration: none; +} +.sub-nav dt.active a, +.sub-nav dd.active a, +.sub-nav li.active a { + -webkit-border-radius: 1000px; + border-radius: 1000px; + font-weight: bold; + background: #2ba6cb; + padding: 0.1875em 0.5625em; + cursor: default; + color: #fff; +} + +/* Foundation Switches */ +@media only screen { + div.switch { + position: relative; + padding: 0; + display: block; + overflow: hidden; + border-style: solid; + border-width: 1px; + margin-bottom: 1.25em; + height: 2.25em; + background: #fff; + border-color: #cccccc; + } + div.switch label { + position: relative; + left: 0; + z-index: 2; + float: left; + width: 50%; + height: 100%; + margin: 0; + font-weight: bold; + text-align: left; + -webkit-transition: all 0.1s ease-out; + -moz-transition: all 0.1s ease-out; + transition: all 0.1s ease-out; + } + div.switch input { + position: absolute; + z-index: 3; + opacity: 0; + width: 100%; + height: 100%; + -moz-appearance: none; + } + div.switch input:hover, div.switch input:focus { + cursor: pointer; + } + div.switch span:last-child { + position: absolute; + top: -1px; + left: -1px; + z-index: 1; + display: block; + padding: 0; + border-width: 1px; + border-style: solid; + -webkit-transition: all 0.1s ease-out; + -moz-transition: all 0.1s ease-out; + transition: all 0.1s ease-out; + } + div.switch input:not(:checked) + label { + opacity: 0; + } + div.switch input:checked { + display: none !important; + } + div.switch input { + left: 0; + display: block !important; + } + div.switch input:first-of-type + label, + div.switch input:first-of-type + span + label { + left: -50%; + } + div.switch input:first-of-type:checked + label, + div.switch input:first-of-type:checked + span + label { + left: 0%; + } + div.switch input:last-of-type + label, + div.switch input:last-of-type + span + label { + right: -50%; + left: auto; + text-align: right; + } + div.switch input:last-of-type:checked + label, + div.switch input:last-of-type:checked + span + label { + right: 0%; + left: auto; + } + div.switch span.custom { + display: none !important; + } +} +@media only screen and (-webkit-min-device-pixel-ratio: 0) and (max-device-width: 480px) { + div.switch { + -webkit-animation: webkitSiblingBugfix infinite 1s; + } +} +@media only screen and (-webkit-min-device-pixel-ratio: 1.5) { + div.switch { + -webkit-animation: none 0; + } +} +@media only screen { + form.custom div.switch .hidden-field { + margin-left: auto; + position: absolute; + visibility: visible; + } + div.switch label { + padding: 0; + line-height: 2.3em; + font-size: 0.875em; + } + div.switch input:first-of-type:checked ~ span:last-child { + left: 100%; + margin-left: -2.1875em; + } + div.switch span:last-child { + width: 2.25em; + height: 2.25em; + } + div.switch span:last-child { + border-color: #b3b3b3; + background: #fff; + background: -moz-linear-gradient(top, #fff 0%, #f2f2f2 100%); + background: -webkit-linear-gradient(top, #fff 0%, #f2f2f2 100%); + background: linear-gradient(to bottom, #fff 0%, #f2f2f2 100%); + -webkit-box-shadow: 2px 0 10px 0 rgba(0, 0, 0, 0.07), 1000px 0 0 1000px #e1f5d1, -2px 0 10px 0 rgba(0, 0, 0, 0.07), -1000px 0 0 1000px #f5f5f5; + box-shadow: 2px 0 10px 0 rgba(0, 0, 0, 0.07), 1000px 0 0 980px #e1f5d1, -2px 0 10px 0 rgba(0, 0, 0, 0.07), -1000px 0 0 1000px #f5f5f5; + } + div.switch:hover span:last-child, div.switch:focus span:last-child { + background: #fff; + background: -moz-linear-gradient(top, #fff 0%, #e6e6e6 100%); + background: -webkit-linear-gradient(top, #fff 0%, #e6e6e6 100%); + background: linear-gradient(to bottom, #fff 0%, #e6e6e6 100%); + } + div.switch:active { + background: transparent; + } + div.switch.large { + height: 2.75em; + } + div.switch.large label { + padding: 0; + line-height: 2.3em; + font-size: 1.0625em; + } + div.switch.large input:first-of-type:checked ~ span:last-child { + left: 100%; + margin-left: -2.6875em; + } + div.switch.large span:last-child { + width: 2.75em; + height: 2.75em; + } + div.switch.small { + height: 1.75em; + } + div.switch.small label { + padding: 0; + line-height: 2.1em; + font-size: 0.75em; + } + div.switch.small input:first-of-type:checked ~ span:last-child { + left: 100%; + margin-left: -1.6875em; + } + div.switch.small span:last-child { + width: 1.75em; + height: 1.75em; + } + div.switch.tiny { + height: 1.375em; + } + div.switch.tiny label { + padding: 0; + line-height: 1.9em; + font-size: 0.6875em; + } + div.switch.tiny input:first-of-type:checked ~ span:last-child { + left: 100%; + margin-left: -1.3125em; + } + div.switch.tiny span:last-child { + width: 1.375em; + height: 1.375em; + } + div.switch.radius { + -webkit-border-radius: 4px; + border-radius: 4px; + } + div.switch.radius span:last-child { + -webkit-border-radius: 3px; + border-radius: 3px; + } + div.switch.round { + -webkit-border-radius: 1000px; + border-radius: 1000px; + } + div.switch.round span:last-child { + -webkit-border-radius: 999px; + border-radius: 999px; + } + div.switch.round label { + padding: 0 0.5625em; + } + + @-webkit-keyframes webkitSiblingBugfix { + from { + position: relative; + } + to { + position: relative; + } + } +} +[data-magellan-expedition] { + background: #fff; + z-index: 50; + min-width: 100%; + padding: 10px; +} +[data-magellan-expedition] .sub-nav { + margin-bottom: 0; +} +[data-magellan-expedition] .sub-nav dd { + margin-bottom: 0; +} + +/* Tables */ +table { + background: #fff; + margin-bottom: 1.25em; + border: solid 1px #ddd; +} +table thead, +table tfoot { + background: #f5f5f5; + font-weight: bold; +} +table thead tr th, +table thead tr td, +table tfoot tr th, +table tfoot tr td { + padding: 0.5em 0.625em 0.625em; + font-size: 0.875em; + color: #222; + text-align: left; +} +table tr th, +table tr td { + padding: 0.5625em 0.625em; + font-size: 0.875em; + color: #222; +} +table tr.even, table tr.alt, table tr:nth-of-type(even) { + background: #f9f9f9; +} +table thead tr th, +table tfoot tr th, +table tbody tr td, +table tr td, +table tfoot tr td { + display: table-cell; + line-height: 1.125em; +} + +/* Image Thumbnails */ +.th { + line-height: 0; + display: inline-block; + border: solid 4px #fff; + -webkit-box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.2); + box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.2); + -webkit-transition: all 200ms ease-out; + -moz-transition: all 200ms ease-out; + transition: all 200ms ease-out; +} +.th:hover, .th:focus { + -webkit-box-shadow: 0 0 6px 1px rgba(43, 166, 203, 0.5); + box-shadow: 0 0 6px 1px rgba(43, 166, 203, 0.5); +} +.th.radius { + -webkit-border-radius: 3px; + border-radius: 3px; +} + +a.th { + display: inline-block; + max-width: 100%; +} + +/* Tooltips */ +.has-tip { + border-bottom: dotted 1px #ccc; + cursor: help; + font-weight: bold; + color: #333; +} +.has-tip:hover, .has-tip:focus { + border-bottom: dotted 1px #196177; + color: #2ba6cb; +} +.has-tip.tip-left, .has-tip.tip-right { + float: none !important; +} + +.tooltip { + display: none; + position: absolute; + z-index: 999; + font-weight: bold; + font-size: 0.9375em; + line-height: 1.3; + padding: 0.5em; + max-width: 85%; + left: 50%; + width: 100%; + color: #fff; + background: #000; + -webkit-border-radius: 3px; + border-radius: 3px; +} +.tooltip > .nub { + display: block; + left: 5px; + position: absolute; + width: 0; + height: 0; + border: solid 5px; + border-color: transparent transparent #000 transparent; + top: -10px; +} +.tooltip.opened { + color: #2ba6cb !important; + border-bottom: dotted 1px #196177 !important; +} + +.tap-to-close { + display: block; + font-size: 0.625em; + color: #888; + font-weight: normal; +} + +@media only screen and (min-width: 768px) { + .tooltip > .nub { + border-color: transparent transparent #000 transparent; + top: -10px; + } + .tooltip.tip-top > .nub { + border-color: #000 transparent transparent transparent; + top: auto; + bottom: -10px; + } + .tooltip.tip-left, .tooltip.tip-right { + float: none !important; + } + .tooltip.tip-left > .nub { + border-color: transparent transparent transparent #000; + right: -10px; + left: auto; + top: 50%; + margin-top: -5px; + } + .tooltip.tip-right > .nub { + border-color: transparent #000 transparent transparent; + right: auto; + left: -10px; + top: 50%; + margin-top: -5px; + } +} +@media only screen and (max-width: 767px) { + .f-dropdown { + max-width: 100%; + left: 0; + } +} +/* Foundation Dropdowns */ +.f-dropdown { + position: absolute; + top: -9999px; + list-style: none; + margin-left: 0; + width: 100%; + max-height: none; + height: auto; + background: #fff; + border: solid 1px #cccccc; + font-size: 16px; + z-index: 99; + margin-top: 2px; + max-width: 200px; +} +.f-dropdown > *:first-child { + margin-top: 0; +} +.f-dropdown > *:last-child { + margin-bottom: 0; +} +.f-dropdown:before { + content: ""; + display: block; + width: 0; + height: 0; + border: inset 6px; + border-color: transparent transparent #fff transparent; + border-bottom-style: solid; + position: absolute; + top: -12px; + left: 10px; + z-index: 99; +} +.f-dropdown:after { + content: ""; + display: block; + width: 0; + height: 0; + border: inset 7px; + border-color: transparent transparent #cccccc transparent; + border-bottom-style: solid; + position: absolute; + top: -14px; + left: 9px; + z-index: 98; +} +.f-dropdown.right:before { + left: auto; + right: 10px; +} +.f-dropdown.right:after { + left: auto; + right: 9px; +} +.f-dropdown li { + font-size: 0.875em; + cursor: pointer; + line-height: 1.125em; + margin: 0; +} +.f-dropdown li:hover, .f-dropdown li:focus { + background: #eeeeee; +} +.f-dropdown li a { + display: block; + padding: 0.5em; + color: #555; +} +.f-dropdown.content { + position: absolute; + top: -9999px; + list-style: none; + margin-left: 0; + padding: 1.25em; + width: 100%; + height: auto; + max-height: none; + background: #fff; + border: solid 1px #cccccc; + font-size: 16px; + z-index: 99; + max-width: 200px; +} +.f-dropdown.content > *:first-child { + margin-top: 0; +} +.f-dropdown.content > *:last-child { + margin-bottom: 0; +} +.f-dropdown.tiny { + max-width: 200px; +} +.f-dropdown.small { + max-width: 300px; +} +.f-dropdown.medium { + max-width: 500px; +} +.f-dropdown.large { + max-width: 800px; +} + +/*# sourceMappingURL=foundation.css.map */ diff --git a/docroot/sites/all/themes/libraryzurb_teen/css/foundation/foundation.css.map b/docroot/sites/all/themes/libraryzurb_teen/css/foundation/foundation.css.map new file mode 100644 index 00000000..551e572b --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/css/foundation/foundation.css.map @@ -0,0 +1,7 @@ +{ +"version": 3, +"mappings": "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", +"sources": ["../../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_global.scss","../../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/_variables.scss","../../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_grid.scss","../../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_visibility.scss","../../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_block-grid.scss","../../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_type.scss","../../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_buttons.scss","../../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_forms.scss","../../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_button-groups.scss","../../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_dropdown-buttons.scss","../../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_split-buttons.scss","../../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_flex-video.scss","../../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_section.scss","../../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_top-bar.scss","../../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_orbit.scss","../../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_reveal.scss","../../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_joyride.scss","../../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_clearing.scss","../../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_alert-boxes.scss","../../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_breadcrumbs.scss","../../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_custom-forms.scss","../../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_keystrokes.scss","../../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_labels.scss","../../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_inline-lists.scss","../../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_pagination.scss","../../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_panels.scss","../../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_pricing-tables.scss","../../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_progress-bars.scss","../../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_side-nav.scss","../../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_sub-nav.scss","../../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_switch.scss","../../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_magellan.scss","../../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_tables.scss","../../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_thumbs.scss","../../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_tooltips.scss","../../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/foundation/components/_dropdown.scss"], +"names": [], +"file": "foundation.css" +} \ No newline at end of file diff --git a/docroot/sites/all/themes/libraryzurb_teen/css/foundation/normalize.css b/docroot/sites/all/themes/libraryzurb_teen/css/foundation/normalize.css new file mode 100644 index 00000000..53433220 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/css/foundation/normalize.css @@ -0,0 +1,383 @@ +/*! normalize.css v2.1.2 | MIT License | git.io/normalize */ +/* ========================================================================== + HTML5 display definitions + ========================================================================== */ +/** + * Correct `block` display not defined in IE 8/9. + */ +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section, +summary { + display: block; +} + +/** + * Correct `inline-block` display not defined in IE 8/9. + */ +audio, +canvas, +video { + display: inline-block; +} + +/** + * Prevent modern browsers from displaying `audio` without controls. + * Remove excess height in iOS 5 devices. + */ +audio:not([controls]) { + display: none; + height: 0; +} + +/** + * Address `[hidden]` styling not present in IE 8/9. + * Hide the `template` element in IE, Safari, and Firefox < 22. + */ +[hidden], +template { + display: none; +} + +script { + display: none !important; +} + +/* ========================================================================== + Base + ========================================================================== */ +/** + * 1. Set default font family to sans-serif. + * 2. Prevent iOS text size adjust after orientation change, without disabling + * user zoom. + */ +html { + font-family: sans-serif; + /* 1 */ + -ms-text-size-adjust: 100%; + /* 2 */ + -webkit-text-size-adjust: 100%; + /* 2 */ +} + +/** + * Remove default margin. + */ +body { + margin: 0; +} + +/* ========================================================================== + Links + ========================================================================== */ +/** + * Remove the gray background color from active links in IE 10. + */ +a { + background: transparent; +} + +/** + * Address `outline` inconsistency between Chrome and other browsers. + */ +a:focus { + outline: thin dotted; +} + +/** + * Improve readability when focused and also mouse hovered in all browsers. + */ +a:active, +a:hover { + outline: 0; +} + +/* ========================================================================== + Typography + ========================================================================== */ +/** + * Address variable `h1` font-size and margin within `section` and `article` + * contexts in Firefox 4+, Safari 5, and Chrome. + */ +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/** + * Address styling not present in IE 8/9, Safari 5, and Chrome. + */ +abbr[title] { + border-bottom: 1px dotted; +} + +/** + * Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. + */ +b, +strong { + font-weight: bold; +} + +/** + * Address styling not present in Safari 5 and Chrome. + */ +dfn { + font-style: italic; +} + +/** + * Address differences between Firefox and other browsers. + */ +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} + +/** + * Address styling not present in IE 8/9. + */ +mark { + background: #ff0; + color: #000; +} + +/** + * Correct font family set oddly in Safari 5 and Chrome. + */ +code, +kbd, +pre, +samp { + font-family: monospace, serif; + font-size: 1em; +} + +/** + * Improve readability of pre-formatted text in all browsers. + */ +pre { + white-space: pre-wrap; +} + +/** + * Set consistent quote types. + */ +q { + quotes: "\201C" "\201D" "\2018" "\2019"; +} + +/** + * Address inconsistent and variable font size in all browsers. + */ +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` affecting `line-height` in all browsers. + */ +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +/* ========================================================================== + Embedded content + ========================================================================== */ +/** + * Remove border when inside `a` element in IE 8/9. + */ +img { + border: 0; +} + +/** + * Correct overflow displayed oddly in IE 9. + */ +svg:not(:root) { + overflow: hidden; +} + +/* ========================================================================== + Figures + ========================================================================== */ +/** + * Address margin not present in IE 8/9 and Safari 5. + */ +figure { + margin: 0; +} + +/* ========================================================================== + Forms + ========================================================================== */ +/** + * Define consistent border, margin, and padding. + */ +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +/** + * 1. Correct `color` not being inherited in IE 8/9. + * 2. Remove padding so people aren't caught out if they zero out fieldsets. + */ +legend { + border: 0; + /* 1 */ + padding: 0; + /* 2 */ +} + +/** + * 1. Correct font family not being inherited in all browsers. + * 2. Correct font size not being inherited in all browsers. + * 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. + */ +button, +input, +select, +textarea { + font-family: inherit; + /* 1 */ + font-size: 100%; + /* 2 */ + margin: 0; + /* 3 */ +} + +/** + * Address Firefox 4+ setting `line-height` on `input` using `!important` in + * the UA stylesheet. + */ +button, +input { + line-height: normal; +} + +/** + * Address inconsistent `text-transform` inheritance for `button` and `select`. + * All other form control elements do not inherit `text-transform` values. + * Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. + * Correct `select` style inheritance in Firefox 4+ and Opera. + */ +button, +select { + text-transform: none; +} + +/** + * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` + * and `video` controls. + * 2. Correct inability to style clickable `input` types in iOS. + * 3. Improve usability and consistency of cursor style between image-type + * `input` and others. + */ +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + /* 2 */ + cursor: pointer; + /* 3 */ +} + +/** + * Re-set default cursor for disabled elements. + */ +button[disabled], +html input[disabled] { + cursor: default; +} + +/** + * 1. Address box sizing set to `content-box` in IE 8/9. + * 2. Remove excess padding in IE 8/9. + */ +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + /* 1 */ + padding: 0; + /* 2 */ +} + +/** + * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. + * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome + * (include `-moz` to future-proof). + */ +input[type="search"] { + -webkit-appearance: textfield; + /* 1 */ + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + /* 2 */ + box-sizing: content-box; +} + +/** + * Remove inner padding and search cancel button in Safari 5 and Chrome + * on OS X. + */ +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * Remove inner padding and border in Firefox 4+. + */ +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/** + * 1. Remove default vertical scrollbar in IE 8/9. + * 2. Improve readability and alignment in all browsers. + */ +textarea { + overflow: auto; + /* 1 */ + vertical-align: top; + /* 2 */ +} + +/* ========================================================================== + Tables + ========================================================================== */ +/** + * Remove most spacing between table cells. + */ +table { + border-collapse: collapse; + border-spacing: 0; +} + +/*# sourceMappingURL=normalize.css.map */ diff --git a/docroot/sites/all/themes/libraryzurb_teen/css/foundation/normalize.css.map b/docroot/sites/all/themes/libraryzurb_teen/css/foundation/normalize.css.map new file mode 100644 index 00000000..aa332f15 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/css/foundation/normalize.css.map @@ -0,0 +1,7 @@ +{ +"version": 3, +"mappings": "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", +"sources": ["../../../../../../../../../../../usr/lib/ruby/gems/1.9.1/gems/zurb-foundation-4.3.2/scss/normalize.scss"], +"names": [], +"file": "normalize.css" +} \ No newline at end of file diff --git a/docroot/sites/all/themes/libraryzurb_teen/css/fullcalendar.css b/docroot/sites/all/themes/libraryzurb_teen/css/fullcalendar.css new file mode 100644 index 00000000..92fe47f2 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/css/fullcalendar.css @@ -0,0 +1,589 @@ +/*! + * FullCalendar v1.6.4 Stylesheet + * Docs & License: http://arshaw.com/fullcalendar/ + * (c) 2013 Adam Shaw + */ + + +.fc { + direction: ltr; + text-align: left; + } + +.fc table { + border-collapse: collapse; + border-spacing: 0; + } + +html .fc, +.fc table { + font-size: 1em; + } + +.fc td, +.fc th { + padding: 0; + vertical-align: top; + } + + + +/* Header +------------------------------------------------------------------------*/ + +.fc-header td { + white-space: nowrap; + } + +.fc-header-left { + width: 25%; + text-align: left; + } + +.fc-header-center { + text-align: center; + } + +.fc-header-right { + width: 25%; + text-align: right; + } + +.fc-header-title { + display: inline-block; + vertical-align: top; + } + +.fc-header-title h2 { + margin-top: 0; + white-space: nowrap; + } + +.fc .fc-header-space { + padding-left: 10px; + } + +.fc-header .fc-button { + margin-bottom: 1em; + vertical-align: top; + } + +/* buttons edges butting together */ + +.fc-header .fc-button { + margin-right: -1px; + } + +.fc-header .fc-corner-right, /* non-theme */ +.fc-header .ui-corner-right { /* theme */ + margin-right: 0; /* back to normal */ + } + +/* button layering (for border precedence) */ + +.fc-header .fc-state-hover, +.fc-header .ui-state-hover { + z-index: 2; + } + +.fc-header .fc-state-down { + z-index: 3; + } + +.fc-header .fc-state-active, +.fc-header .ui-state-active { + z-index: 4; + } + + + +/* Content +------------------------------------------------------------------------*/ + +.fc-content { + clear: both; + zoom: 1; /* for IE7, gives accurate coordinates for [un]freezeContentHeight */ + } + +.fc-view { + width: 100%; + overflow: hidden; + } + + + +/* Cell Styles +------------------------------------------------------------------------*/ + +.fc-widget-header, /* , usually */ +.fc-widget-content { /* , usually */ + border: 1px solid #ddd; + } + +.fc-state-highlight { /* today cell */ /* TODO: add .fc-today to */ + background: #fcf8e3; + } + +.fc-cell-overlay { /* semi-transparent rectangle while dragging */ + background: #bce8f1; + opacity: .3; + filter: alpha(opacity=30); /* for IE */ + } + + + +/* Buttons +------------------------------------------------------------------------*/ + +.fc-button { + position: relative; + display: inline-block; + padding: 0 .6em; + overflow: hidden; + height: 1.9em; + line-height: 1.9em; + white-space: nowrap; + cursor: pointer; + } + +.fc-state-default { /* non-theme */ + border: 1px solid; + } + +.fc-state-default.fc-corner-left { /* non-theme */ + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; + } + +.fc-state-default.fc-corner-right { /* non-theme */ + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + } + +/* + Our default prev/next buttons use HTML entities like ‹ › « » + and we'll try to make them look good cross-browser. +*/ + +.fc-text-arrow { + margin: 0 .1em; + font-size: 2em; + font-family: "Courier New", Courier, monospace; + vertical-align: baseline; /* for IE7 */ + } + +.fc-button-prev .fc-text-arrow, +.fc-button-next .fc-text-arrow { /* for ‹ › */ + font-weight: bold; + } + +/* icon (for jquery ui) */ + +.fc-button .fc-icon-wrap { + position: relative; + float: left; + top: 50%; + } + +.fc-button .ui-icon { + position: relative; + float: left; + margin-top: -50%; + *margin-top: 0; + *top: -50%; + } + +/* + button states + borrowed from twitter bootstrap (http://twitter.github.com/bootstrap/) +*/ + +.fc-state-default { + background-color: #f5f5f5; + background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); + background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); + background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); + background-repeat: repeat-x; + border-color: #e6e6e6 #e6e6e6 #bfbfbf; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + color: #333; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + } + +.fc-state-hover, +.fc-state-down, +.fc-state-active, +.fc-state-disabled { + color: #333333; + background-color: #e6e6e6; + } + +.fc-state-hover { + color: #333333; + text-decoration: none; + background-position: 0 -15px; + -webkit-transition: background-position 0.1s linear; + -moz-transition: background-position 0.1s linear; + -o-transition: background-position 0.1s linear; + transition: background-position 0.1s linear; + } + +.fc-state-down, +.fc-state-active { + background-color: #cccccc; + background-image: none; + outline: 0; + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + } + +.fc-state-disabled { + cursor: default; + background-image: none; + opacity: 0.65; + filter: alpha(opacity=65); + box-shadow: none; + } + + + +/* Global Event Styles +------------------------------------------------------------------------*/ + +.fc-event-container > * { + z-index: 8; + } + +.fc-event-container > .ui-draggable-dragging, +.fc-event-container > .ui-resizable-resizing { + z-index: 9; + } + +.fc-event { + border: 1px solid #3a87ad; /* default BORDER color */ + background-color: #3a87ad; /* default BACKGROUND color */ + color: #fff; /* default TEXT color */ + font-size: .85em; + cursor: default; + } + +a.fc-event { + text-decoration: none; + } + +a.fc-event, +.fc-event-draggable { + cursor: pointer; + } + +.fc-rtl .fc-event { + text-align: right; + } + +.fc-event-inner { + width: 100%; + height: 100%; + overflow: hidden; + } + +.fc-event-time, +.fc-event-title { + padding: 0 1px; + } + +.fc .ui-resizable-handle { + display: block; + position: absolute; + z-index: 99999; + overflow: hidden; /* hacky spaces (IE6/7) */ + font-size: 300%; /* */ + line-height: 50%; /* */ + } + + + +/* Horizontal Events +------------------------------------------------------------------------*/ + +.fc-event-hori { + border-width: 1px 0; + margin-bottom: 1px; + } + +.fc-ltr .fc-event-hori.fc-event-start, +.fc-rtl .fc-event-hori.fc-event-end { + border-left-width: 1px; + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + } + +.fc-ltr .fc-event-hori.fc-event-end, +.fc-rtl .fc-event-hori.fc-event-start { + border-right-width: 1px; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; + } + +/* resizable */ + +.fc-event-hori .ui-resizable-e { + top: 0 !important; /* importants override pre jquery ui 1.7 styles */ + right: -3px !important; + width: 7px !important; + height: 100% !important; + cursor: e-resize; + } + +.fc-event-hori .ui-resizable-w { + top: 0 !important; + left: -3px !important; + width: 7px !important; + height: 100% !important; + cursor: w-resize; + } + +.fc-event-hori .ui-resizable-handle { + _padding-bottom: 14px; /* IE6 had 0 height */ + } + + + +/* Reusable Separate-border Table +------------------------------------------------------------*/ + +table.fc-border-separate { + border-collapse: separate; + } + +.fc-border-separate th, +.fc-border-separate td { + border-width: 1px 0 0 1px; + } + +.fc-border-separate th.fc-last, +.fc-border-separate td.fc-last { + border-right-width: 1px; + } + +.fc-border-separate tr.fc-last th, +.fc-border-separate tr.fc-last td { + border-bottom-width: 1px; + } + +.fc-border-separate tbody tr.fc-first td, +.fc-border-separate tbody tr.fc-first th { + border-top-width: 0; + } + + + +/* Month View, Basic Week View, Basic Day View +------------------------------------------------------------------------*/ + +.fc-grid th { + text-align: center; + } + +.fc .fc-week-number { + width: 22px; + text-align: center; + } + +.fc .fc-week-number div { + padding: 0 2px; + } + +.fc-grid .fc-day-number { + float: right; + padding: 0 2px; + } + +.fc-grid .fc-other-month .fc-day-number { + opacity: 0.3; + filter: alpha(opacity=30); /* for IE */ + /* opacity with small font can sometimes look too faded + might want to set the 'color' property instead + making day-numbers bold also fixes the problem */ + } + +.fc-grid .fc-day-content { + clear: both; + padding: 2px 2px 1px; /* distance between events and day edges */ + } + +/* event styles */ + +.fc-grid .fc-event-time { + font-weight: bold; + } + +/* right-to-left */ + +.fc-rtl .fc-grid .fc-day-number { + float: left; + } + +.fc-rtl .fc-grid .fc-event-time { + float: right; + } + + + +/* Agenda Week View, Agenda Day View +------------------------------------------------------------------------*/ + +.fc-agenda table { + border-collapse: separate; + } + +.fc-agenda-days th { + text-align: center; + } + +.fc-agenda .fc-agenda-axis { + width: 50px; + padding: 0 4px; + vertical-align: middle; + text-align: right; + white-space: nowrap; + font-weight: normal; + } + +.fc-agenda .fc-week-number { + font-weight: bold; + } + +.fc-agenda .fc-day-content { + padding: 2px 2px 1px; + } + +/* make axis border take precedence */ + +.fc-agenda-days .fc-agenda-axis { + border-right-width: 1px; + } + +.fc-agenda-days .fc-col0 { + border-left-width: 0; + } + +/* all-day area */ + +.fc-agenda-allday th { + border-width: 0 1px; + } + +.fc-agenda-allday .fc-day-content { + min-height: 34px; /* TODO: doesnt work well in quirksmode */ + _height: 34px; + } + +/* divider (between all-day and slots) */ + +.fc-agenda-divider-inner { + height: 2px; + overflow: hidden; + } + +.fc-widget-header .fc-agenda-divider-inner { + background: #eee; + } + +/* slot rows */ + +.fc-agenda-slots th { + border-width: 1px 1px 0; + } + +.fc-agenda-slots td { + border-width: 1px 0 0; + background: none; + } + +.fc-agenda-slots td div { + height: 20px; + } + +.fc-agenda-slots tr.fc-slot0 th, +.fc-agenda-slots tr.fc-slot0 td { + border-top-width: 0; + } + +.fc-agenda-slots tr.fc-minor th, +.fc-agenda-slots tr.fc-minor td { + border-top-style: dotted; + } + +.fc-agenda-slots tr.fc-minor th.ui-widget-header { + *border-top-style: solid; /* doesn't work with background in IE6/7 */ + } + + + +/* Vertical Events +------------------------------------------------------------------------*/ + +.fc-event-vert { + border-width: 0 1px; + } + +.fc-event-vert.fc-event-start { + border-top-width: 1px; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + } + +.fc-event-vert.fc-event-end { + border-bottom-width: 1px; + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; + } + +.fc-event-vert .fc-event-time { + white-space: nowrap; + font-size: 10px; + } + +.fc-event-vert .fc-event-inner { + position: relative; + z-index: 2; + } + +.fc-event-vert .fc-event-bg { /* makes the event lighter w/ a semi-transparent overlay */ + position: absolute; + z-index: 1; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: #fff; + opacity: .25; + filter: alpha(opacity=25); + } + +.fc .ui-draggable-dragging .fc-event-bg, /* TODO: something nicer like .fc-opacity */ +.fc-select-helper .fc-event-bg { + display: none\9; /* for IE6/7/8. nested opacity filters while dragging don't work */ + } + +/* resizable */ + +.fc-event-vert .ui-resizable-s { + bottom: 0 !important; /* importants override pre jquery ui 1.7 styles */ + width: 100% !important; + height: 8px !important; + overflow: hidden !important; + line-height: 8px !important; + font-size: 11px !important; + font-family: monospace; + text-align: center; + cursor: s-resize; + } + +.fc-agenda .ui-resizable-resizing { /* TODO: better selector */ + _overflow: hidden; + } + + diff --git a/docroot/sites/all/themes/libraryzurb_teen/css/fullcalendar.print.css b/docroot/sites/all/themes/libraryzurb_teen/css/fullcalendar.print.css new file mode 100644 index 00000000..43607199 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/css/fullcalendar.print.css @@ -0,0 +1,32 @@ +/*! + * FullCalendar v1.6.4 Print Stylesheet + * Docs & License: http://arshaw.com/fullcalendar/ + * (c) 2013 Adam Shaw + */ + +/* + * Include this stylesheet on your page to get a more printer-friendly calendar. + * When including this stylesheet, use the media='print' attribute of the tag. + * Make sure to include this stylesheet IN ADDITION to the regular fullcalendar.css. + */ + + + /* Events +-----------------------------------------------------*/ + +.fc-event { + background: #fff !important; + color: #000 !important; + } + +/* for vertical events */ + +.fc-event-bg { + display: none !important; + } + +.fc-event .ui-resizable-handle { + display: none !important; + } + + diff --git a/docroot/sites/all/themes/libraryzurb_teen/css/ie.css b/docroot/sites/all/themes/libraryzurb_teen/css/ie.css new file mode 100644 index 00000000..4fdc8065 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/css/ie.css @@ -0,0 +1,3 @@ +/* Welcome to Compass. Use this file to write IE specific override styles. */ + +/*# sourceMappingURL=ie.css.map */ diff --git a/docroot/sites/all/themes/libraryzurb_teen/css/ie.css.map b/docroot/sites/all/themes/libraryzurb_teen/css/ie.css.map new file mode 100644 index 00000000..c390fa86 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/css/ie.css.map @@ -0,0 +1,7 @@ +{ +"version": 3, +"mappings": "AAAA,6EAA6E", +"sources": ["../scss/ie.scss"], +"names": [], +"file": "ie.css" +} \ No newline at end of file diff --git a/docroot/sites/all/themes/libraryzurb_teen/favicon.ico b/docroot/sites/all/themes/libraryzurb_teen/favicon.ico new file mode 100644 index 00000000..2faf9c7f Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/favicon.ico differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/favicon.png b/docroot/sites/all/themes/libraryzurb_teen/favicon.png new file mode 100644 index 00000000..2faf9c7f Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/favicon.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/fonts/README.txt b/docroot/sites/all/themes/libraryzurb_teen/fonts/README.txt new file mode 100644 index 00000000..5805b4a5 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/fonts/README.txt @@ -0,0 +1,8 @@ +Fonts +==================================== +Fonts go in this folder. This file is just a placeholder. Feel free to delete +this particular file. + +Adding foundicons +==================================== +See the THEMENAME.scss file. diff --git a/docroot/sites/all/themes/libraryzurb_teen/fonts/foundation-icons/foundation-icons.css b/docroot/sites/all/themes/libraryzurb_teen/fonts/foundation-icons/foundation-icons.css new file mode 100644 index 00000000..d866a733 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/fonts/foundation-icons/foundation-icons.css @@ -0,0 +1,594 @@ +/* + * Foundation Icons v 3.0 + * Made by ZURB 2013 http://zurb.com/playground/foundation-icon-fonts-3 + * MIT License + */ + +@font-face { + font-family: "foundation-icons"; + src: url("foundation-icons.eot"); + src: url("foundation-icons.eot?#iefix") format("embedded-opentype"), + url("foundation-icons.woff") format("woff"), + url("foundation-icons.ttf") format("truetype"), + url("foundation-icons.svg#fontcustom") format("svg"); + font-weight: normal; + font-style: normal; +} + +.fi-address-book:before, +.fi-alert:before, +.fi-align-center:before, +.fi-align-justify:before, +.fi-align-left:before, +.fi-align-right:before, +.fi-anchor:before, +.fi-annotate:before, +.fi-archive:before, +.fi-arrow-down:before, +.fi-arrow-left:before, +.fi-arrow-right:before, +.fi-arrow-up:before, +.fi-arrows-compress:before, +.fi-arrows-expand:before, +.fi-arrows-in:before, +.fi-arrows-out:before, +.fi-asl:before, +.fi-asterisk:before, +.fi-at-sign:before, +.fi-background-color:before, +.fi-battery-empty:before, +.fi-battery-full:before, +.fi-battery-half:before, +.fi-bitcoin-circle:before, +.fi-bitcoin:before, +.fi-blind:before, +.fi-bluetooth:before, +.fi-bold:before, +.fi-book-bookmark:before, +.fi-book:before, +.fi-bookmark:before, +.fi-braille:before, +.fi-burst-new:before, +.fi-burst-sale:before, +.fi-burst:before, +.fi-calendar:before, +.fi-camera:before, +.fi-check:before, +.fi-checkbox:before, +.fi-clipboard-notes:before, +.fi-clipboard-pencil:before, +.fi-clipboard:before, +.fi-clock:before, +.fi-closed-caption:before, +.fi-cloud:before, +.fi-comment-minus:before, +.fi-comment-quotes:before, +.fi-comment-video:before, +.fi-comment:before, +.fi-comments:before, +.fi-compass:before, +.fi-contrast:before, +.fi-credit-card:before, +.fi-crop:before, +.fi-crown:before, +.fi-css3:before, +.fi-database:before, +.fi-die-five:before, +.fi-die-four:before, +.fi-die-one:before, +.fi-die-six:before, +.fi-die-three:before, +.fi-die-two:before, +.fi-dislike:before, +.fi-dollar-bill:before, +.fi-dollar:before, +.fi-download:before, +.fi-eject:before, +.fi-elevator:before, +.fi-euro:before, +.fi-eye:before, +.fi-fast-forward:before, +.fi-female-symbol:before, +.fi-female:before, +.fi-filter:before, +.fi-first-aid:before, +.fi-flag:before, +.fi-folder-add:before, +.fi-folder-lock:before, +.fi-folder:before, +.fi-foot:before, +.fi-foundation:before, +.fi-graph-bar:before, +.fi-graph-horizontal:before, +.fi-graph-pie:before, +.fi-graph-trend:before, +.fi-guide-dog:before, +.fi-hearing-aid:before, +.fi-heart:before, +.fi-home:before, +.fi-html5:before, +.fi-indent-less:before, +.fi-indent-more:before, +.fi-info:before, +.fi-italic:before, +.fi-key:before, +.fi-laptop:before, +.fi-layout:before, +.fi-lightbulb:before, +.fi-like:before, +.fi-link:before, +.fi-list-bullet:before, +.fi-list-number:before, +.fi-list-thumbnails:before, +.fi-list:before, +.fi-lock:before, +.fi-loop:before, +.fi-magnifying-glass:before, +.fi-mail:before, +.fi-male-female:before, +.fi-male-symbol:before, +.fi-male:before, +.fi-map:before, +.fi-marker:before, +.fi-megaphone:before, +.fi-microphone:before, +.fi-minus-circle:before, +.fi-minus:before, +.fi-mobile-signal:before, +.fi-mobile:before, +.fi-monitor:before, +.fi-mountains:before, +.fi-music:before, +.fi-next:before, +.fi-no-dogs:before, +.fi-no-smoking:before, +.fi-page-add:before, +.fi-page-copy:before, +.fi-page-csv:before, +.fi-page-delete:before, +.fi-page-doc:before, +.fi-page-edit:before, +.fi-page-export-csv:before, +.fi-page-export-doc:before, +.fi-page-export-pdf:before, +.fi-page-export:before, +.fi-page-filled:before, +.fi-page-multiple:before, +.fi-page-pdf:before, +.fi-page-remove:before, +.fi-page-search:before, +.fi-page:before, +.fi-paint-bucket:before, +.fi-paperclip:before, +.fi-pause:before, +.fi-paw:before, +.fi-paypal:before, +.fi-pencil:before, +.fi-photo:before, +.fi-play-circle:before, +.fi-play-video:before, +.fi-play:before, +.fi-plus:before, +.fi-pound:before, +.fi-power:before, +.fi-previous:before, +.fi-price-tag:before, +.fi-pricetag-multiple:before, +.fi-print:before, +.fi-prohibited:before, +.fi-projection-screen:before, +.fi-puzzle:before, +.fi-quote:before, +.fi-record:before, +.fi-refresh:before, +.fi-results-demographics:before, +.fi-results:before, +.fi-rewind-ten:before, +.fi-rewind:before, +.fi-rss:before, +.fi-safety-cone:before, +.fi-save:before, +.fi-share:before, +.fi-sheriff-badge:before, +.fi-shield:before, +.fi-shopping-bag:before, +.fi-shopping-cart:before, +.fi-shuffle:before, +.fi-skull:before, +.fi-social-500px:before, +.fi-social-adobe:before, +.fi-social-amazon:before, +.fi-social-android:before, +.fi-social-apple:before, +.fi-social-behance:before, +.fi-social-bing:before, +.fi-social-blogger:before, +.fi-social-delicious:before, +.fi-social-designer-news:before, +.fi-social-deviant-art:before, +.fi-social-digg:before, +.fi-social-dribbble:before, +.fi-social-drive:before, +.fi-social-dropbox:before, +.fi-social-evernote:before, +.fi-social-facebook:before, +.fi-social-flickr:before, +.fi-social-forrst:before, +.fi-social-foursquare:before, +.fi-social-game-center:before, +.fi-social-github:before, +.fi-social-google-plus:before, +.fi-social-hacker-news:before, +.fi-social-hi5:before, +.fi-social-instagram:before, +.fi-social-joomla:before, +.fi-social-lastfm:before, +.fi-social-linkedin:before, +.fi-social-medium:before, +.fi-social-myspace:before, +.fi-social-orkut:before, +.fi-social-path:before, +.fi-social-picasa:before, +.fi-social-pinterest:before, +.fi-social-rdio:before, +.fi-social-reddit:before, +.fi-social-skillshare:before, +.fi-social-skype:before, +.fi-social-smashing-mag:before, +.fi-social-snapchat:before, +.fi-social-spotify:before, +.fi-social-squidoo:before, +.fi-social-stack-overflow:before, +.fi-social-steam:before, +.fi-social-stumbleupon:before, +.fi-social-treehouse:before, +.fi-social-tumblr:before, +.fi-social-twitter:before, +.fi-social-vimeo:before, +.fi-social-windows:before, +.fi-social-xbox:before, +.fi-social-yahoo:before, +.fi-social-yelp:before, +.fi-social-youtube:before, +.fi-social-zerply:before, +.fi-social-zurb:before, +.fi-sound:before, +.fi-star:before, +.fi-stop:before, +.fi-strikethrough:before, +.fi-subscript:before, +.fi-superscript:before, +.fi-tablet-landscape:before, +.fi-tablet-portrait:before, +.fi-target-two:before, +.fi-target:before, +.fi-telephone-accessible:before, +.fi-telephone:before, +.fi-text-color:before, +.fi-thumbnails:before, +.fi-ticket:before, +.fi-torso-business:before, +.fi-torso-female:before, +.fi-torso:before, +.fi-torsos-all-female:before, +.fi-torsos-all:before, +.fi-torsos-female-male:before, +.fi-torsos-male-female:before, +.fi-torsos:before, +.fi-trash:before, +.fi-trees:before, +.fi-trophy:before, +.fi-underline:before, +.fi-universal-access:before, +.fi-unlink:before, +.fi-unlock:before, +.fi-upload-cloud:before, +.fi-upload:before, +.fi-usb:before, +.fi-video:before, +.fi-volume-none:before, +.fi-volume-strike:before, +.fi-volume:before, +.fi-web:before, +.fi-wheelchair:before, +.fi-widget:before, +.fi-wrench:before, +.fi-x-circle:before, +.fi-x:before, +.fi-yen:before, +.fi-zoom-in:before, +.fi-zoom-out:before { + font-family: "foundation-icons"; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + -webkit-font-smoothing: antialiased; + display: inline-block; + text-decoration: inherit; +} + +.fi-address-book:before { content: "\f100"; } +.fi-alert:before { content: "\f101"; } +.fi-align-center:before { content: "\f102"; } +.fi-align-justify:before { content: "\f103"; } +.fi-align-left:before { content: "\f104"; } +.fi-align-right:before { content: "\f105"; } +.fi-anchor:before { content: "\f106"; } +.fi-annotate:before { content: "\f107"; } +.fi-archive:before { content: "\f108"; } +.fi-arrow-down:before { content: "\f109"; } +.fi-arrow-left:before { content: "\f10a"; } +.fi-arrow-right:before { content: "\f10b"; } +.fi-arrow-up:before { content: "\f10c"; } +.fi-arrows-compress:before { content: "\f10d"; } +.fi-arrows-expand:before { content: "\f10e"; } +.fi-arrows-in:before { content: "\f10f"; } +.fi-arrows-out:before { content: "\f110"; } +.fi-asl:before { content: "\f111"; } +.fi-asterisk:before { content: "\f112"; } +.fi-at-sign:before { content: "\f113"; } +.fi-background-color:before { content: "\f114"; } +.fi-battery-empty:before { content: "\f115"; } +.fi-battery-full:before { content: "\f116"; } +.fi-battery-half:before { content: "\f117"; } +.fi-bitcoin-circle:before { content: "\f118"; } +.fi-bitcoin:before { content: "\f119"; } +.fi-blind:before { content: "\f11a"; } +.fi-bluetooth:before { content: "\f11b"; } +.fi-bold:before { content: "\f11c"; } +.fi-book-bookmark:before { content: "\f11d"; } +.fi-book:before { content: "\f11e"; } +.fi-bookmark:before { content: "\f11f"; } +.fi-braille:before { content: "\f120"; } +.fi-burst-new:before { content: "\f121"; } +.fi-burst-sale:before { content: "\f122"; } +.fi-burst:before { content: "\f123"; } +.fi-calendar:before { content: "\f124"; } +.fi-camera:before { content: "\f125"; } +.fi-check:before { content: "\f126"; } +.fi-checkbox:before { content: "\f127"; } +.fi-clipboard-notes:before { content: "\f128"; } +.fi-clipboard-pencil:before { content: "\f129"; } +.fi-clipboard:before { content: "\f12a"; } +.fi-clock:before { content: "\f12b"; } +.fi-closed-caption:before { content: "\f12c"; } +.fi-cloud:before { content: "\f12d"; } +.fi-comment-minus:before { content: "\f12e"; } +.fi-comment-quotes:before { content: "\f12f"; } +.fi-comment-video:before { content: "\f130"; } +.fi-comment:before { content: "\f131"; } +.fi-comments:before { content: "\f132"; } +.fi-compass:before { content: "\f133"; } +.fi-contrast:before { content: "\f134"; } +.fi-credit-card:before { content: "\f135"; } +.fi-crop:before { content: "\f136"; } +.fi-crown:before { content: "\f137"; } +.fi-css3:before { content: "\f138"; } +.fi-database:before { content: "\f139"; } +.fi-die-five:before { content: "\f13a"; } +.fi-die-four:before { content: "\f13b"; } +.fi-die-one:before { content: "\f13c"; } +.fi-die-six:before { content: "\f13d"; } +.fi-die-three:before { content: "\f13e"; } +.fi-die-two:before { content: "\f13f"; } +.fi-dislike:before { content: "\f140"; } +.fi-dollar-bill:before { content: "\f141"; } +.fi-dollar:before { content: "\f142"; } +.fi-download:before { content: "\f143"; } +.fi-eject:before { content: "\f144"; } +.fi-elevator:before { content: "\f145"; } +.fi-euro:before { content: "\f146"; } +.fi-eye:before { content: "\f147"; } +.fi-fast-forward:before { content: "\f148"; } +.fi-female-symbol:before { content: "\f149"; } +.fi-female:before { content: "\f14a"; } +.fi-filter:before { content: "\f14b"; } +.fi-first-aid:before { content: "\f14c"; } +.fi-flag:before { content: "\f14d"; } +.fi-folder-add:before { content: "\f14e"; } +.fi-folder-lock:before { content: "\f14f"; } +.fi-folder:before { content: "\f150"; } +.fi-foot:before { content: "\f151"; } +.fi-foundation:before { content: "\f152"; } +.fi-graph-bar:before { content: "\f153"; } +.fi-graph-horizontal:before { content: "\f154"; } +.fi-graph-pie:before { content: "\f155"; } +.fi-graph-trend:before { content: "\f156"; } +.fi-guide-dog:before { content: "\f157"; } +.fi-hearing-aid:before { content: "\f158"; } +.fi-heart:before { content: "\f159"; } +.fi-home:before { content: "\f15a"; } +.fi-html5:before { content: "\f15b"; } +.fi-indent-less:before { content: "\f15c"; } +.fi-indent-more:before { content: "\f15d"; } +.fi-info:before { content: "\f15e"; } +.fi-italic:before { content: "\f15f"; } +.fi-key:before { content: "\f160"; } +.fi-laptop:before { content: "\f161"; } +.fi-layout:before { content: "\f162"; } +.fi-lightbulb:before { content: "\f163"; } +.fi-like:before { content: "\f164"; } +.fi-link:before { content: "\f165"; } +.fi-list-bullet:before { content: "\f166"; } +.fi-list-number:before { content: "\f167"; } +.fi-list-thumbnails:before { content: "\f168"; } +.fi-list:before { content: "\f169"; } +.fi-lock:before { content: "\f16a"; } +.fi-loop:before { content: "\f16b"; } +.fi-magnifying-glass:before { content: "\f16c"; } +.fi-mail:before { content: "\f16d"; } +.fi-male-female:before { content: "\f16e"; } +.fi-male-symbol:before { content: "\f16f"; } +.fi-male:before { content: "\f170"; } +.fi-map:before { content: "\f171"; } +.fi-marker:before { content: "\f172"; } +.fi-megaphone:before { content: "\f173"; } +.fi-microphone:before { content: "\f174"; } +.fi-minus-circle:before { content: "\f175"; } +.fi-minus:before { content: "\f176"; } +.fi-mobile-signal:before { content: "\f177"; } +.fi-mobile:before { content: "\f178"; } +.fi-monitor:before { content: "\f179"; } +.fi-mountains:before { content: "\f17a"; } +.fi-music:before { content: "\f17b"; } +.fi-next:before { content: "\f17c"; } +.fi-no-dogs:before { content: "\f17d"; } +.fi-no-smoking:before { content: "\f17e"; } +.fi-page-add:before { content: "\f17f"; } +.fi-page-copy:before { content: "\f180"; } +.fi-page-csv:before { content: "\f181"; } +.fi-page-delete:before { content: "\f182"; } +.fi-page-doc:before { content: "\f183"; } +.fi-page-edit:before { content: "\f184"; } +.fi-page-export-csv:before { content: "\f185"; } +.fi-page-export-doc:before { content: "\f186"; } +.fi-page-export-pdf:before { content: "\f187"; } +.fi-page-export:before { content: "\f188"; } +.fi-page-filled:before { content: "\f189"; } +.fi-page-multiple:before { content: "\f18a"; } +.fi-page-pdf:before { content: "\f18b"; } +.fi-page-remove:before { content: "\f18c"; } +.fi-page-search:before { content: "\f18d"; } +.fi-page:before { content: "\f18e"; } +.fi-paint-bucket:before { content: "\f18f"; } +.fi-paperclip:before { content: "\f190"; } +.fi-pause:before { content: "\f191"; } +.fi-paw:before { content: "\f192"; } +.fi-paypal:before { content: "\f193"; } +.fi-pencil:before { content: "\f194"; } +.fi-photo:before { content: "\f195"; } +.fi-play-circle:before { content: "\f196"; } +.fi-play-video:before { content: "\f197"; } +.fi-play:before { content: "\f198"; } +.fi-plus:before { content: "\f199"; } +.fi-pound:before { content: "\f19a"; } +.fi-power:before { content: "\f19b"; } +.fi-previous:before { content: "\f19c"; } +.fi-price-tag:before { content: "\f19d"; } +.fi-pricetag-multiple:before { content: "\f19e"; } +.fi-print:before { content: "\f19f"; } +.fi-prohibited:before { content: "\f1a0"; } +.fi-projection-screen:before { content: "\f1a1"; } +.fi-puzzle:before { content: "\f1a2"; } +.fi-quote:before { content: "\f1a3"; } +.fi-record:before { content: "\f1a4"; } +.fi-refresh:before { content: "\f1a5"; } +.fi-results-demographics:before { content: "\f1a6"; } +.fi-results:before { content: "\f1a7"; } +.fi-rewind-ten:before { content: "\f1a8"; } +.fi-rewind:before { content: "\f1a9"; } +.fi-rss:before { content: "\f1aa"; } +.fi-safety-cone:before { content: "\f1ab"; } +.fi-save:before { content: "\f1ac"; } +.fi-share:before { content: "\f1ad"; } +.fi-sheriff-badge:before { content: "\f1ae"; } +.fi-shield:before { content: "\f1af"; } +.fi-shopping-bag:before { content: "\f1b0"; } +.fi-shopping-cart:before { content: "\f1b1"; } +.fi-shuffle:before { content: "\f1b2"; } +.fi-skull:before { content: "\f1b3"; } +.fi-social-500px:before { content: "\f1b4"; } +.fi-social-adobe:before { content: "\f1b5"; } +.fi-social-amazon:before { content: "\f1b6"; } +.fi-social-android:before { content: "\f1b7"; } +.fi-social-apple:before { content: "\f1b8"; } +.fi-social-behance:before { content: "\f1b9"; } +.fi-social-bing:before { content: "\f1ba"; } +.fi-social-blogger:before { content: "\f1bb"; } +.fi-social-delicious:before { content: "\f1bc"; } +.fi-social-designer-news:before { content: "\f1bd"; } +.fi-social-deviant-art:before { content: "\f1be"; } +.fi-social-digg:before { content: "\f1bf"; } +.fi-social-dribbble:before { content: "\f1c0"; } +.fi-social-drive:before { content: "\f1c1"; } +.fi-social-dropbox:before { content: "\f1c2"; } +.fi-social-evernote:before { content: "\f1c3"; } +.fi-social-facebook:before { content: "\f1c4"; } +.fi-social-flickr:before { content: "\f1c5"; } +.fi-social-forrst:before { content: "\f1c6"; } +.fi-social-foursquare:before { content: "\f1c7"; } +.fi-social-game-center:before { content: "\f1c8"; } +.fi-social-github:before { content: "\f1c9"; } +.fi-social-google-plus:before { content: "\f1ca"; } +.fi-social-hacker-news:before { content: "\f1cb"; } +.fi-social-hi5:before { content: "\f1cc"; } +.fi-social-instagram:before { content: "\f1cd"; } +.fi-social-joomla:before { content: "\f1ce"; } +.fi-social-lastfm:before { content: "\f1cf"; } +.fi-social-linkedin:before { content: "\f1d0"; } +.fi-social-medium:before { content: "\f1d1"; } +.fi-social-myspace:before { content: "\f1d2"; } +.fi-social-orkut:before { content: "\f1d3"; } +.fi-social-path:before { content: "\f1d4"; } +.fi-social-picasa:before { content: "\f1d5"; } +.fi-social-pinterest:before { content: "\f1d6"; } +.fi-social-rdio:before { content: "\f1d7"; } +.fi-social-reddit:before { content: "\f1d8"; } +.fi-social-skillshare:before { content: "\f1d9"; } +.fi-social-skype:before { content: "\f1da"; } +.fi-social-smashing-mag:before { content: "\f1db"; } +.fi-social-snapchat:before { content: "\f1dc"; } +.fi-social-spotify:before { content: "\f1dd"; } +.fi-social-squidoo:before { content: "\f1de"; } +.fi-social-stack-overflow:before { content: "\f1df"; } +.fi-social-steam:before { content: "\f1e0"; } +.fi-social-stumbleupon:before { content: "\f1e1"; } +.fi-social-treehouse:before { content: "\f1e2"; } +.fi-social-tumblr:before { content: "\f1e3"; } +.fi-social-twitter:before { content: "\f1e4"; } +.fi-social-vimeo:before { content: "\f1e5"; } +.fi-social-windows:before { content: "\f1e6"; } +.fi-social-xbox:before { content: "\f1e7"; } +.fi-social-yahoo:before { content: "\f1e8"; } +.fi-social-yelp:before { content: "\f1e9"; } +.fi-social-youtube:before { content: "\f1ea"; } +.fi-social-zerply:before { content: "\f1eb"; } +.fi-social-zurb:before { content: "\f1ec"; } +.fi-sound:before { content: "\f1ed"; } +.fi-star:before { content: "\f1ee"; } +.fi-stop:before { content: "\f1ef"; } +.fi-strikethrough:before { content: "\f1f0"; } +.fi-subscript:before { content: "\f1f1"; } +.fi-superscript:before { content: "\f1f2"; } +.fi-tablet-landscape:before { content: "\f1f3"; } +.fi-tablet-portrait:before { content: "\f1f4"; } +.fi-target-two:before { content: "\f1f5"; } +.fi-target:before { content: "\f1f6"; } +.fi-telephone-accessible:before { content: "\f1f7"; } +.fi-telephone:before { content: "\f1f8"; } +.fi-text-color:before { content: "\f1f9"; } +.fi-thumbnails:before { content: "\f1fa"; } +.fi-ticket:before { content: "\f1fb"; } +.fi-torso-business:before { content: "\f1fc"; } +.fi-torso-female:before { content: "\f1fd"; } +.fi-torso:before { content: "\f1fe"; } +.fi-torsos-all-female:before { content: "\f1ff"; } +.fi-torsos-all:before { content: "\f200"; } +.fi-torsos-female-male:before { content: "\f201"; } +.fi-torsos-male-female:before { content: "\f202"; } +.fi-torsos:before { content: "\f203"; } +.fi-trash:before { content: "\f204"; } +.fi-trees:before { content: "\f205"; } +.fi-trophy:before { content: "\f206"; } +.fi-underline:before { content: "\f207"; } +.fi-universal-access:before { content: "\f208"; } +.fi-unlink:before { content: "\f209"; } +.fi-unlock:before { content: "\f20a"; } +.fi-upload-cloud:before { content: "\f20b"; } +.fi-upload:before { content: "\f20c"; } +.fi-usb:before { content: "\f20d"; } +.fi-video:before { content: "\f20e"; } +.fi-volume-none:before { content: "\f20f"; } +.fi-volume-strike:before { content: "\f210"; } +.fi-volume:before { content: "\f211"; } +.fi-web:before { content: "\f212"; } +.fi-wheelchair:before { content: "\f213"; } +.fi-widget:before { content: "\f214"; } +.fi-wrench:before { content: "\f215"; } +.fi-x-circle:before { content: "\f216"; } +.fi-x:before { content: "\f217"; } +.fi-yen:before { content: "\f218"; } +.fi-zoom-in:before { content: "\f219"; } +.fi-zoom-out:before { content: "\f21a"; } diff --git a/docroot/sites/all/themes/libraryzurb_teen/fonts/foundation-icons/foundation-icons.eot b/docroot/sites/all/themes/libraryzurb_teen/fonts/foundation-icons/foundation-icons.eot new file mode 100644 index 00000000..1746ad40 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/fonts/foundation-icons/foundation-icons.eot differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/fonts/foundation-icons/foundation-icons.svg b/docroot/sites/all/themes/libraryzurb_teen/fonts/foundation-icons/foundation-icons.svg new file mode 100644 index 00000000..4e014ff8 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/fonts/foundation-icons/foundation-icons.svg @@ -0,0 +1,970 @@ + + + + + +Created by FontForge 20120731 at Fri Aug 23 09:25:55 2013 + By Jordan Humphreys +Created by Jordan Humphreys with FontForge 2.0 (http://fontforge.sf.net) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docroot/sites/all/themes/libraryzurb_teen/fonts/foundation-icons/foundation-icons.ttf b/docroot/sites/all/themes/libraryzurb_teen/fonts/foundation-icons/foundation-icons.ttf new file mode 100644 index 00000000..6cce217d Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/fonts/foundation-icons/foundation-icons.ttf differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/fonts/foundation-icons/foundation-icons.woff b/docroot/sites/all/themes/libraryzurb_teen/fonts/foundation-icons/foundation-icons.woff new file mode 100644 index 00000000..e2cfe25d Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/fonts/foundation-icons/foundation-icons.woff differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/fonts/libraryzurb-fonts/Arial-Black-Bold.ttf b/docroot/sites/all/themes/libraryzurb_teen/fonts/libraryzurb-fonts/Arial-Black-Bold.ttf new file mode 100644 index 00000000..f9b9216c Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/fonts/libraryzurb-fonts/Arial-Black-Bold.ttf differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/fonts/libraryzurb-fonts/Chn_Prop_Arial_Normal.ttf b/docroot/sites/all/themes/libraryzurb_teen/fonts/libraryzurb-fonts/Chn_Prop_Arial_Normal.ttf new file mode 100644 index 00000000..ce4260f8 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/fonts/libraryzurb-fonts/Chn_Prop_Arial_Normal.ttf differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/fonts/libraryzurb-fonts/McLaren-Regular.ttf b/docroot/sites/all/themes/libraryzurb_teen/fonts/libraryzurb-fonts/McLaren-Regular.ttf new file mode 100644 index 00000000..af59a038 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/fonts/libraryzurb-fonts/McLaren-Regular.ttf differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/fonts/libraryzurb-fonts/PTF55F.ttf b/docroot/sites/all/themes/libraryzurb_teen/fonts/libraryzurb-fonts/PTF55F.ttf new file mode 100644 index 00000000..ed3e1b19 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/fonts/libraryzurb-fonts/PTF55F.ttf differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/fonts/libraryzurb-fonts/PTF75F.ttf b/docroot/sites/all/themes/libraryzurb_teen/fonts/libraryzurb-fonts/PTF75F.ttf new file mode 100644 index 00000000..4a3608be Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/fonts/libraryzurb-fonts/PTF75F.ttf differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/fonts/libraryzurb-fonts/arialbd.ttf b/docroot/sites/all/themes/libraryzurb_teen/fonts/libraryzurb-fonts/arialbd.ttf new file mode 100644 index 00000000..d0d857e2 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/fonts/libraryzurb-fonts/arialbd.ttf differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/homebox-block.tpl.php b/docroot/sites/all/themes/libraryzurb_teen/homebox-block.tpl.php new file mode 100644 index 00000000..c2ac036b --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/homebox-block.tpl.php @@ -0,0 +1,44 @@ +content['#views_contextual_links_info'])) { + $human_nm = $block->content['#views_contextual_links_info']['views_ui']['view']->human_name; +}else { + $human_nm = $block->subject; +} + + +/** + * @file + * homebox-block.tpl.php + * Default theme implementation each homebox block. + */ +?> +
        +
        +

        + closable): ?> + + + + + settings['color'] || isset($block->edit_form)): ?> + + + subject ?> +

        +
        + settings['color']): ?> +
        + + +   + +
        + + edit_form)): print $block->edit_form; endif; ?> +
        +
        content)){ print $block->content; } else { print drupal_render($block->content); } ?>
        +
        +
        diff --git a/docroot/sites/all/themes/libraryzurb_teen/homebox.tpl.php b/docroot/sites/all/themes/libraryzurb_teen/homebox.tpl.php new file mode 100644 index 00000000..c8a14c6c --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/homebox.tpl.php @@ -0,0 +1,38 @@ + + +
        + uid): ?> +
        + + + + +
        + + + +
        + + +
        + +
        settings['widths'][$i] ? ' style="width: ' . $page->settings['widths'][$i] . '%;"' : ''; ?>> +
        + $weight): ?> + + content): ?> + $block, 'page' => $page)); ?> + + + +
        +
        + +
        diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/bookphoto.png b/docroot/sites/all/themes/libraryzurb_teen/images/bookphoto.png new file mode 100644 index 00000000..a558ebdc Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/bookphoto.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/foundation/orbit/bullets.jpg b/docroot/sites/all/themes/libraryzurb_teen/images/foundation/orbit/bullets.jpg new file mode 100644 index 00000000..f3c734f0 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/foundation/orbit/bullets.jpg differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/foundation/orbit/left-arrow-small.png b/docroot/sites/all/themes/libraryzurb_teen/images/foundation/orbit/left-arrow-small.png new file mode 100644 index 00000000..b3ff0331 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/foundation/orbit/left-arrow-small.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/foundation/orbit/left-arrow.png b/docroot/sites/all/themes/libraryzurb_teen/images/foundation/orbit/left-arrow.png new file mode 100644 index 00000000..7e3f2d62 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/foundation/orbit/left-arrow.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/foundation/orbit/loading.gif b/docroot/sites/all/themes/libraryzurb_teen/images/foundation/orbit/loading.gif new file mode 100644 index 00000000..969f5059 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/foundation/orbit/loading.gif differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/foundation/orbit/mask-black.png b/docroot/sites/all/themes/libraryzurb_teen/images/foundation/orbit/mask-black.png new file mode 100644 index 00000000..02f3fbab Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/foundation/orbit/mask-black.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/foundation/orbit/pause-black.png b/docroot/sites/all/themes/libraryzurb_teen/images/foundation/orbit/pause-black.png new file mode 100644 index 00000000..5fb08754 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/foundation/orbit/pause-black.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/foundation/orbit/right-arrow-small.png b/docroot/sites/all/themes/libraryzurb_teen/images/foundation/orbit/right-arrow-small.png new file mode 100644 index 00000000..e4c95330 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/foundation/orbit/right-arrow-small.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/foundation/orbit/right-arrow.png b/docroot/sites/all/themes/libraryzurb_teen/images/foundation/orbit/right-arrow.png new file mode 100644 index 00000000..7c3199a7 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/foundation/orbit/right-arrow.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/foundation/orbit/rotator-black.png b/docroot/sites/all/themes/libraryzurb_teen/images/foundation/orbit/rotator-black.png new file mode 100644 index 00000000..8df4d31a Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/foundation/orbit/rotator-black.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/foundation/orbit/timer-black.png b/docroot/sites/all/themes/libraryzurb_teen/images/foundation/orbit/timer-black.png new file mode 100644 index 00000000..02f3fbab Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/foundation/orbit/timer-black.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/iconsprite.png b/docroot/sites/all/themes/libraryzurb_teen/images/iconsprite.png new file mode 100644 index 00000000..39e88c37 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/iconsprite.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/activities-dash.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/activities-dash.png new file mode 100644 index 00000000..f6c9a389 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/activities-dash.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/activities.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/activities.png new file mode 100644 index 00000000..c7272931 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/activities.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/activities_hover.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/activities_hover.png new file mode 100755 index 00000000..53e415f6 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/activities_hover.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/annocement.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/annocement.png new file mode 100644 index 00000000..49555946 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/annocement.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/arrow-list.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/arrow-list.png new file mode 100644 index 00000000..e9e5c77e Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/arrow-list.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/backgrnd.jpg b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/backgrnd.jpg new file mode 100644 index 00000000..0ce181c6 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/backgrnd.jpg differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/background-saffron.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/background-saffron.png new file mode 100644 index 00000000..744e4948 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/background-saffron.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/booklist-dash.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/booklist-dash.png new file mode 100644 index 00000000..3bd31ac2 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/booklist-dash.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/close-img.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/close-img.png new file mode 100644 index 00000000..dd3d8c4f Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/close-img.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/current-program.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/current-program.png new file mode 100644 index 00000000..3a990b83 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/current-program.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/current-programs.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/current-programs.png new file mode 100644 index 00000000..11c65587 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/current-programs.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/currentprogs_hover.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/currentprogs_hover.png new file mode 100755 index 00000000..ac426002 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/currentprogs_hover.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/events-mob.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/events-mob.png new file mode 100644 index 00000000..820e3485 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/events-mob.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/events.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/events.png new file mode 100644 index 00000000..c586a710 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/events.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/events_hover.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/events_hover.png new file mode 100755 index 00000000..42f4788d Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/events_hover.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/facebook.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/facebook.png new file mode 100644 index 00000000..b3baa198 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/facebook.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/fi-calendar.svg b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/fi-calendar.svg new file mode 100644 index 00000000..e3ace20f --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/fi-calendar.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/following.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/following.png new file mode 100644 index 00000000..220f80a0 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/following.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/fpo.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/fpo.png new file mode 100644 index 00000000..79e3596f Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/fpo.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/header-background.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/header-background.png new file mode 100644 index 00000000..50323466 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/header-background.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/left-arrow.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/left-arrow.png new file mode 100644 index 00000000..efe645e2 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/left-arrow.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/left-blue-arrow.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/left-blue-arrow.png new file mode 100644 index 00000000..13dd5615 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/left-blue-arrow.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/logo-img.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/logo-img.png new file mode 100644 index 00000000..0715bdd8 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/logo-img.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/min-img.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/min-img.png new file mode 100644 index 00000000..4b1fafb7 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/min-img.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/msg-img.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/msg-img.png new file mode 100644 index 00000000..3367256e Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/msg-img.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/oakland-logo.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/oakland-logo.png new file mode 100644 index 00000000..449d78b0 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/oakland-logo.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/photo-vedio.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/photo-vedio.png new file mode 100644 index 00000000..620c09b0 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/photo-vedio.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/photos_videos_hover.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/photos_videos_hover.png new file mode 100755 index 00000000..dac5a70c Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/photos_videos_hover.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/photosnvideos.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/photosnvideos.png new file mode 100644 index 00000000..8c0cf705 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/photosnvideos.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/pinterest.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/pinterest.png new file mode 100644 index 00000000..720e6a24 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/pinterest.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/plus.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/plus.png new file mode 100644 index 00000000..23d8ccac Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/plus.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/print-calender.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/print-calender.png new file mode 100644 index 00000000..fd7cbc0d Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/print-calender.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/progress-bar.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/progress-bar.png new file mode 100644 index 00000000..a3e27b34 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/progress-bar.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/progress-dash.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/progress-dash.png new file mode 100644 index 00000000..a8ccbcf9 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/progress-dash.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/progress.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/progress.png new file mode 100644 index 00000000..a1228456 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/progress.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/progress_hover.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/progress_hover.png new file mode 100755 index 00000000..462fcef1 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/progress_hover.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/review-dash.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/review-dash.png new file mode 100644 index 00000000..8ee481dc Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/review-dash.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/review.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/review.png new file mode 100644 index 00000000..168cbd64 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/review.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/reviewactive.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/reviewactive.png new file mode 100644 index 00000000..30b051c4 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/reviewactive.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/reviews.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/reviews.png new file mode 100644 index 00000000..55d1fc4a Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/reviews.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/reward-dash.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/reward-dash.png new file mode 100644 index 00000000..b9ee36e8 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/reward-dash.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/reward.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/reward.png new file mode 100644 index 00000000..58f7dd0e Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/reward.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/rewards.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/rewards.png new file mode 100644 index 00000000..4d8071f4 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/rewards.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/rewards_hover.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/rewards_hover.png new file mode 100755 index 00000000..cd09c6d4 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/rewards_hover.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/right-arrow.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/right-arrow.png new file mode 100644 index 00000000..27669362 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/right-arrow.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/right-blue-arrow.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/right-blue-arrow.png new file mode 100644 index 00000000..a20b3d8f Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/right-blue-arrow.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/smily-white.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/smily-white.png new file mode 100644 index 00000000..dd1e0f9a Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/smily-white.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/star.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/star.png new file mode 100644 index 00000000..397754e3 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/star.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/tumbir.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/tumbir.png new file mode 100644 index 00000000..a295c891 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/tumbir.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/twitter.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/twitter.png new file mode 100644 index 00000000..08166f56 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/twitter.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/view-album.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/view-album.png new file mode 100644 index 00000000..47da58ee Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/view-album.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/white-calender.png b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/white-calender.png new file mode 100644 index 00000000..80125fdb Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/libraryzurb/white-calender.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/originals/bookphoto.psd b/docroot/sites/all/themes/libraryzurb_teen/images/originals/bookphoto.psd new file mode 100644 index 00000000..93da8ca9 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/originals/bookphoto.psd differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/originals/iconsprite.psd b/docroot/sites/all/themes/libraryzurb_teen/images/originals/iconsprite.psd new file mode 100644 index 00000000..41d34c72 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/originals/iconsprite.psd differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/screenshot.png b/docroot/sites/all/themes/libraryzurb_teen/images/screenshot.png new file mode 100644 index 00000000..4ef58d6d Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/screenshot.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/images/user_icon.png b/docroot/sites/all/themes/libraryzurb_teen/images/user_icon.png new file mode 100644 index 00000000..62e94068 Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/images/user_icon.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/js/behavior/reveal.js b/docroot/sites/all/themes/libraryzurb_teen/js/behavior/reveal.js new file mode 100644 index 00000000..90757355 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/js/behavior/reveal.js @@ -0,0 +1,5 @@ +Drupal.behaviors.zurbReveal = { + attach: function(context, settings) { + jQuery('#status-messages.reveal-modal', context).foundation('reveal', 'open'); + } +} \ No newline at end of file diff --git a/docroot/sites/all/themes/libraryzurb_teen/js/foundation.min.js b/docroot/sites/all/themes/libraryzurb_teen/js/foundation.min.js new file mode 100644 index 00000000..6babfe72 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/js/foundation.min.js @@ -0,0 +1,15 @@ +/* + * Foundation Responsive Library + * http://foundation.zurb.com + * Copyright 2013, ZURB + * Free to use under the MIT license. + * http://www.opensource.org/licenses/mit-license.php +*/ +/*jslint unparam: true, browser: true, indent: 2 */ +// Accommodate running jQuery or Zepto in noConflict() mode by +// using an anonymous function to redefine the $ shorthand name. +// See http://docs.jquery.com/Using_jQuery_with_Other_Libraries +// and http://zeptojs.com/ +var libFuncName=null;if(typeof jQuery=="undefined"&&typeof Zepto=="undefined"&&typeof $=="function")libFuncName=$;else if(typeof jQuery=="function")libFuncName=jQuery;else{if(typeof Zepto!="function")throw new TypeError;libFuncName=Zepto}(function(e,t,n,r){"use strict";e("head").append(''),e("head").append(''),e("head").append(''),t.matchMedia=t.matchMedia||function(e,t){var n,r=e.documentElement,i=r.firstElementChild||r.firstChild,s=e.createElement("body"),o=e.createElement("div");return o.id="mq-test-1",o.style.cssText="position:absolute;top:-100em",s.style.background="none",s.appendChild(o),function(e){return o.innerHTML='­',r.insertBefore(s,i),n=o.offsetWidth===42,r.removeChild(s),{matches:n,media:e}}}(n),Array.prototype.filter||(Array.prototype.filter=function(e){if(this==null)throw new TypeError;var t=Object(this),n=t.length>>>0;if(typeof e!="function")return;var r=[],i=arguments[1];for(var s=0;s>>0;if(n===0)return-1;var r=0;arguments.length>1&&(r=Number(arguments[1]),r!=r?r=0:r!=0&&r!=Infinity&&r!=-Infinity&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i").appendTo("head")[0].sheet,init:function(t,n,r,i,s,o){var u,a=[t,r,i,s],f=[],o=o||!1;o&&(this.nc=o),this.rtl=/rtl/i.test(e("html").attr("dir")),this.scope=t||this.scope;if(n&&typeof n=="string"&&!/reflow/i.test(n)){if(/off/i.test(n))return this.off();u=n.split(" ");if(u.length>0)for(var l=u.length-1;l>=0;l--)f.push(this.init_lib(u[l],a))}else{/reflow/i.test(n)&&(a[1]="reflow");for(var c in this.libs)f.push(this.init_lib(c,a))}return typeof n=="function"&&a.unshift(n),this.response_obj(f,a)},response_obj:function(e,t){for(var n=0,r=t.length;n=0;r--)this.lib_methods.hasOwnProperty(n[r])&&(this.libs[e.name][n[r]]=this.lib_methods[n[r]])},random_str:function(e){var t="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split("");e||(e=Math.floor(Math.random()*t.length));var n="";for(var r=0;r=0;r--)i=s[r].split(":"),/true/i.test(i[1])&&(i[1]=!0),/false/i.test(i[1])&&(i[1]=!1),u(i[1])&&(i[1]=parseInt(i[1],10)),i.length===2&&i[0].length>0&&(n[a(i[0])]=a(i[1]));return n},delay:function(e,t){return setTimeout(e,t)},scrollTo:function(n,r,i){if(i<0)return;var s=r-e(t).scrollTop(),o=s/i*10;this.scrollToTimerCache=setTimeout(function(){isNaN(parseInt(o,10))||(t.scrollTo(0,e(t).scrollTop()+o),this.scrollTo(n,r,i-10))}.bind(this),10)},scrollLeft:function(e){if(!e.length)return;return"scrollLeft"in e[0]?e[0].scrollLeft:e[0].pageXOffset},empty:function(e){if(e.length&&e.length>0)return!1;if(e.length&&e.length===0)return!0;for(var t in e)if(hasOwnProperty.call(e,t))return!1;return!0},addCustomRule:function(e,t){if(t===r)Foundation.stylesheet.insertRule(e,Foundation.stylesheet.cssRules.length);else{var n=Foundation.media_queries[t];n!==r&&Foundation.stylesheet.insertRule("@media "+Foundation.media_queries[t]+"{ "+e+" }")}}},fix_outer:function(e){e.outerHeight=function(e,t){return typeof Zepto=="function"?e.height():typeof t!="undefined"?e.outerHeight(t):e.outerHeight()},e.outerWidth=function(e,t){return typeof Zepto=="function"?e.width():typeof t!="undefined"?e.outerWidth(t):e.outerWidth()}},error:function(e){return e.name+" "+e.message+"; "+e.more},off:function(){return e(this.scope).off(".fndtn"),e(t).off(".fndtn"),!0},zj:e},e.fn.foundation=function(){var e=Array.prototype.slice.call(arguments,0);return this.each(function(){return Foundation.init.apply(Foundation,[this].concat(e)),this})}})(libFuncName,this,this.document),function(e,t,n,r){"use strict";Foundation.libs.alerts={name:"alerts",version:"4.3.2",settings:{animation:"fadeOut",speed:300,callback:function(){}},init:function(t,n,r){return this.scope=t||this.scope,Foundation.inherit(this,"data_options"),typeof n=="object"&&e.extend(!0,this.settings,n),typeof n!="string"?(this.settings.init||this.events(),this.settings.init):this[n].call(this,r)},events:function(){var t=this;e(this.scope).on("click.fndtn.alerts","[data-alert] a.close",function(n){var r=e(this).closest("[data-alert]"),i=e.extend({},t.settings,t.data_options(r));n.preventDefault(),r[i.animation](i.speed,function(){e(this).remove(),i.callback()})}),this.settings.init=!0},off:function(){e(this.scope).off(".fndtn.alerts")},reflow:function(){}}}(Foundation.zj,this,this.document),function(e,t,n,r){"use strict";Foundation.libs.clearing={name:"clearing",version:"4.3.2",settings:{templates:{viewing:'×'},close_selectors:".clearing-close",init:!1,locked:!1},init:function(t,n,r){var i=this;return Foundation.inherit(this,"set_data get_data remove_data throttle data_options"),typeof n=="object"&&(r=e.extend(!0,this.settings,n)),typeof n!="string"?(e(this.scope).find("ul[data-clearing]").each(function(){var t=e(this),n=n||{},r=t.find("li"),s=i.get_data(t);!s&&r.length>0&&(n.$parent=t.parent(),i.set_data(t,e.extend({},i.settings,n,i.data_options(t))),i.assemble(t.find("li")),i.settings.init||i.events().swipe_events())}),this.settings.init):this[n].call(this,r)},events:function(){var n=this;return e(this.scope).on("click.fndtn.clearing","ul[data-clearing] li",function(t,r,i){var r=r||e(this),i=i||r,s=r.next("li"),o=n.get_data(r.parent()),u=e(t.target);t.preventDefault(),o||n.init(),i.hasClass("visible")&&r[0]===i[0]&&s.length>0&&n.is_open(r)&&(i=s,u=i.find("img")),n.open(u,r,i),n.update_paddles(i)}).on("click.fndtn.clearing",".clearing-main-next",function(e){this.nav(e,"next")}.bind(this)).on("click.fndtn.clearing",".clearing-main-prev",function(e){this.nav(e,"prev")}.bind(this)).on("click.fndtn.clearing",this.settings.close_selectors,function(e){Foundation.libs.clearing.close(e,this)}).on("keydown.fndtn.clearing",function(e){this.keydown(e)}.bind(this)),e(t).on("resize.fndtn.clearing",function(){this.resize()}.bind(this)),this.settings.init=!0,this},swipe_events:function(){var t=this;e(this.scope).on("touchstart.fndtn.clearing",".visible-img",function(t){t.touches||(t=t.originalEvent);var n={start_page_x:t.touches[0].pageX,start_page_y:t.touches[0].pageY,start_time:(new Date).getTime(),delta_x:0,is_scrolling:r};e(this).data("swipe-transition",n),t.stopPropagation()}).on("touchmove.fndtn.clearing",".visible-img",function(n){n.touches||(n=n.originalEvent);if(n.touches.length>1||n.scale&&n.scale!==1)return;var r=e(this).data("swipe-transition");typeof r=="undefined"&&(r={}),r.delta_x=n.touches[0].pageX-r.start_page_x,typeof r.is_scrolling=="undefined"&&(r.is_scrolling=!!(r.is_scrolling||Math.abs(r.delta_x)
        ');var r=e("#foundationClearingHolder"),i=this.get_data(n),s=n.detach(),o={grid:'",viewing:i.templates.viewing},u='
        '+o.viewing+o.grid+"
        ";return r.after(u).remove()},open:function(e,t,n){var r=n.closest(".clearing-assembled"),i=r.find("div").first(),s=i.find(".visible-img"),o=s.find("img").not(e);this.locked()||(o.attr("src",this.load(e)).css("visibility","hidden"),this.loaded(o,function(){o.css("visibility","visible"),r.addClass("clearing-blackout"),i.addClass("clearing-container"),s.show(),this.fix_height(n).caption(s.find(".clearing-caption"),e).center(o).shift(t,n,function(){n.siblings().removeClass("visible"),n.addClass("visible")})}.bind(this)))},close:function(t,n){t.preventDefault();var r=function(e){return/blackout/.test(e.selector)?e:e.closest(".clearing-blackout")}(e(n)),i,s;return n===t.target&&r&&(i=r.find("div").first(),s=i.find(".visible-img"),this.settings.prev_index=0,r.find("ul[data-clearing]").attr("style","").closest(".clearing-blackout").removeClass("clearing-blackout"),i.removeClass("clearing-container"),s.hide()),!1},is_open:function(e){return e.parent().prop("style").length>0},keydown:function(t){var n=e(".clearing-blackout").find("ul[data-clearing]");t.which===39&&this.go(n,"next"),t.which===37&&this.go(n,"prev"),t.which===27&&e("a.clearing-close").trigger("click")},nav:function(t,n){var r=e(".clearing-blackout").find("ul[data-clearing]");t.preventDefault(),this.go(r,n)},resize:function(){var t=e(".clearing-blackout .visible-img").find("img");t.length&&this.center(t)},fix_height:function(t){var n=t.parent().children(),r=this;return n.each(function(){var t=e(this),n=t.find("img");t.height()>r.outerHeight(n)&&t.addClass("fix-height")}).closest("ul").width(n.length*100+"%"),this},update_paddles:function(e){var t=e.closest(".carousel").siblings(".visible-img");e.next().length>0?t.find(".clearing-main-next").removeClass("disabled"):t.find(".clearing-main-next").addClass("disabled"),e.prev().length>0?t.find(".clearing-main-prev").removeClass("disabled"):t.find(".clearing-main-prev").addClass("disabled")},center:function(e){return this.rtl?e.css({marginRight:-(this.outerWidth(e)/2),marginTop:-(this.outerHeight(e)/2)}):e.css({marginLeft:-(this.outerWidth(e)/2),marginTop:-(this.outerHeight(e)/2)}),this},load:function(e){if(e[0].nodeName==="A")var t=e.attr("href");else var t=e.parent().attr("href");return this.preload(e),t?t:e.attr("src")},preload:function(e){this.img(e.closest("li").next()).img(e.closest("li").prev())},loaded:function(e,t){function n(){t()}function r(){this.one("load",n);if(/MSIE (\d+\.\d+);/.test(navigator.userAgent)){var e=this.attr("src"),t=e.match(/\?/)?"&":"?";t+="random="+(new Date).getTime(),this.attr("src",e+t)}}if(!e.attr("src")){n();return}e[0].complete||e[0].readyState===4?n():r.call(e)},img:function(e){if(e.length){var t=new Image,n=e.find("a");n.length?t.src=n.attr("href"):t.src=e.find("img").attr("src")}return this},caption:function(e,t){var n=t.data("caption");return n?e.html(n).show():e.text("").hide(),this},go:function(e,t){var n=e.find(".visible"),r=n[t]();r.length&&r.find("img").trigger("click",[n,r])},shift:function(e,t,n){var r=t.parent(),i=this.settings.prev_index||t.index(),s=this.direction(r,e,t),o=parseInt(r.css("left"),10),u=this.outerWidth(t),a;t.index()!==i&&!/skip/.test(s)?/left/.test(s)?(this.lock(),r.animate({left:o+u},300,this.unlock())):/right/.test(s)&&(this.lock(),r.animate({left:o-u},300,this.unlock())):/skip/.test(s)&&(a=t.index()-this.settings.up_count,this.lock(),a>0?r.animate({left:-(a*u)},300,this.unlock()):r.animate({left:0},300,this.unlock())),n()},direction:function(t,n,r){var i=t.find("li"),s=this.outerWidth(i)+this.outerWidth(i)/4,o=Math.floor(this.outerWidth(e(".clearing-container"))/s)-1,u=i.index(r),a;return this.settings.up_count=o,this.adjacent(this.settings.prev_index,u)?u>o&&u>this.settings.prev_index?a="right":u>o-1&&u<=this.settings.prev_index?a="left":a=!1:a="skip",this.settings.prev_index=u,a},adjacent:function(e,t){for(var n=t+1;n>=t-1;n--)if(n===e)return!0;return!1},lock:function(){this.settings.locked=!0},unlock:function(){this.settings.locked=!1},locked:function(){return this.settings.locked},outerHTML:function(e){return e.outerHTML||(new XMLSerializer).serializeToString(e)},off:function(){e(this.scope).off(".fndtn.clearing"),e(t).off(".fndtn.clearing"),this.remove_data(),this.settings.init=!1},reflow:function(){this.init()}}}(Foundation.zj,this,this.document),function(e,t,n){function i(e){return e}function s(e){return decodeURIComponent(e.replace(r," "))}var r=/\+/g,o=e.cookie=function(r,u,a){if(u!==n){a=e.extend({},o.defaults,a),u===null&&(a.expires=-1);if(typeof a.expires=="number"){var f=a.expires,l=a.expires=new Date;l.setDate(l.getDate()+f)}return u=o.json?JSON.stringify(u):String(u),t.cookie=[encodeURIComponent(r),"=",o.raw?u:encodeURIComponent(u),a.expires?"; expires="+a.expires.toUTCString():"",a.path?"; path="+a.path:"",a.domain?"; domain="+a.domain:"",a.secure?"; secure":""].join("")}var c=o.raw?i:s,h=t.cookie.split("; ");for(var p=0,d=h.length;p0&&(e(t.target).is("[data-dropdown-content]")||e.contains(n.first()[0],t.target))){t.stopPropagation();return}r.close.call(r,e("[data-dropdown-content]"))}),e(t).on("resize.fndtn.dropdown",r.throttle(function(){r.resize.call(r)},50)).trigger("resize"),this.settings.init=!0},close:function(t){var n=this;t.each(function(){e(this).hasClass(n.settings.activeClass)&&(e(this).css(Foundation.rtl?"right":"left","-99999px").removeClass(n.settings.activeClass),e(this).trigger("closed"))})},open:function(e,t){this.css(e.addClass(this.settings.activeClass),t),e.trigger("opened")},toggle:function(t){var n=e("#"+t.data("dropdown"));if(n.length===0)return;this.close.call(this,e("[data-dropdown-content]").not(n)),n.hasClass(this.settings.activeClass)?this.close.call(this,n):(this.close.call(this,e("[data-dropdown-content]")),this.open.call(this,n,t))},resize:function(){var t=e("[data-dropdown-content].open"),n=e("[data-dropdown='"+t.attr("id")+"']");t.length&&n.length&&this.css(t,n)},css:function(n,r){var i=n.offsetParent(),s=r.offset();s.top-=i.offset().top,s.left-=i.offset().left;if(this.small())n.css({position:"absolute",width:"95%","max-width":"none",top:s.top+this.outerHeight(r)}),n.css(Foundation.rtl?"right":"left","2.5%");else{if(!Foundation.rtl&&e(t).width()>this.outerWidth(n)+r.offset().left&&!this.data_options(r).align_right){var o=s.left;n.hasClass("right")&&n.removeClass("right")}else{n.hasClass("right")||n.addClass("right");var o=s.left-(this.outerWidth(n)-this.outerWidth(r))}n.attr("style","").css({position:"absolute",top:s.top+this.outerHeight(r),left:o})}return n},small:function(){return e(t).width()<768||e("html").hasClass("lt-ie9")},off:function(){e(this.scope).off(".fndtn.dropdown"),e("html, body").off(".fndtn.dropdown"),e(t).off(".fndtn.dropdown"),e("[data-dropdown-content]").off(".fndtn.dropdown"),this.settings.init=!1},reflow:function(){}}}(Foundation.zj,this,this.document),function(e,t,n,r){"use strict";Foundation.libs.forms={name:"forms",version:"4.3.2",cache:{},settings:{disable_class:"no-custom",last_combo:null},init:function(t,n,r){return typeof n=="object"&&e.extend(!0,this.settings,n),typeof n!="string"?(this.settings.init||this.events(),this.assemble(),this.settings.init):this[n].call(this,r)},assemble:function(){var t=this;e('form.custom input[type="radio"],[type="checkbox"]',e(this.scope)).not('[data-customforms="disabled"]').not("."+this.settings.disable_class).each(function(e,n){t.set_custom_markup(n)}).change(function(){t.set_custom_markup(this)}),e("form.custom select",e(this.scope)).not('[data-customforms="disabled"]').not("."+this.settings.disable_class).not("[multiple=multiple]").each(this.append_custom_select)},events:function(){var r=this;e(this.scope).on("click.fndtn.forms","form.custom span.custom.checkbox",function(t){t.preventDefault(),t.stopPropagation(),r.toggle_checkbox(e(this))}).on("click.fndtn.forms","form.custom span.custom.radio",function(t){t.preventDefault(),t.stopPropagation(),r.toggle_radio(e(this))}).on("change.fndtn.forms","form.custom select",function(t,n){if(e(this).is('[data-customforms="disabled"]'))return;r.refresh_custom_select(e(this),n)}).on("click.fndtn.forms","form.custom label",function(t){if(e(t.target).is("label")){var n=e("#"+r.escape(e(this).attr("for"))).not('[data-customforms="disabled"]'),i,s;n.length!==0&&(n.attr("type")==="checkbox"?(t.preventDefault(),i=e(this).find("span.custom.checkbox"),i.length===0&&(i=n.add(this).siblings("span.custom.checkbox").first()),r.toggle_checkbox(i)):n.attr("type")==="radio"&&(t.preventDefault(),s=e(this).find("span.custom.radio"),s.length===0&&(s=n.add(this).siblings("span.custom.radio").first()),r.toggle_radio(s)))}}).on("mousedown.fndtn.forms","form.custom div.custom.dropdown",function(){return!1}).on("click.fndtn.forms","form.custom div.custom.dropdown a.current, form.custom div.custom.dropdown a.selector",function(t){var n=e(this),s=n.closest("div.custom.dropdown"),o=i(s,"select");s.hasClass("open")||e(r.scope).trigger("click"),t.preventDefault();if(!1===o.is(":disabled"))return s.toggleClass("open"),s.hasClass("open")?e(r.scope).on("click.fndtn.forms.customdropdown",function(){s.removeClass("open"),e(r.scope).off(".fndtn.forms.customdropdown")}):e(r.scope).on(".fndtn.forms.customdropdown"),!1}).on("click.fndtn.forms touchend.fndtn.forms","form.custom div.custom.dropdown li",function(t){var r=e(this),s=r.closest("div.custom.dropdown"),o=i(s,"select"),u=0;t.preventDefault(),t.stopPropagation();if(!e(this).hasClass("disabled")){e("div.dropdown").not(s).removeClass("open");var a=r.closest("ul").find("li.selected");a.removeClass("selected"),r.addClass("selected"),s.removeClass("open").find("a.current").text(r.text()),r.closest("ul").find("li").each(function(e){r[0]===this&&(u=e)}),o[0].selectedIndex=u,o.data("prevalue",a.html());if(typeof n.createEvent!="undefined"){var f=n.createEvent("HTMLEvents");f.initEvent("change",!0,!0),o[0].dispatchEvent(f)}else o[0].fireEvent("onchange")}}),e(t).on("keydown",function(t){var r=n.activeElement,s=Foundation.libs.forms,o=e(".custom.dropdown"),u=i(o,"select"),a=e("input,select,textarea,button");if(o.length>0&&o.hasClass("open")){t.preventDefault(),t.which===9&&(e(a[e(a).index(u)+1]).focus(),o.removeClass("open")),t.which===13&&o.find("li.selected").trigger("click"),t.which===27&&o.removeClass("open");if(t.which>=65&&t.which<=90){var f=s.go_to(o,t.which),l=o.find("li.selected");f&&(l.removeClass("selected"),s.scrollTo(f.addClass("selected"),300))}if(t.which===38){var l=o.find("li.selected"),c=l.prev(":not(.disabled)");c.length>0&&(c.parent()[0].scrollTop=c.parent().scrollTop()-s.outerHeight(c),l.removeClass("selected"),c.addClass("selected"))}else if(t.which===40){var l=o.find("li.selected"),f=l.next(":not(.disabled)");f.length>0&&(f.parent()[0].scrollTop=f.parent().scrollTop()+s.outerHeight(f),l.removeClass("selected"),f.addClass("selected"))}}}),e(t).on("keyup",function(t){var r=n.activeElement,i=e(".custom.dropdown");r===i.find(".current")[0]&&i.find(".selector").focus().click()}),this.settings.init=!0},go_to:function(e,t){var n=e.find("li"),r=n.length;if(r>0)for(var i=0;i').insertAfter(n)),i.toggleClass("checked",n.is(":checked")),i.toggleClass("disabled",n.is(":disabled"))},append_custom_select:function(t,n){var r=Foundation.libs.forms,i=e(n),s=i.next("div.custom.dropdown"),o=s.find("ul"),u=s.find(".current"),a=s.find(".selector"),f=i.find("option"),l=f.filter(":selected"),c=i.attr("class")?i.attr("class").split(" "):[],h=0,p="",d,v=!1;if(s.length===0){var m=i.hasClass("small")?"small":i.hasClass("medium")?"medium":i.hasClass("large")?"large":i.hasClass("expand")?"expand":"";s=e('
          '),a=s.find(".selector"),o=s.find("ul"),p=f.map(function(){var t=e(this).attr("class")?e(this).attr("class"):"";return"
        • "+e(this).html()+"
        • "}).get().join(""),o.append(p),v=s.prepend(''+(l.html()||"")+"").find(".current"),i.after(s).addClass("hidden-field")}else p=f.map(function(){return"
        • "+e(this).html()+"
        • "}).get().join(""),o.html("").append(p);r.assign_id(i,s),s.toggleClass("disabled",i.is(":disabled")),d=o.find("li"),r.cache[s.data("id")]=d.length,f.each(function(t){this.selected&&(d.eq(t).addClass("selected"),v&&v.html(e(this).html())),e(this).is(":disabled")&&d.eq(t).addClass("disabled")});if(!s.is(".small, .medium, .large, .expand")){s.addClass("open");var r=Foundation.libs.forms;r.hidden_fix.adjust(o),h=r.outerWidth(d)>h?r.outerWidth(d):h,Foundation.libs.forms.hidden_fix.reset(),s.removeClass("open")}},assign_id:function(e,t){var n=[+(new Date),Foundation.random_str(5)].join("-");e.attr("data-id",n),t.attr("data-id",n)},refresh_custom_select:function(t,n){var r=this,i=0,s=t.next(),o=t.find("option"),u=s.find("ul"),a=s.find("li");if(o.length!==this.cache[s.data("id")]||n){u.html("");var f="";o.each(function(){var t=e(this),n=t.html(),r=this.selected;f+='
        • '+n+"
        • ",r&&s.find(".current").html(n)}),u.html(f),s.removeAttr("style"),u.removeAttr("style"),s.find("li").each(function(){s.addClass("open"),r.outerWidth(e(this))>i&&(i=r.outerWidth(e(this))),s.removeClass("open")}),a=s.find("li"),this.cache[s.data("id")]=a.length}},refresh_custom_selection:function(t){var n=e("option:selected",t).text();e("a.current",t.next()).text(n)},toggle_checkbox:function(e){var t=e.prev(),n=t[0];!1===t.is(":disabled")&&(n.checked=n.checked?!1:!0,e.toggleClass("checked"),t.trigger("change"))},toggle_radio:function(e){var t=e.prev(),n=t.closest("form.custom"),r=t[0];!1===t.is(":disabled")&&(n.find('input[type="radio"][name="'+this.escape(t.attr("name"))+'"]').next().not(e).removeClass("checked"),e.hasClass("checked")||e.toggleClass("checked"),r.checked=e.hasClass("checked"),t.trigger("change"))},escape:function(e){return e?e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"):""},hidden_fix:{tmp:[],hidden:null,adjust:function(t){var n=this;n.hidden=t.parents(),n.hidden=n.hidden.add(t).filter(":hidden"),n.hidden.each(function(){var t=e(this);n.tmp.push(t.attr("style")),t.css({visibility:"hidden",display:"block"})})},reset:function(){var t=this;t.hidden.each(function(n){var i=e(this),s=t.tmp[n];s===r?i.removeAttr("style"):i.attr("style",s)}),t.tmp=[],t.hidden=null}},off:function(){e(this.scope).off(".fndtn.forms")},reflow:function(){}};var i=function(t,n){var t=t.prev();while(t.length){if(t.is(n))return t;t=t.prev()}return e()}}(Foundation.zj,this,this.document),function(e,t,n,r){"use strict";var i=i||!1;Foundation.libs.joyride={name:"joyride",version:"4.3.2",defaults:{expose:!1,modal:!1,tipLocation:"bottom",nubPosition:"auto",scrollSpeed:300,timer:0,startTimerOnClick:!0,startOffset:0,nextButton:!0,tipAnimation:"fade",pauseAfter:[],exposed:[],tipAnimationFadeSpeed:300,cookieMonster:!1,cookieName:"joyride",cookieDomain:!1,cookieExpires:365,tipContainer:"body",postRideCallback:function(){},postStepCallback:function(){},preStepCallback:function(){},preRideCallback:function(){},postExposeCallback:function(){},template:{link:'×',timer:'
          ',tip:'
          ',wrapper:'
          ',button:'',modal:'
          ',expose:'
          ',exposeCover:'
          '},exposeAddClass:""},settings:{},init:function(t,n,r){return this.scope=t||this.scope,Foundation.inherit(this,"throttle data_options scrollTo scrollLeft delay"),typeof n=="object"?e.extend(!0,this.settings,this.defaults,n):e.extend(!0,this.settings,this.defaults,r),typeof n!="string"?(this.settings.init||this.events(),this.settings.init):this[n].call(this,r)},events:function(){var n=this;e(this.scope).on("click.joyride",".joyride-next-tip, .joyride-modal-bg",function(e){e.preventDefault(),this.settings.$li.next().length<1?this.end():this.settings.timer>0?(clearTimeout(this.settings.automate),this.hide(),this.show(),this.startTimer()):(this.hide(),this.show())}.bind(this)).on("click.joyride",".joyride-close-tip",function(e){e.preventDefault(),this.end()}.bind(this)),e(t).on("resize.fndtn.joyride",n.throttle(function(){if(e("[data-joyride]").length>0&&n.settings.$next_tip){if(n.settings.exposed.length>0){var t=e(n.settings.exposed);t.each(function(){var t=e(this);n.un_expose(t),n.expose(t)})}n.is_phone()?n.pos_phone():n.pos_default(!1,!0)}},100)),this.settings.init=!0},start:function(){var t=this,n=e(this.scope).find("[data-joyride]"),r=["timer","scrollSpeed","startOffset","tipAnimationFadeSpeed","cookieExpires"],i=r.length;this.settings.init||this.events(),this.settings.$content_el=n,this.settings.$body=e(this.settings.tipContainer),this.settings.body_offset=e(this.settings.tipContainer).position(),this.settings.$tip_content=this.settings.$content_el.find("> li"),this.settings.paused=!1,this.settings.attempts=0,this.settings.tipLocationPatterns={top:["bottom"],bottom:[],left:["right","top","bottom"],right:["left","top","bottom"]},typeof e.cookie!="function"&&(this.settings.cookieMonster=!1);if(!this.settings.cookieMonster||this.settings.cookieMonster&&e.cookie(this.settings.cookieName)===null)this.settings.$tip_content.each(function(n){var s=e(this);e.extend(!0,t.settings,t.data_options(s));for(var o=i-1;o>=0;o--)t.settings[r[o]]=parseInt(t.settings[r[o]],10);t.create({$li:s,index:n})}),!this.settings.startTimerOnClick&&this.settings.timer>0?(this.show("init"),this.startTimer()):this.show("init")},resume:function(){this.set_li(),this.show()},tip_template:function(t){var n,r;return t.tip_class=t.tip_class||"",n=e(this.settings.template.tip).addClass(t.tip_class),r=e.trim(e(t.li).html())+this.button_text(t.button_text)+this.settings.template.link+this.timer_instance(t.index),n.append(e(this.settings.template.wrapper)),n.first().attr("data-index",t.index),e(".joyride-content-wrapper",n).append(r),n[0]},timer_instance:function(t){var n;return t===0&&this.settings.startTimerOnClick&&this.settings.timer>0||this.settings.timer===0?n="":n=this.outerHTML(e(this.settings.template.timer)[0]),n},button_text:function(t){return this.settings.nextButton?(t=e.trim(t)||"Next",t=this.outerHTML(e(this.settings.template.button).append(t)[0])):t="",t},create:function(t){var n=t.$li.attr("data-button")||t.$li.attr("data-text"),r=t.$li.attr("class"),i=e(this.tip_template({tip_class:r,index:t.index,button_text:n,li:t.$li}));e(this.settings.tipContainer).append(i)},show:function(t){var n=null;this.settings.$li===r||e.inArray(this.settings.$li.index(),this.settings.pauseAfter)===-1?(this.settings.paused?this.settings.paused=!1:this.set_li(t),this.settings.attempts=0,this.settings.$li.length&&this.settings.$target.length>0?(t&&(this.settings.preRideCallback(this.settings.$li.index(),this.settings.$next_tip),this.settings.modal&&this.show_modal()),this.settings.preStepCallback(this.settings.$li.index(),this.settings.$next_tip),this.settings.modal&&this.settings.expose&&this.expose(),this.settings.tipSettings=e.extend(this.settings,this.data_options(this.settings.$li)),this.settings.timer=parseInt(this.settings.timer,10),this.settings.tipSettings.tipLocationPattern=this.settings.tipLocationPatterns[this.settings.tipSettings.tipLocation],/body/i.test(this.settings.$target.selector)||this.scroll_to(),this.is_phone()?this.pos_phone(!0):this.pos_default(!0),n=this.settings.$next_tip.find(".joyride-timer-indicator"),/pop/i.test(this.settings.tipAnimation)?(n.width(0),this.settings.timer>0?(this.settings.$next_tip.show(),this.delay(function(){n.animate({width:n.parent().width()},this.settings.timer,"linear")}.bind(this),this.settings.tipAnimationFadeSpeed)):this.settings.$next_tip.show()):/fade/i.test(this.settings.tipAnimation)&&(n.width(0),this.settings.timer>0?(this.settings.$next_tip.fadeIn(this.settings.tipAnimationFadeSpeed).show(),this.delay(function(){n.animate({width:n.parent().width()},this.settings.timer,"linear")}.bind(this),this.settings +.tipAnimationFadeSpeed)):this.settings.$next_tip.fadeIn(this.settings.tipAnimationFadeSpeed)),this.settings.$current_tip=this.settings.$next_tip):this.settings.$li&&this.settings.$target.length<1?this.show():this.end()):this.settings.paused=!0},is_phone:function(){return i?i.mq("only screen and (max-width: 767px)")||e(".lt-ie9").length>0:e(t).width()<767},hide:function(){this.settings.modal&&this.settings.expose&&this.un_expose(),this.settings.modal||e(".joyride-modal-bg").hide(),this.settings.$current_tip.css("visibility","hidden"),setTimeout(e.proxy(function(){this.hide(),this.css("visibility","visible")},this.settings.$current_tip),0),this.settings.postStepCallback(this.settings.$li.index(),this.settings.$current_tip)},set_li:function(e){e?(this.settings.$li=this.settings.$tip_content.eq(this.settings.startOffset),this.set_next_tip(),this.settings.$current_tip=this.settings.$next_tip):(this.settings.$li=this.settings.$li.next(),this.set_next_tip()),this.set_target()},set_next_tip:function(){this.settings.$next_tip=e(".joyride-tip-guide[data-index='"+this.settings.$li.index()+"']"),this.settings.$next_tip.data("closed","")},set_target:function(){var t=this.settings.$li.attr("data-class"),r=this.settings.$li.attr("data-id"),i=function(){return r?e(n.getElementById(r)):t?e("."+t).first():e("body")};this.settings.$target=i()},scroll_to:function(){var n,r;n=e(t).height()/2,r=Math.ceil(this.settings.$target.offset().top-n+this.outerHeight(this.settings.$next_tip)),r>0&&this.scrollTo(e("html, body"),r,this.settings.scrollSpeed)},paused:function(){return e.inArray(this.settings.$li.index()+1,this.settings.pauseAfter)===-1},restart:function(){this.hide(),this.settings.$li=r,this.show("init")},pos_default:function(n,r){var i=Math.ceil(e(t).height()/2),s=this.settings.$next_tip.offset(),o=this.settings.$next_tip.find(".joyride-nub"),u=Math.ceil(this.outerWidth(o)/2),a=Math.ceil(this.outerHeight(o)/2),f=n||!1;f&&(this.settings.$next_tip.css("visibility","hidden"),this.settings.$next_tip.show()),typeof r=="undefined"&&(r=!1);if(!/body/i.test(this.settings.$target.selector)){if(this.bottom()){var l=this.settings.$target.offset().left;Foundation.rtl&&(l=this.settings.$target.offset().width-this.settings.$next_tip.width()+l),this.settings.$next_tip.css({top:this.settings.$target.offset().top+a+this.outerHeight(this.settings.$target),left:l}),this.nub_position(o,this.settings.tipSettings.nubPosition,"top")}else if(this.top()){var l=this.settings.$target.offset().left;Foundation.rtl&&(l=this.settings.$target.offset().width-this.settings.$next_tip.width()+l),this.settings.$next_tip.css({top:this.settings.$target.offset().top-this.outerHeight(this.settings.$next_tip)-a,left:l}),this.nub_position(o,this.settings.tipSettings.nubPosition,"bottom")}else this.right()?(this.settings.$next_tip.css({top:this.settings.$target.offset().top,left:this.outerWidth(this.settings.$target)+this.settings.$target.offset().left+u}),this.nub_position(o,this.settings.tipSettings.nubPosition,"left")):this.left()&&(this.settings.$next_tip.css({top:this.settings.$target.offset().top,left:this.settings.$target.offset().left-this.outerWidth(this.settings.$next_tip)-u}),this.nub_position(o,this.settings.tipSettings.nubPosition,"right"));!this.visible(this.corners(this.settings.$next_tip))&&this.settings.attempts0&&arguments[0]instanceof e)i=arguments[0];else{if(!this.settings.$target||!!/body/i.test(this.settings.$target.selector))return!1;i=this.settings.$target}if(i.length<1)return t.console&&console.error("element not valid",i),!1;n=e(this.settings.template.expose),this.settings.$body.append(n),n.css({top:i.offset().top,left:i.offset().left,width:this.outerWidth(i,!0),height:this.outerHeight(i,!0)}),r=e(this.settings.template.exposeCover),s={zIndex:i.css("z-index"),position:i.css("position")},o=i.attr("class")==null?"":i.attr("class"),i.css("z-index",parseInt(n.css("z-index"))+1),s.position=="static"&&i.css("position","relative"),i.data("expose-css",s),i.data("orig-class",o),i.attr("class",o+" "+this.settings.exposeAddClass),r.css({top:i.offset().top,left:i.offset().left,width:this.outerWidth(i,!0),height:this.outerHeight(i,!0)}),this.settings.$body.append(r),n.addClass(u),r.addClass(u),i.data("expose",u),this.settings.postExposeCallback(this.settings.$li.index(),this.settings.$next_tip,i),this.add_exposed(i)},un_expose:function(){var n,r,i,s,o,u=!1;if(arguments.length>0&&arguments[0]instanceof e)r=arguments[0];else{if(!this.settings.$target||!!/body/i.test(this.settings.$target.selector))return!1;r=this.settings.$target}if(r.length<1)return t.console&&console.error("element not valid",r),!1;n=r.data("expose"),i=e("."+n),arguments.length>1&&(u=arguments[1]),u===!0?e(".joyride-expose-wrapper,.joyride-expose-cover").remove():i.remove(),s=r.data("expose-css"),s.zIndex=="auto"?r.css("z-index",""):r.css("z-index",s.zIndex),s.position!=r.css("position")&&(s.position=="static"?r.css("position",""):r.css("position",s.position)),o=r.data("orig-class"),r.attr("class",o),r.removeData("orig-classes"),r.removeData("expose"),r.removeData("expose-z-index"),this.remove_exposed(r)},add_exposed:function(t){this.settings.exposed=this.settings.exposed||[],t instanceof e||typeof t=="object"?this.settings.exposed.push(t[0]):typeof t=="string"&&this.settings.exposed.push(t)},remove_exposed:function(t){var n,r;t instanceof e?n=t[0]:typeof t=="string"&&(n=t),this.settings.exposed=this.settings.exposed||[],r=this.settings.exposed.length;for(var i=0;ia&&(a=u),[n.offset().topn.offset().left]},visible:function(e){var t=e.length;while(t--)if(e[t])return!1;return!0},nub_position:function(e,t,n){t==="auto"?e.addClass(n):e.addClass(t)},startTimer:function(){this.settings.$li.length?this.settings.automate=setTimeout(function(){this.hide(),this.show(),this.startTimer()}.bind(this),this.settings.timer):clearTimeout(this.settings.automate)},end:function(){this.settings.cookieMonster&&e.cookie(this.settings.cookieName,"ridden",{expires:this.settings.cookieExpires,domain:this.settings.cookieDomain}),this.settings.timer>0&&clearTimeout(this.settings.automate),this.settings.modal&&this.settings.expose&&this.un_expose(),this.settings.$next_tip.data("closed",!0),e(".joyride-modal-bg").hide(),this.settings.$current_tip.hide(),this.settings.postStepCallback(this.settings.$li.index(),this.settings.$current_tip),this.settings.postRideCallback(this.settings.$li.index(),this.settings.$current_tip),e(".joyride-tip-guide").remove()},outerHTML:function(e){return e.outerHTML||(new XMLSerializer).serializeToString(e)},off:function(){e(this.scope).off(".joyride"),e(t).off(".joyride"),e(".joyride-close-tip, .joyride-next-tip, .joyride-modal-bg").off(".joyride"),e(".joyride-tip-guide, .joyride-modal-bg").remove(),clearTimeout(this.settings.automate),this.settings={}},reflow:function(){}}}(Foundation.zj,this,this.document),function(e,t,n,r){"use strict";Foundation.libs.magellan={name:"magellan",version:"4.3.2",settings:{activeClass:"active",threshold:0},init:function(t,n,r){return this.scope=t||this.scope,Foundation.inherit(this,"data_options"),typeof n=="object"&&e.extend(!0,this.settings,n),typeof n!="string"?(this.settings.init||(this.fixed_magellan=e("[data-magellan-expedition]"),this.set_threshold(),this.last_destination=e("[data-magellan-destination]").last(),this.events()),this.settings.init):this[n].call(this,r)},events:function(){var n=this;e(this.scope).on("arrival.fndtn.magellan","[data-magellan-arrival]",function(t){var r=e(this),i=r.closest("[data-magellan-expedition]"),s=i.attr("data-magellan-active-class")||n.settings.activeClass;r.closest("[data-magellan-expedition]").find("[data-magellan-arrival]").not(r).removeClass(s),r.addClass(s)}),this.fixed_magellan.on("update-position.fndtn.magellan",function(){var t=e(this)}).trigger("update-position"),e(t).on("resize.fndtn.magellan",function(){this.fixed_magellan.trigger("update-position")}.bind(this)).on("scroll.fndtn.magellan",function(){var r=e(t).scrollTop();n.fixed_magellan.each(function(){var t=e(this);typeof t.data("magellan-top-offset")=="undefined"&&t.data("magellan-top-offset",t.offset().top),typeof t.data("magellan-fixed-position")=="undefined"&&t.data("magellan-fixed-position",!1);var i=r+n.settings.threshold>t.data("magellan-top-offset"),s=t.attr("data-magellan-top-offset");t.data("magellan-fixed-position")!=i&&(t.data("magellan-fixed-position",i),i?(t.addClass("fixed"),t.css({position:"fixed",top:0})):(t.removeClass("fixed"),t.css({position:"",top:""})),i&&typeof s!="undefined"&&s!=0&&t.css({position:"fixed",top:s+"px"}))})}),this.last_destination.length>0&&e(t).on("scroll.fndtn.magellan",function(r){var i=e(t).scrollTop(),s=i+e(t).height(),o=Math.ceil(n.last_destination.offset().top);e("[data-magellan-destination]").each(function(){var t=e(this),r=t.attr("data-magellan-destination"),u=t.offset().top-i;u<=n.settings.threshold&&e("[data-magellan-arrival='"+r+"']").trigger("arrival"),s>=e(n.scope).height()&&o>i&&o0?this.outerHeight(this.fixed_magellan,!0):0)},off:function(){e(this.scope).off(".fndtn.magellan"),e(t).off(".fndtn.magellan")},reflow:function(){}}}(Foundation.zj,this,this.document),function(e,t,n,r){"use strict";var i=function(){},s=function(i,s){if(i.hasClass(s.slides_container_class))return this;var f=this,l,c=i,h,p,d,v=0,m,g,y=!1,b=!1;c.children().first().addClass(s.active_slide_class),f.update_slide_number=function(t){s.slide_number&&(h.find("span:first").text(parseInt(t)+1),h.find("span:last").text(c.children().length)),s.bullets&&(p.children().removeClass(s.bullets_active_class),e(p.children().get(t)).addClass(s.bullets_active_class))},f.update_active_link=function(t){var n=e('a[data-orbit-link="'+c.children().eq(t).attr("data-orbit-slide")+'"]');n.parents("ul").find("[data-orbit-link]").removeClass(s.bullets_active_class),n.addClass(s.bullets_active_class)},f.build_markup=function(){c.wrap('
          '),l=c.parent(),c.addClass(s.slides_container_class),s.navigation_arrows&&(l.append(e('').addClass(s.prev_class)),l.append(e('').addClass(s.next_class))),s.timer&&(d=e("
          ").addClass(s.timer_container_class),d.append(""),d.append(e("
          ").addClass(s.timer_progress_class)),d.addClass(s.timer_paused_class),l.append(d)),s.slide_number&&(h=e("
          ").addClass(s.slide_number_class),h.append(" "+s.slide_number_text+" "),l.append(h)),s.bullets&&(p=e("
            ").addClass(s.bullets_container_class),l.append(p),c.children().each(function(t,n){var r=e("
          1. ").attr("data-orbit-slide",t);p.append(r)})),s.stack_on_small&&l.addClass(s.stack_on_small_class),f.update_slide_number(0),f.update_active_link(0)},f._goto=function(t,n){if(t===v)return!1;typeof g=="object"&&g.restart();var r=c.children(),i="next";y=!0,t=r.length?t=0:t<0&&(t=r.length-1);var o=e(r.get(v)),u=e(r.get(t));o.css("zIndex",2),o.removeClass(s.active_slide_class),u.css("zIndex",4).addClass(s.active_slide_class),c.trigger("orbit:before-slide-change"),s.before_slide_change(),f.update_active_link(t);var a=function(){var e=function(){v=t,y=!1,n===!0&&(g=f.create_timer(),g.start()),f.update_slide_number(v),c.trigger("orbit:after-slide-change",[{slide_number:v,total_slides:r.length}]),s.after_slide_change(v,r.length)};c.height()!=u.height()&&s.variable_height?c.animate({height:u.height()},250,"linear",e):e()};if(r.length===1)return a(),!1;var l=function(){i==="next"&&m.next(o,u,a),i==="prev"&&m.prev(o,u,a)};u.height()>c.height()&&s.variable_height?c.animate({height:u.height()},250,"linear",l):l()},f.next=function(e){e.stopImmediatePropagation(),e.preventDefault(),f._goto(v+1)},f.prev=function(e){e.stopImmediatePropagation(),e.preventDefault(),f._goto(v-1)},f.link_custom=function(t){t.preventDefault();var n=e(this).attr("data-orbit-link");if(typeof n=="string"&&(n=e.trim(n))!=""){var r=l.find("[data-orbit-slide="+n+"]");r.index()!=-1&&f._goto(r.index())}},f.link_bullet=function(t){var n=e(this).attr("data-orbit-slide");typeof n=="string"&&(n=e.trim(n))!=""&&f._goto(parseInt(n))},f.timer_callback=function(){f._goto(v+1,!0)},f.compute_dimensions=function(){var t=e(c.children().get(v)),n=t.height();s.variable_height||c.children().each(function(){e(this).height()>n&&(n=e(this).height())}),c.height(n)},f.create_timer=function(){var e=new o(l.find("."+s.timer_container_class),s,f.timer_callback);return e},f.stop_timer=function(){typeof g=="object"&&g.stop()},f.toggle_timer=function(){var e=l.find("."+s.timer_container_class);e.hasClass(s.timer_paused_class)?(typeof g=="undefined"&&(g=f.create_timer()),g.start()):typeof g=="object"&&g.stop()},f.init=function(){f.build_markup(),s.timer&&(g=f.create_timer(),g.start()),m=new a(s,c),s.animation==="slide"&&(m=new u(s,c)),l.on("click","."+s.next_class,f.next),l.on("click","."+s.prev_class,f.prev),l.on("click","[data-orbit-slide]",f.link_bullet),l.on("click",f.toggle_timer),s.swipe&&l.on("touchstart.fndtn.orbit",function(e){e.touches||(e=e.originalEvent);var t={start_page_x:e.touches[0].pageX,start_page_y:e.touches[0].pageY,start_time:(new Date).getTime(),delta_x:0,is_scrolling:r};l.data("swipe-transition",t),e.stopPropagation()}).on("touchmove.fndtn.orbit",function(e){e.touches||(e=e.originalEvent);if(e.touches.length>1||e.scale&&e.scale!==1)return;var t=l.data("swipe-transition");typeof t=="undefined"&&(t={}),t.delta_x=e.touches[0].pageX-t.start_page_x,typeof t.is_scrolling=="undefined"&&(t.is_scrolling=!!(t.is_scrolling||Math.abs(t.delta_x)0&&(this.locked=!0,t.trigger("close"),this.toggle_bg(),this.hide(n,this.settings.css.close))},close_targets:function(){var e="."+this.settings.dismissModalClass;return this.settings.closeOnBackgroundClick?e+", ."+this.settings.bgClass:e},toggle_bg:function(){e("."+this.settings.bgClass).length===0&&(this.settings.bg=e("
            ",{"class":this.settings.bgClass}).appendTo("body")),this.settings.bg.filter(":visible").length>0?this.hide(this.settings.bg):this.show(this.settings.bg)},show:function(n,r){if(r){if(n.parent("body").length===0){var i=n.wrap('
            ').parent();n.on("closed.fndtn.reveal.wrapped",function(){n.detach().appendTo(i),n.unwrap().unbind("closed.fndtn.reveal.wrapped")}),n.detach().appendTo("body")}if(/pop/i.test(this.settings.animation)){r.top=e(t).scrollTop()-n.data("offset")+"px";var s={top:e(t).scrollTop()+n.data("css-top")+"px",opacity:1};return this.delay(function(){return n.css(r).animate(s,this.settings.animationSpeed,"linear",function(){this.locked=!1,n.trigger("opened")}.bind(this)).addClass("open")}.bind(this),this.settings.animationSpeed/2)}if(/fade/i.test(this.settings.animation)){var s={opacity:1};return this.delay(function(){return n.css(r).animate(s,this.settings.animationSpeed,"linear",function(){this.locked=!1,n.trigger("opened")}.bind(this)).addClass("open")}.bind(this),this.settings.animationSpeed/2)}return n.css(r).show().css({opacity:1}).addClass("open").trigger("opened")}return/fade/i.test(this.settings.animation)?n.fadeIn(this.settings.animationSpeed/2):n.show()},hide:function(n,r){if(r){if(/pop/i.test(this.settings.animation)){var i={top:-e(t).scrollTop()-n.data("offset")+"px",opacity:0};return this.delay(function(){return n.animate(i,this.settings.animationSpeed,"linear",function(){this.locked=!1,n.css(r).trigger("closed")}.bind(this)).removeClass("open")}.bind(this),this.settings.animationSpeed/2)}if(/fade/i.test(this.settings.animation)){var i={opacity:0};return this.delay(function(){return n.animate(i,this.settings.animationSpeed,"linear",function(){this.locked=!1,n.css(r).trigger("closed")}.bind(this)).removeClass("open")}.bind(this),this.settings.animationSpeed/2)}return n.hide().css(r).removeClass("open").trigger("closed")}return/fade/i.test(this.settings.animation)?n.fadeOut(this.settings.animationSpeed/2):n.hide()},close_video:function(t){var n=e(this).find(".flex-video"),r=n.find("iframe");r.length>0&&(r.attr("data-src",r[0].src),r.attr("src","about:blank"),n.hide())},open_video:function(t){var n=e(this).find(".flex-video"),i=n.find("iframe");if(i.length>0){var s=i.attr("data-src");if(typeof s=="string")i[0].src=i.attr("data-src");else{var o=i[0].src;i[0].src=r,i[0].src=o}n.show()}},cache_offset:function(e){var t=e.show().height()+parseInt(e.css("top"),10);return e.hide(),t},off:function(){e(this.scope).off(".fndtn.reveal")},reflow:function(){}}}(Foundation.zj,this,this.document),function(e,t,n){"use strict";Foundation.libs.section={name:"section",version:"4.3.2",settings:{deep_linking:!1,small_breakpoint:768,one_up:!0,multi_expand:!1,section_selector:"[data-section]",region_selector:"section, .section, [data-section-region]",title_selector:".title, [data-section-title]",resized_data_attr:"data-section-resized",small_style_data_attr:"data-section-small-style",content_selector:".content, [data-section-content]",nav_selector:'[data-section="vertical-nav"], [data-section="horizontal-nav"]',active_class:"active",callback:function(){}},init:function(t,n,r){var i=this;return Foundation.inherit(this,"throttle data_options position_right offset_right"),typeof n=="object"&&e.extend(!0,i.settings,n),typeof n!="string"?(this.events(),!0):this[n].call(this,r)},events:function(){var r=this,i=[],s=r.settings.section_selector,o=r.settings.region_selector.split(","),u=r.settings.title_selector.split(",");for(var a=0,f=o.length;a"+l+">"+u[c];i.push(p+" a"),i.push(p)}}e(r.scope).on("click.fndtn.section",i.join(","),function(t){var n=e(this).closest(r.settings.title_selector);r.close_navs(n),n.siblings(r.settings.content_selector).length>0&&r.toggle_active.call(n[0],t)}),e(t).on("resize.fndtn.section",r.throttle(function(){r.resize()},30)).on("hashchange.fndtn.section",r.set_active_from_hash),e(n).on("click.fndtn.section",function(t){if(t.isPropagationStopped&&t.isPropagationStopped())return;if(t.target===n)return;r.close_navs(e(t.target).closest(r.settings.title_selector))}),e(t).triggerHandler("resize.fndtn.section"),e(t).triggerHandler("hashchange.fndtn.section")},close_navs:function(t){var n=Foundation.libs.section,r=e(n.settings.nav_selector).filter(function(){return!e.extend({},n.settings,n.data_options(e(this))).one_up});if(t.length>0){var i=t.parent().parent();if(n.is_horizontal_nav(i)||n.is_vertical_nav(i))r=r.filter(function(){return this!==i[0]})}r.children(n.settings.region_selector).removeClass(n.settings.active_class)},toggle_active:function(t){var n=e(this),r=Foundation.libs.section,i=n.parent(),s=n.siblings(r.settings.content_selector),o=i.parent(),u=e.extend({},r.settings,r.data_options(o)),a=o.children(r.settings.region_selector).filter("."+r.settings.active_class);!u.deep_linking&&s.length>0&&t.preventDefault(),t.stopPropagation();if(!i.hasClass(r.settings.active_class)){if(!r.is_accordion(o)||r.is_accordion(o)&&!r.settings.multi_expand)a.removeClass(r.settings.active_class),a.trigger("closed.fndtn.section");i.addClass(r.settings.active_class),r.resize(i.find(r.settings.section_selector).not("["+r.settings.resized_data_attr+"]"),!0),i.trigger("opened.fndtn.section")}else if(i.hasClass(r.settings.active_class)&&r.is_accordion(o)||!u.one_up&&(r.small(o)||r.is_vertical_nav(o)||r.is_horizontal_nav(o)||r.is_accordion(o)))i.removeClass(r.settings.active_class),i.trigger("closed.fndtn.section");u.callback(o)},check_resize_timer:null,resize:function(t,n){var r=Foundation.libs.section,i=e(r.settings.section_selector),s=r.small(i),o=function(e,t){return!r.is_accordion(e)&&!e.is("["+r.settings.resized_data_attr+"]")&&(!s||r.is_horizontal_tabs(e))&&t===(e.css("display")==="none"||!e.parent().is(":visible"))};t=t||e(r.settings.section_selector),clearTimeout(r.check_resize_timer),s||t.removeAttr(r.settings.small_style_data_attr),t.filter(function(){return o(e(this),!1)}).each(function(){var t=e(this),i=t.children(r.settings.region_selector),s=i.children(r.settings.title_selector),o=i.children(r.settings.content_selector),u=0;if(n&&t.children(r.settings.region_selector).filter("."+r.settings.active_class).length==0){var a=e.extend({},r.settings,r.data_options(t));!a.deep_linking&&(a.one_up||!r.is_horizontal_nav(t)&&!r.is_vertical_nav(t)&&!r.is_accordion(t))&&i.filter(":visible").first().addClass(r.settings.active_class)}if(r.is_horizontal_tabs(t)||r.is_auto(t)){var f=0;s.each(function(){var t=e(this);if(t.is(":visible")){t.css(r.rtl?"right":"left",f);var n=parseInt(t.css("border-"+(r.rtl?"left":"right")+"-width"),10);n.toString()==="Nan"&&(n=0),f+=r.outerWidth(t)-n,u=Math.max(u,r.outerHeight(t))}}),s.css("height",u),i.each(function(){var t=e(this),n=t.children(r.settings.content_selector),i=parseInt(n.css("border-top-width"),10);i.toString()==="Nan"&&(i=0),t.css("padding-top",u-i)}),t.css("min-height",u)}else if(r.is_horizontal_nav(t)){var l=!0;s.each(function(){u=Math.max(u,r.outerHeight(e(this)))}),i.each(function(){var n=e(this);n.css("margin-left","-"+(l?t:n.children(r.settings.title_selector)).css("border-left-width")),l=!1}),i.css("margin-top","-"+t.css("border-top-width")),s.css("height",u),o.css("top",u),t.css("min-height",u)}else if(r.is_vertical_tabs(t)){var c=0;s.each(function(){var t=e(this);if(t.is(":visible")){t.css("top",c);var n=parseInt(t.css("border-top-width"),10);n.toString()==="Nan"&&(n=0),c+=r.outerHeight(t)-n}}),o.css("min-height",c+1)}else if(r.is_vertical_nav(t)){var h=0,p=!0;s.each(function(){h=Math.max(h,r.outerWidth(e(this)))}),i.each(function(){var n=e(this);n.css("margin-top","-"+(p?t:n.children(r.settings.title_selector)).css("border-top-width")),p=!1}),s.css("width",h),o.css(r.rtl?"right":"left",h),t.css("width",h)}t.attr(r.settings.resized_data_attr,!0)}),e(r.settings.section_selector).filter(function(){return o(e(this),!0)}).length>0&&(r.check_resize_timer=setTimeout(function(){r.resize(t.filter(function(){return o(e(this),!1)}),!0)},700)),s&&t.attr(r.settings.small_style_data_attr,!0)},is_vertical_nav:function(e){return/vertical-nav/i.test(e.data("section"))},is_horizontal_nav:function(e){return/horizontal-nav/i.test(e.data("section"))},is_accordion:function(e){return/accordion/i.test(e.data("section"))},is_horizontal_tabs:function(e){return/^tabs$/i.test(e.data("section"))},is_vertical_tabs:function(e){return/vertical-tabs/i.test(e.data("section"))},is_auto:function(e){var t=e.data("section");return t===""||/auto/i.test(t)},set_active_from_hash:function(){var n=Foundation.libs.section,r=t.location.hash.substring(1),i=e(n.settings.section_selector),s;i.each(function(){var t=e(this),i=t.children(n.settings.region_selector);i.each(function(){var i=e(this),o=i.children(n.settings.content_selector).data("slug");if((new RegExp(o,"i")).test(r))return s=t,!1});if(s!=null)return!1}),s!=null&&i.each(function(){if(s==e(this)){var t=e(this),i=e.extend({},n.settings,n.data_options(t)),o=t.children(n.settings.region_selector),u=i.deep_linking&&r.length>0,a=!1;o.each(function(){var t=e(this);if(a)t.removeClass(n.settings.active_class);else if(u){var i=t.children(n.settings.content_selector).data("slug");i&&(new RegExp(i,"i")).test(r)?(t.hasClass(n.settings.active_class)||t.addClass(n.settings.active_class),a=!0):t.removeClass(n.settings.active_class)}else t.hasClass(n.settings.active_class)&&(a=!0)}),!a&&(i.one_up||!n.is_horizontal_nav(t)&&!n.is_vertical_nav(t)&&!n.is_accordion(t))&&o.filter(":visible").first().addClass(n.settings.active_class)}})},reflow:function(){var t=Foundation.libs.section;e(t.settings.section_selector).removeAttr(t.settings.resized_data_attr),t.throttle(function(){t.resize()},30)()},small:function(t){var n=e.extend({},this.settings,this.data_options(t));return this +.is_horizontal_tabs(t)?!1:t&&this.is_accordion(t)?!0:e("html").hasClass("lt-ie9")?!0:e("html").hasClass("ie8compat")?!0:e(this.scope).width()'+t+''}},cache:{},init:function(t,n,r){Foundation.inherit(this,"data_options");var i=this;typeof n=="object"?e.extend(!0,this.settings,n):typeof r!="undefined"&&e.extend(!0,this.settings,r);if(typeof n=="string")return this[n].call(this,r);Modernizr.touch?e(this.scope).on("click.fndtn.tooltip touchstart.fndtn.tooltip touchend.fndtn.tooltip","[data-tooltip]",function(t){var n=e.extend({},i.settings,i.data_options(e(this)));n["disable-for-touch"]||(t.preventDefault(),e(n.tooltipClass).hide(),i.showOrCreateTip(e(this)))}).on("click.fndtn.tooltip touchstart.fndtn.tooltip touchend.fndtn.tooltip",this.settings.tooltipClass,function(t){t.preventDefault(),e(this).fadeOut(150)}):e(this.scope).on("mouseenter.fndtn.tooltip mouseleave.fndtn.tooltip","[data-tooltip]",function(t){var n=e(this);/enter|over/i.test(t.type)?i.showOrCreateTip(n):(t.type==="mouseout"||t.type==="mouseleave")&&i.hide(n)})},showOrCreateTip:function(e){var t=this.getTip(e);return t&&t.length>0?this.show(e):this.create(e)},getTip:function(t){var n=this.selector(t),r=null;return n&&(r=e('span[data-selector="'+n+'"]'+this.settings.tooltipClass)),typeof r=="object"?r:!1},selector:function(e){var t=e.attr("id"),n=e.attr("data-tooltip")||e.attr("data-selector");return(t&&t.length<1||!t)&&typeof n!="string"&&(n="tooltip"+Math.random().toString(36).substring(7),e.attr("data-selector",n)),t&&t.length>0?t:n},create:function(t){var n=e(this.settings.tipTemplate(this.selector(t),e("
            ").html(t.attr("title")).html())),r=this.inheritable_classes(t);n.addClass(r).appendTo(this.settings.appendTo),Modernizr.touch&&n.append(''+this.settings.touchCloseText+""),t.removeAttr("title").attr("title",""),this.show(t)},reposition:function(n,r,i){var s,o,u,a,f,l;r.css("visibility","hidden").show(),s=n.data("width"),o=r.children(".nub"),u=this.outerHeight(o),a=this.outerHeight(o),l=function(e,t,n,r,i,s){return e.css({top:t?t:"auto",bottom:r?r:"auto",left:i?i:"auto",right:n?n:"auto",width:s?s:"auto"}).end()},l(r,n.offset().top+this.outerHeight(n)+10,"auto","auto",n.offset().left,s);if(e(t).width()<767)l(r,n.offset().top+this.outerHeight(n)+10,"auto","auto",12.5,e(this.scope).width()),r.addClass("tip-override"),l(o,-u,"auto","auto",n.offset().left);else{var c=n.offset().left;Foundation.rtl&&(c=n.offset().left+n.offset().width-this.outerWidth(r)),l(r,n.offset().top+this.outerHeight(n)+10,"auto","auto",c,s),r.removeClass("tip-override"),i&&i.indexOf("tip-top")>-1?l(r,n.offset().top-this.outerHeight(r),"auto","auto",c,s).removeClass("tip-override"):i&&i.indexOf("tip-left")>-1?l(r,n.offset().top+this.outerHeight(n)/2-u*2.5,"auto","auto",n.offset().left-this.outerWidth(r)-u,s).removeClass("tip-override"):i&&i.indexOf("tip-right")>-1&&l(r,n.offset().top+this.outerHeight(n)/2-u*2.5,"auto","auto",n.offset().left+this.outerWidth(n)+u,s).removeClass("tip-override")}r.css("visibility","visible").hide()},inheritable_classes:function(t){var n=["tip-top","tip-left","tip-bottom","tip-right","noradius"].concat(this.settings.additionalInheritableClasses),r=t.attr("class"),i=r?e.map(r.split(" "),function(t,r){if(e.inArray(t,n)!==-1)return t}).join(" "):"";return e.trim(i)},show:function(e){var t=this.getTip(e);this.reposition(e,t,e.attr("class")),t.fadeIn(150)},hide:function(e){var t=this.getTip(e);t.fadeOut(150)},reload:function(){var t=e(this);return t.data("fndtn-tooltips")?t.foundationTooltips("destroy").foundationTooltips("init"):t.foundationTooltips("init")},off:function(){e(this.scope).off(".fndtn.tooltip"),e(this.settings.tooltipClass).each(function(t){e("[data-tooltip]").get(t).attr("title",e(this).text())}).remove()},reflow:function(){}}}(Foundation.zj,this,this.document),function(e,t,n,r){"use strict";Foundation.libs.topbar={name:"topbar",version:"4.3.2",settings:{index:0,stickyClass:"sticky",custom_back_text:!0,back_text:"Back",is_hover:!0,mobile_show_parent_link:!1,scrolltop:!0,init:!1},init:function(n,r,i){Foundation.inherit(this,"data_options addCustomRule");var s=this;return typeof r=="object"?e.extend(!0,this.settings,r):typeof i!="undefined"&&e.extend(!0,this.settings,i),typeof r!="string"?(e(".top-bar, [data-topbar]").each(function(){e.extend(!0,s.settings,s.data_options(e(this))),s.settings.$w=e(t),s.settings.$topbar=e(this),s.settings.$section=s.settings.$topbar.find("section"),s.settings.$titlebar=s.settings.$topbar.children("ul").first(),s.settings.$topbar.data("index",0);var n=s.settings.$topbar.parent();n.hasClass("fixed")||n.hasClass(s.settings.stickyClass)?(s.settings.$topbar.data("height",s.outerHeight(n)),s.settings.$topbar.data("stickyoffset",n.offset().top)):s.settings.$topbar.data("height",s.outerHeight(s.settings.$topbar));var r=e("
            ").insertAfter(s.settings.$topbar);s.settings.breakPoint=r.width(),r.remove(),s.assemble(),s.settings.is_hover&&s.settings.$topbar.find(".has-dropdown").addClass("not-click"),s.addCustomRule(".f-topbar-fixed { padding-top: "+s.settings.$topbar.data("height")+"px }"),s.settings.$topbar.parent().hasClass("fixed")&&e("body").addClass("f-topbar-fixed")}),s.settings.init||this.events(),this.settings.init):this[r].call(this,i)},toggle:function(){var n=this,r=e(".top-bar, [data-topbar]"),i=r.find("section, .section");n.breakpoint()&&(n.rtl?(i.css({right:"0%"}),i.find(">.name").css({right:"100%"})):(i.css({left:"0%"}),i.find(">.name").css({left:"100%"})),i.find("li.moved").removeClass("moved"),r.data("index",0),r.toggleClass("expanded").css("height","")),n.settings.scrolltop?r.hasClass("expanded")?r.parent().hasClass("fixed")&&(n.settings.scrolltop?(r.parent().removeClass("fixed"),r.addClass("fixed"),e("body").removeClass("f-topbar-fixed"),t.scrollTo(0,0)):r.parent().removeClass("expanded")):r.hasClass("fixed")&&(r.parent().addClass("fixed"),r.removeClass("fixed"),e("body").addClass("f-topbar-fixed")):(r.parent().hasClass(n.settings.stickyClass)&&r.parent().addClass("fixed"),r.parent().hasClass("fixed")&&(r.hasClass("expanded")?(r.addClass("fixed"),r.parent().addClass("expanded")):(r.removeClass("fixed"),r.parent().removeClass("expanded"),n.updateStickyPositioning())))},timer:null,events:function(){var r=this;e(this.scope).off(".fndtn.topbar").on("click.fndtn.topbar",".top-bar .toggle-topbar, [data-topbar] .toggle-topbar",function(e){e.preventDefault(),r.toggle()}).on("click.fndtn.topbar",".top-bar li.has-dropdown",function(t){var n=e(this),i=e(t.target),s=n.closest("[data-topbar], .top-bar"),o=s.data("topbar");if(i.data("revealId")){r.toggle();return}if(r.breakpoint())return;if(r.settings.is_hover&&!Modernizr.touch)return;t.stopImmediatePropagation(),i[0].nodeName==="A"&&i.parent().hasClass("has-dropdown")&&t.preventDefault(),n.hasClass("hover")?(n.removeClass("hover").find("li").removeClass("hover"),n.parents("li.hover").removeClass("hover")):n.addClass("hover")}).on("click.fndtn.topbar",".top-bar .has-dropdown>a, [data-topbar] .has-dropdown>a",function(n){if(r.breakpoint()&&e(t).width()!=r.settings.breakPoint){n.preventDefault();var i=e(this),s=i.closest(".top-bar, [data-topbar]"),o=s.find("section, .section"),u=i.next(".dropdown").outerHeight(),a=i.closest("li");s.data("index",s.data("index")+1),a.addClass("moved"),r.rtl?(o.css({right:-(100*s.data("index"))+"%"}),o.find(">.name").css({right:100*s.data("index")+"%"})):(o.css({left:-(100*s.data("index"))+"%"}),o.find(">.name").css({left:100*s.data("index")+"%"})),s.css("height",r.outerHeight(i.siblings("ul"),!0)+r.settings.$topbar.data("height"))}}),e(t).on("resize.fndtn.topbar",function(){if(typeof r.settings.$topbar=="undefined")return;var t=r.settings.$topbar.parent("."+this.settings.stickyClass),i;if(!r.breakpoint()){var s=r.settings.$topbar.hasClass("expanded");e(".top-bar, [data-topbar]").css("height","").removeClass("expanded").find("li").removeClass("hover"),s&&r.toggle()}t.length>0&&(t.hasClass("fixed")?(t.removeClass("fixed"),i=t.offset().top,e(n.body).hasClass("f-topbar-fixed")&&(i-=r.settings.$topbar.data("height")),r.settings.$topbar.data("stickyoffset",i),t.addClass("fixed")):(i=t.offset().top,r.settings.$topbar.data("stickyoffset",i)))}.bind(this)),e("body").on("click.fndtn.topbar",function(t){var n=e(t.target).closest("li").closest("li.hover");if(n.length>0)return;e(".top-bar li, [data-topbar] li").removeClass("hover")}),e(this.scope).on("click.fndtn",".top-bar .has-dropdown .back, [data-topbar] .has-dropdown .back",function(t){t.preventDefault();var n=e(this),i=n.closest(".top-bar, [data-topbar]"),s=i.find("section, .section"),o=n.closest("li.moved"),u=o.parent();i.data("index",i.data("index")-1),r.rtl?(s.css({right:-(100*i.data("index"))+"%"}),s.find(">.name").css({right:100*i.data("index")+"%"})):(s.css({left:-(100*i.data("index"))+"%"}),s.find(">.name").css({left:100*i.data("index")+"%"})),i.data("index")===0?i.css("height",""):i.css("height",r.outerHeight(u,!0)+r.settings.$topbar.data("height")),setTimeout(function(){o.removeClass("moved")},300)})},breakpoint:function(){return e(n).width()<=this.settings.breakPoint||e("html").hasClass("lt-ie9")},assemble:function(){var t=this;this.settings.$section.detach(),this.settings.$section.find(".has-dropdown>a").each(function(){var n=e(this),r=n.siblings(".dropdown"),i=n.attr("href");if(t.settings.mobile_show_parent_link&&i&&i.length>1)var s=e('
          2. '+n.text()+"
          3. ");else var s=e('
          4. ');t.settings.custom_back_text==1?s.find("h5>a").html(t.settings.back_text):s.find("h5>a").html("« "+n.html()),r.prepend(s)}),this.settings.$section.appendTo(this.settings.$topbar),this.sticky()},height:function(t){var n=0,r=this;return t.find("> li").each(function(){n+=r.outerHeight(e(this),!0)}),n},sticky:function(){var n=e(t),r=this;n.scroll(function(){r.updateStickyPositioning()})},updateStickyPositioning:function(){var n="."+this.settings.stickyClass,r=e(t);if(e(n).length>0){var i=this.settings.$topbar.data("stickyoffset");e(n).hasClass("expanded")||(r.scrollTop()>i?e(n).hasClass("fixed")||(e(n).addClass("fixed"),e("body").addClass("f-topbar-fixed")):r.scrollTop()<=i&&e(n).hasClass("fixed")&&(e(n).removeClass("fixed"),e("body").removeClass("f-topbar-fixed")))}},off:function(){e(this.scope).off(".fndtn.topbar"),e(t).off(".fndtn.topbar")},reflow:function(){}}}(Foundation.zj,this,this.document),function(e,t,n,r){"use strict";Foundation.libs.interchange={name:"interchange",version:"4.2.4",cache:{},images_loaded:!1,settings:{load_attr:"interchange",named_queries:{"default":"only screen and (min-width: 1px)",small:"only screen and (min-width: 768px)",medium:"only screen and (min-width: 1280px)",large:"only screen and (min-width: 1440px)",landscape:"only screen and (orientation: landscape)",portrait:"only screen and (orientation: portrait)",retina:"only screen and (-webkit-min-device-pixel-ratio: 2),only screen and (min--moz-device-pixel-ratio: 2),only screen and (-o-min-device-pixel-ratio: 2/1),only screen and (min-device-pixel-ratio: 2),only screen and (min-resolution: 192dpi),only screen and (min-resolution: 2dppx)"},directives:{replace:function(e,t){if(/IMG/.test(e[0].nodeName)){var n=e[0].src;if((new RegExp(t,"i")).test(n))return;return e[0].src=t,e.trigger("replace",[e[0].src,n])}}}},init:function(t,n,r){return Foundation.inherit(this,"throttle"),typeof n=="object"&&e.extend(!0,this.settings,n),this.events(),this.images(),typeof n!="string"?this.settings.init:this[n].call(this,r)},events:function(){var n=this;e(t).on("resize.fndtn.interchange",n.throttle(function(){n.resize.call(n)},50))},resize:function(){var t=this.cache;if(!this.images_loaded){setTimeout(e.proxy(this.resize,this),50);return}for(var n in t)if(t.hasOwnProperty(n)){var r=this.results(n,t[n]);r&&this.settings.directives[r.scenario[1]](r.el,r.scenario[0])}},results:function(t,n){var r=n.length;if(r>0){var i=e('[data-uuid="'+t+'"]');for(var s=r-1;s>=0;s--){var o,u=n[s][2];this.settings.named_queries.hasOwnProperty(u)?o=matchMedia(this.settings.named_queries[u]):o=matchMedia(u);if(o.matches)return{el:i,scenario:n[s]}}}return!1},images:function(e){return typeof this.cached_images=="undefined"||e?this.update_images():this.cached_images},update_images:function(){var t=n.getElementsByTagName("img"),r=t.length,i=0,s="data-"+this.settings.load_attr;this.cached_images=[],this.images_loaded=!1;for(var o=r-1;o>=0;o--)this.loaded(e(t[o]),function(e){i++;if(e){var t=e.getAttribute(s)||"";t.length>0&&this.cached_images.push(e)}i===r&&(this.images_loaded=!0,this.enhance())}.bind(this));return"deferred"},loaded:function(e,t){function n(){t(e[0])}function r(){this.one("load",n);if(/MSIE (\d+\.\d+);/.test(navigator.userAgent)){var e=this.attr("src"),t=e.match(/\?/)?"&":"?";t+="random="+(new Date).getTime(),this.attr("src",e+t)}}if(!e.attr("src")){n();return}e[0].complete||e[0].readyState===4?n():r.call(e)},enhance:function(){var n=this.images().length;for(var r=n-1;r>=0;r--)this._object(e(this.images()[r]));return e(t).trigger("resize")},parse_params:function(e,t,n){return[this.trim(e),this.convert_directive(t),this.trim(n)]},convert_directive:function(e){var t=this.trim(e);return t.length>0?t:"replace"},_object:function(e){var t=this.parse_data_attr(e),n=[],r=t.length;if(r>0)for(var i=r-1;i>=0;i--){var s=t[i].split(/\((.*?)(\))$/);if(s.length>1){var o=s[0].split(","),u=this.parse_params(o[0],o[1],s[1]);n.push(u)}}return this.store(e,n)},uuid:function(e){function n(){return((1+Math.random())*65536|0).toString(16).substring(1)}var t=e||"-";return n()+n()+t+n()+t+n()+t+n()+t+n()+n()+n()},store:function(e,t){var n=this.uuid(),r=e.data("uuid");return r?this.cache[r]:(e.attr("data-uuid",n),this.cache[n]=t)},trim:function(t){return typeof t=="string"?e.trim(t):t},parse_data_attr:function(e){var t=e.data(this.settings.load_attr).split(/\[(.*?)\]/),n=t.length,r=[];for(var i=n-1;i>=0;i--)t[i].replace(/[\W\d]+/,"").length>4&&r.push(t[i]);return r},reflow:function(){this.images(!0)}}}(Foundation.zj,this,this.document),function(e){"use strict";function t(e,t,n){if(e.addEventListener)return e.addEventListener(t,n,!1);if(e.attachEvent)return e.attachEvent("on"+t,n)}function n(e,t){var n,r;for(n=0,r=e.length;n=0;r--)n.push(this.pattern(e[r]));return this.check_validation_and_apply_styles(n)},pattern:function(e){var t=e.getAttribute("type"),n=typeof e.getAttribute("required")=="string";if(this.settings.patterns.hasOwnProperty(t))return[e,this.settings.patterns[t],n];var r=e.getAttribute("pattern")||"";return this.settings.patterns.hasOwnProperty(r)&&r.length>0?[e,this.settings.patterns[r],n]:r.length>0?[e,new RegExp(r),n]:(r=/.*/,[e,r,n])},check_validation_and_apply_styles:function(t){var n=t.length,r=[];for(var i=n-1;i>=0;i--){var s=t[i][0],o=t[i][2],u=s.value,a=s.type==="radio",f=o?s.value.length>0:!0;a&&o?r.push(this.valid_radio(s,o)):t[i][1].test(u)&&f||!o&&s.value.length<1?(e(s).removeAttr("data-invalid").parent().removeClass("error"),r.push(!0)):(e(s).attr("data-invalid","").parent().addClass("error"),r.push(!1))}return r},valid_radio:function(t,r){var i=t.getAttribute("name"),s=n.getElementsByName(i),o=s.length,u=!1;for(var a=0;a= 0; i--) { + el_patterns.push(this.pattern(els[i])); + } + + return this.check_validation_and_apply_styles(el_patterns); + }, + + pattern : function (el) { + var type = el.getAttribute('type'), + required = typeof el.getAttribute('required') === 'string'; + + if (this.settings.patterns.hasOwnProperty(type)) { + return [el, this.settings.patterns[type], required]; + } + + var pattern = el.getAttribute('pattern') || ''; + + if (this.settings.patterns.hasOwnProperty(pattern) && pattern.length > 0) { + return [el, this.settings.patterns[pattern], required]; + } else if (pattern.length > 0) { + return [el, new RegExp(pattern), required]; + } + + pattern = /.*/; + + return [el, pattern, required]; + }, + + check_validation_and_apply_styles : function (el_patterns) { + var count = el_patterns.length, + validations = []; + + for (var i = count - 1; i >= 0; i--) { + var el = el_patterns[i][0], + required = el_patterns[i][2], + value = el.value, + is_radio = el.type === "radio", + valid_length = (required) ? (el.value.length > 0) : true; + + if (is_radio && required) { + validations.push(this.valid_radio(el, required)); + } else { + if (el_patterns[i][1].test(value) && valid_length || + !required && el.value.length < 1) { + $(el).removeAttr('data-invalid').parent().removeClass('error'); + validations.push(true); + } else { + $(el).attr('data-invalid', '').parent().addClass('error'); + validations.push(false); + } + } + } + + return validations; + }, + + valid_radio : function (el, required) { + var name = el.getAttribute('name'), + group = document.getElementsByName(name), + count = group.length, + valid = false; + + for (var i=0; i < count; i++) { + if (group[i].checked) valid = true; + } + + for (var i=0; i < count; i++) { + if (valid) { + $(group[i]).removeAttr('data-invalid').parent().removeClass('error'); + } else { + $(group[i]).attr('data-invalid', '').parent().addClass('error'); + } + } + + return valid; + } + }; +}(Foundation.zj, this, this.document)); diff --git a/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.alerts.js b/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.alerts.js new file mode 100644 index 00000000..63dada01 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.alerts.js @@ -0,0 +1,57 @@ +/*jslint unparam: true, browser: true, indent: 2 */ + +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.alerts = { + name : 'alerts', + + version : '4.3.2', + + settings : { + animation: 'fadeOut', + speed: 300, // fade out speed + callback: function (){} + }, + + init : function (scope, method, options) { + this.scope = scope || this.scope; + Foundation.inherit(this, 'data_options'); + + if (typeof method === 'object') { + $.extend(true, this.settings, method); + } + + if (typeof method !== 'string') { + if (!this.settings.init) { this.events(); } + + return this.settings.init; + } else { + return this[method].call(this, options); + } + }, + + events : function () { + var self = this; + + $(this.scope).on('click.fndtn.alerts', '[data-alert] a.close', function (e) { + var alertBox = $(this).closest("[data-alert]"), + settings = $.extend({}, self.settings, self.data_options(alertBox)); + + e.preventDefault(); + alertBox[settings.animation](settings.speed, function () { + $(this).remove(); + settings.callback(); + }); + }); + + this.settings.init = true; + }, + + off : function () { + $(this.scope).off('.fndtn.alerts'); + }, + + reflow : function () {} + }; +}(Foundation.zj, this, this.document)); diff --git a/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.clearing.js b/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.clearing.js new file mode 100644 index 00000000..a63b53e4 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.clearing.js @@ -0,0 +1,516 @@ +/*jslint unparam: true, browser: true, indent: 2 */ + +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.clearing = { + name : 'clearing', + + version: '4.3.2', + + settings : { + templates : { + viewing : '×' + + '' + }, + + // comma delimited list of selectors that, on click, will close clearing, + // add 'div.clearing-blackout, div.visible-img' to close on background click + close_selectors : '.clearing-close', + + // event initializers and locks + init : false, + locked : false + }, + + init : function (scope, method, options) { + var self = this; + Foundation.inherit(this, 'set_data get_data remove_data throttle data_options'); + + if (typeof method === 'object') { + options = $.extend(true, this.settings, method); + } + + if (typeof method !== 'string') { + $(this.scope).find('ul[data-clearing]').each(function () { + var $el = $(this), + options = options || {}, + lis = $el.find('li'), + settings = self.get_data($el); + + if (!settings && lis.length > 0) { + options.$parent = $el.parent(); + + self.set_data($el, $.extend({}, self.settings, options, self.data_options($el))); + + self.assemble($el.find('li')); + + if (!self.settings.init) { + self.events().swipe_events(); + } + } + }); + + return this.settings.init; + } else { + // fire method + return this[method].call(this, options); + } + }, + + // event binding and initial setup + + events : function () { + var self = this; + + $(this.scope) + .on('click.fndtn.clearing', 'ul[data-clearing] li', + function (e, current, target) { + var current = current || $(this), + target = target || current, + next = current.next('li'), + settings = self.get_data(current.parent()), + image = $(e.target); + + e.preventDefault(); + if (!settings) self.init(); + + // if clearing is open and the current image is + // clicked, go to the next image in sequence + if (target.hasClass('visible') && + current[0] === target[0] && + next.length > 0 && self.is_open(current)) { + target = next; + image = target.find('img'); + } + + // set current and target to the clicked li if not otherwise defined. + self.open(image, current, target); + self.update_paddles(target); + }) + + .on('click.fndtn.clearing', '.clearing-main-next', + function (e) { this.nav(e, 'next') }.bind(this)) + .on('click.fndtn.clearing', '.clearing-main-prev', + function (e) { this.nav(e, 'prev') }.bind(this)) + .on('click.fndtn.clearing', this.settings.close_selectors, + function (e) { Foundation.libs.clearing.close(e, this) }) + .on('keydown.fndtn.clearing', + function (e) { this.keydown(e) }.bind(this)); + + $(window).on('resize.fndtn.clearing', + function () { this.resize() }.bind(this)); + + this.settings.init = true; + return this; + }, + + swipe_events : function () { + var self = this; + + $(this.scope) + .on('touchstart.fndtn.clearing', '.visible-img', function(e) { + if (!e.touches) { e = e.originalEvent; } + var data = { + start_page_x: e.touches[0].pageX, + start_page_y: e.touches[0].pageY, + start_time: (new Date()).getTime(), + delta_x: 0, + is_scrolling: undefined + }; + + $(this).data('swipe-transition', data); + e.stopPropagation(); + }) + .on('touchmove.fndtn.clearing', '.visible-img', function(e) { + if (!e.touches) { e = e.originalEvent; } + // Ignore pinch/zoom events + if(e.touches.length > 1 || e.scale && e.scale !== 1) return; + + var data = $(this).data('swipe-transition'); + + if (typeof data === 'undefined') { + data = {}; + } + + data.delta_x = e.touches[0].pageX - data.start_page_x; + + if ( typeof data.is_scrolling === 'undefined') { + data.is_scrolling = !!( data.is_scrolling || Math.abs(data.delta_x) < Math.abs(e.touches[0].pageY - data.start_page_y) ); + } + + if (!data.is_scrolling && !data.active) { + e.preventDefault(); + var direction = (data.delta_x < 0) ? 'next' : 'prev'; + data.active = true; + self.nav(e, direction); + } + }) + .on('touchend.fndtn.clearing', '.visible-img', function(e) { + $(this).data('swipe-transition', {}); + e.stopPropagation(); + }); + }, + + assemble : function ($li) { + var $el = $li.parent(); + $el.after('
            '); + + var holder = $('#foundationClearingHolder'), + settings = this.get_data($el), + grid = $el.detach(), + data = { + grid: '', + viewing: settings.templates.viewing + }, + wrapper = '
            ' + data.viewing + + data.grid + '
            '; + + return holder.after(wrapper).remove(); + }, + + // event callbacks + + open : function ($image, current, target) { + var root = target.closest('.clearing-assembled'), + container = root.find('div').first(), + visible_image = container.find('.visible-img'), + image = visible_image.find('img').not($image); + + if (!this.locked()) { + // set the image to the selected thumbnail + image + .attr('src', this.load($image)) + .css('visibility', 'hidden'); + + this.loaded(image, function () { + image.css('visibility', 'visible'); + // toggle the gallery + root.addClass('clearing-blackout'); + container.addClass('clearing-container'); + visible_image.show(); + this.fix_height(target) + .caption(visible_image.find('.clearing-caption'), $image) + .center(image) + .shift(current, target, function () { + target.siblings().removeClass('visible'); + target.addClass('visible'); + }); + }.bind(this)); + } + }, + + close : function (e, el) { + e.preventDefault(); + + var root = (function (target) { + if (/blackout/.test(target.selector)) { + return target; + } else { + return target.closest('.clearing-blackout'); + } + }($(el))), container, visible_image; + + if (el === e.target && root) { + container = root.find('div').first(); + visible_image = container.find('.visible-img'); + this.settings.prev_index = 0; + root.find('ul[data-clearing]') + .attr('style', '').closest('.clearing-blackout') + .removeClass('clearing-blackout'); + container.removeClass('clearing-container'); + visible_image.hide(); + } + + return false; + }, + + is_open : function (current) { + return current.parent().prop('style').length > 0; + }, + + keydown : function (e) { + var clearing = $('.clearing-blackout').find('ul[data-clearing]'); + + if (e.which === 39) this.go(clearing, 'next'); + if (e.which === 37) this.go(clearing, 'prev'); + if (e.which === 27) $('a.clearing-close').trigger('click'); + }, + + nav : function (e, direction) { + var clearing = $('.clearing-blackout').find('ul[data-clearing]'); + + e.preventDefault(); + this.go(clearing, direction); + }, + + resize : function () { + var image = $('.clearing-blackout .visible-img').find('img'); + + if (image.length) { + this.center(image); + } + }, + + // visual adjustments + fix_height : function (target) { + var lis = target.parent().children(), + self = this; + + lis.each(function () { + var li = $(this), + image = li.find('img'); + + if (li.height() > self.outerHeight(image)) { + li.addClass('fix-height'); + } + }) + .closest('ul') + .width(lis.length * 100 + '%'); + + return this; + }, + + update_paddles : function (target) { + var visible_image = target + .closest('.carousel') + .siblings('.visible-img'); + + if (target.next().length > 0) { + visible_image + .find('.clearing-main-next') + .removeClass('disabled'); + } else { + visible_image + .find('.clearing-main-next') + .addClass('disabled'); + } + + if (target.prev().length > 0) { + visible_image + .find('.clearing-main-prev') + .removeClass('disabled'); + } else { + visible_image + .find('.clearing-main-prev') + .addClass('disabled'); + } + }, + + center : function (target) { + if (!this.rtl) { + target.css({ + marginLeft : -(this.outerWidth(target) / 2), + marginTop : -(this.outerHeight(target) / 2) + }); + } else { + target.css({ + marginRight : -(this.outerWidth(target) / 2), + marginTop : -(this.outerHeight(target) / 2) + }); + } + return this; + }, + + // image loading and preloading + + load : function ($image) { + if ($image[0].nodeName === "A") { + var href = $image.attr('href'); + } else { + var href = $image.parent().attr('href'); + } + + this.preload($image); + + if (href) return href; + return $image.attr('src'); + }, + + preload : function ($image) { + this + .img($image.closest('li').next()) + .img($image.closest('li').prev()); + }, + + loaded : function (image, callback) { + // based on jquery.imageready.js + // @weblinc, @jsantell, (c) 2012 + + function loaded () { + callback(); + } + + function bindLoad () { + this.one('load', loaded); + + if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) { + var src = this.attr( 'src' ), + param = src.match( /\?/ ) ? '&' : '?'; + + param += 'random=' + (new Date()).getTime(); + this.attr('src', src + param); + } + } + + if (!image.attr('src')) { + loaded(); + return; + } + + if (image[0].complete || image[0].readyState === 4) { + loaded(); + } else { + bindLoad.call(image); + } + }, + + img : function (img) { + if (img.length) { + var new_img = new Image(), + new_a = img.find('a'); + + if (new_a.length) { + new_img.src = new_a.attr('href'); + } else { + new_img.src = img.find('img').attr('src'); + } + } + return this; + }, + + // image caption + + caption : function (container, $image) { + var caption = $image.data('caption'); + + if (caption) { + container + .html(caption) + .show(); + } else { + container + .text('') + .hide(); + } + return this; + }, + + // directional methods + + go : function ($ul, direction) { + var current = $ul.find('.visible'), + target = current[direction](); + + if (target.length) { + target + .find('img') + .trigger('click', [current, target]); + } + }, + + shift : function (current, target, callback) { + var clearing = target.parent(), + old_index = this.settings.prev_index || target.index(), + direction = this.direction(clearing, current, target), + left = parseInt(clearing.css('left'), 10), + width = this.outerWidth(target), + skip_shift; + + // we use jQuery animate instead of CSS transitions because we + // need a callback to unlock the next animation + if (target.index() !== old_index && !/skip/.test(direction)){ + if (/left/.test(direction)) { + this.lock(); + clearing.animate({left : left + width}, 300, this.unlock()); + } else if (/right/.test(direction)) { + this.lock(); + clearing.animate({left : left - width}, 300, this.unlock()); + } + } else if (/skip/.test(direction)) { + // the target image is not adjacent to the current image, so + // do we scroll right or not + skip_shift = target.index() - this.settings.up_count; + this.lock(); + + if (skip_shift > 0) { + clearing.animate({left : -(skip_shift * width)}, 300, this.unlock()); + } else { + clearing.animate({left : 0}, 300, this.unlock()); + } + } + + callback(); + }, + + direction : function ($el, current, target) { + var lis = $el.find('li'), + li_width = this.outerWidth(lis) + (this.outerWidth(lis) / 4), + up_count = Math.floor(this.outerWidth($('.clearing-container')) / li_width) - 1, + target_index = lis.index(target), + response; + + this.settings.up_count = up_count; + + if (this.adjacent(this.settings.prev_index, target_index)) { + if ((target_index > up_count) + && target_index > this.settings.prev_index) { + response = 'right'; + } else if ((target_index > up_count - 1) + && target_index <= this.settings.prev_index) { + response = 'left'; + } else { + response = false; + } + } else { + response = 'skip'; + } + + this.settings.prev_index = target_index; + + return response; + }, + + adjacent : function (current_index, target_index) { + for (var i = target_index + 1; i >= target_index - 1; i--) { + if (i === current_index) return true; + } + return false; + }, + + // lock management + + lock : function () { + this.settings.locked = true; + }, + + unlock : function () { + this.settings.locked = false; + }, + + locked : function () { + return this.settings.locked; + }, + + // plugin management/browser quirks + + outerHTML : function (el) { + // support FireFox < 11 + return el.outerHTML || new XMLSerializer().serializeToString(el); + }, + + off : function () { + $(this.scope).off('.fndtn.clearing'); + $(window).off('.fndtn.clearing'); + this.remove_data(); // empty settings cache + this.settings.init = false; + }, + + reflow : function () { + this.init(); + } + }; + +}(Foundation.zj, this, this.document)); diff --git a/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.cookie.js b/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.cookie.js new file mode 100644 index 00000000..862027c8 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.cookie.js @@ -0,0 +1,74 @@ +/*! + * jQuery Cookie Plugin v1.3 + * https://github.com/carhartl/jquery-cookie + * + * Copyright 2011, Klaus Hartl + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://www.opensource.org/licenses/mit-license.php + * http://www.opensource.org/licenses/GPL-2.0 + * + * Modified to work with Zepto.js by ZURB + */ +(function ($, document, undefined) { + + var pluses = /\+/g; + + function raw(s) { + return s; + } + + function decoded(s) { + return decodeURIComponent(s.replace(pluses, ' ')); + } + + var config = $.cookie = function (key, value, options) { + + // write + if (value !== undefined) { + options = $.extend({}, config.defaults, options); + + if (value === null) { + options.expires = -1; + } + + if (typeof options.expires === 'number') { + var days = options.expires, t = options.expires = new Date(); + t.setDate(t.getDate() + days); + } + + value = config.json ? JSON.stringify(value) : String(value); + + return (document.cookie = [ + encodeURIComponent(key), '=', config.raw ? value : encodeURIComponent(value), + options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE + options.path ? '; path=' + options.path : '', + options.domain ? '; domain=' + options.domain : '', + options.secure ? '; secure' : '' + ].join('')); + } + + // read + var decode = config.raw ? raw : decoded; + var cookies = document.cookie.split('; '); + for (var i = 0, l = cookies.length; i < l; i++) { + var parts = cookies[i].split('='); + if (decode(parts.shift()) === key) { + var cookie = decode(parts.join('=')); + return config.json ? JSON.parse(cookie) : cookie; + } + } + + return null; + }; + + config.defaults = {}; + + $.removeCookie = function (key, options) { + if ($.cookie(key) !== null) { + $.cookie(key, null, options); + return true; + } + return false; + }; + +})(Foundation.zj, document); diff --git a/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.dropdown.js b/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.dropdown.js new file mode 100644 index 00000000..62f11643 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.dropdown.js @@ -0,0 +1,183 @@ +/*jslint unparam: true, browser: true, indent: 2 */ + +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.dropdown = { + name : 'dropdown', + + version : '4.3.2', + + settings : { + activeClass: 'open', + is_hover: false, + opened: function(){}, + closed: function(){} + }, + + init : function (scope, method, options) { + this.scope = scope || this.scope; + Foundation.inherit(this, 'throttle scrollLeft data_options'); + + if (typeof method === 'object') { + $.extend(true, this.settings, method); + } + + if (typeof method !== 'string') { + + if (!this.settings.init) { + this.events(); + } + + return this.settings.init; + } else { + return this[method].call(this, options); + } + }, + + events : function () { + var self = this; + + $(this.scope) + .on('click.fndtn.dropdown', '[data-dropdown]', function (e) { + var settings = $.extend({}, self.settings, self.data_options($(this))); + e.preventDefault(); + + if (!settings.is_hover) self.toggle($(this)); + }) + .on('mouseenter', '[data-dropdown]', function (e) { + var settings = $.extend({}, self.settings, self.data_options($(this))); + if (settings.is_hover) self.toggle($(this)); + }) + .on('mouseleave', '[data-dropdown-content]', function (e) { + var target = $('[data-dropdown="' + $(this).attr('id') + '"]'), + settings = $.extend({}, self.settings, self.data_options(target)); + if (settings.is_hover) self.close.call(self, $(this)); + }) + .on('opened.fndtn.dropdown', '[data-dropdown-content]', this.settings.opened) + .on('closed.fndtn.dropdown', '[data-dropdown-content]', this.settings.closed); + + $(document).on('click.fndtn.dropdown', function (e) { + var parent = $(e.target).closest('[data-dropdown-content]'); + + if ($(e.target).data('dropdown') || $(e.target).parent().data('dropdown')) { + return; + } + if (!($(e.target).data('revealId')) && + (parent.length > 0 && ($(e.target).is('[data-dropdown-content]') || + $.contains(parent.first()[0], e.target)))) { + e.stopPropagation(); + return; + } + + self.close.call(self, $('[data-dropdown-content]')); + }); + + $(window).on('resize.fndtn.dropdown', self.throttle(function () { + self.resize.call(self); + }, 50)).trigger('resize'); + + this.settings.init = true; + }, + + close: function (dropdown) { + var self = this; + dropdown.each(function () { + if ($(this).hasClass(self.settings.activeClass)) { + $(this) + .css(Foundation.rtl ? 'right':'left', '-99999px') + .removeClass(self.settings.activeClass); + $(this).trigger('closed'); + } + }); + }, + + open: function (dropdown, target) { + this + .css(dropdown + .addClass(this.settings.activeClass), target); + dropdown.trigger('opened'); + }, + + toggle : function (target) { + var dropdown = $('#' + target.data('dropdown')); + if (dropdown.length === 0) { + // No dropdown found, not continuing + return; + } + + this.close.call(this, $('[data-dropdown-content]').not(dropdown)); + + if (dropdown.hasClass(this.settings.activeClass)) { + this.close.call(this, dropdown); + } else { + this.close.call(this, $('[data-dropdown-content]')) + this.open.call(this, dropdown, target); + } + }, + + resize : function () { + var dropdown = $('[data-dropdown-content].open'), + target = $("[data-dropdown='" + dropdown.attr('id') + "']"); + + if (dropdown.length && target.length) { + this.css(dropdown, target); + } + }, + + css : function (dropdown, target) { + var offset_parent = dropdown.offsetParent(); + // if (offset_parent.length > 0 && /body/i.test(dropdown.offsetParent()[0].nodeName)) { + var position = target.offset(); + position.top -= offset_parent.offset().top; + position.left -= offset_parent.offset().left; + // } else { + // var position = target.position(); + // } + + if (this.small()) { + dropdown.css({ + position : 'absolute', + width: '95%', + 'max-width': 'none', + top: position.top + this.outerHeight(target) + }); + dropdown.css(Foundation.rtl ? 'right':'left', '2.5%'); + } else { + if (!Foundation.rtl && $(window).width() > this.outerWidth(dropdown) + target.offset().left && !this.data_options(target).align_right) { + var left = position.left; + if (dropdown.hasClass('right')) { + dropdown.removeClass('right'); + } + } else { + if (!dropdown.hasClass('right')) { + dropdown.addClass('right'); + } + var left = position.left - (this.outerWidth(dropdown) - this.outerWidth(target)); + } + + dropdown.attr('style', '').css({ + position : 'absolute', + top: position.top + this.outerHeight(target), + left: left + }); + } + + return dropdown; + }, + + small : function () { + return $(window).width() < 768 || $('html').hasClass('lt-ie9'); + }, + + off: function () { + $(this.scope).off('.fndtn.dropdown'); + $('html, body').off('.fndtn.dropdown'); + $(window).off('.fndtn.dropdown'); + $('[data-dropdown-content]').off('.fndtn.dropdown'); + this.settings.init = false; + }, + + reflow : function () {} + }; +}(Foundation.zj, this, this.document)); diff --git a/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.forms.js b/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.forms.js new file mode 100644 index 00000000..b58e92c3 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.forms.js @@ -0,0 +1,556 @@ +(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.forms = { + name : 'forms', + + version: '4.3.2', + + cache: {}, + + settings: { + disable_class: 'no-custom', + last_combo : null + }, + + init: function (scope, method, options) { + + if (typeof method === 'object') { + $.extend(true, this.settings, method); + } + + if (typeof method !== 'string') { + if (!this.settings.init) { + this.events(); + } + + this.assemble(); + + return this.settings.init; + } else { + return this[method].call(this, options); + } + }, + + assemble: function () { + + var forms = this; + + $('form.custom input[type="radio"],[type="checkbox"]', $(this.scope)) + .not('[data-customforms="disabled"]') + .not('.' + this.settings.disable_class) + .each(function(idx, sel){ + forms.set_custom_markup(sel); + }) + .change(function(){ + forms.set_custom_markup(this); + }); + + $('form.custom select', $(this.scope)) + .not('[data-customforms="disabled"]') + .not('.' + this.settings.disable_class) + .not('[multiple=multiple]') + .each(this.append_custom_select); + }, + + events: function () { + var self = this; + + $(this.scope) + .on('click.fndtn.forms', 'form.custom span.custom.checkbox', function (e) { + e.preventDefault(); + e.stopPropagation(); + self.toggle_checkbox($(this)); + }) + .on('click.fndtn.forms', 'form.custom span.custom.radio', function (e) { + e.preventDefault(); + e.stopPropagation(); + self.toggle_radio($(this)); + }) + .on('change.fndtn.forms', 'form.custom select', function (e, force_refresh) { + if ($(this).is('[data-customforms="disabled"]')) return; + self.refresh_custom_select($(this), force_refresh); + }) + .on('click.fndtn.forms', 'form.custom label', function (e) { + if ($(e.target).is('label')) { + var $associatedElement = $('#' + self.escape($(this).attr('for'))).not('[data-customforms="disabled"]'), + $customCheckbox, + $customRadio; + + if ($associatedElement.length !== 0) { + if ($associatedElement.attr('type') === 'checkbox') { + e.preventDefault(); + $customCheckbox = $(this).find('span.custom.checkbox'); + //the checkbox might be outside after the label or inside of another element + if ($customCheckbox.length === 0) { + $customCheckbox = $associatedElement.add(this).siblings('span.custom.checkbox').first(); + } + self.toggle_checkbox($customCheckbox); + } else if ($associatedElement.attr('type') === 'radio') { + e.preventDefault(); + $customRadio = $(this).find('span.custom.radio'); + //the radio might be outside after the label or inside of another element + if ($customRadio.length === 0) { + $customRadio = $associatedElement.add(this).siblings('span.custom.radio').first(); + } + self.toggle_radio($customRadio); + } + } + } + }) + .on('mousedown.fndtn.forms', 'form.custom div.custom.dropdown', function () { + return false; + }) + .on('click.fndtn.forms', 'form.custom div.custom.dropdown a.current, form.custom div.custom.dropdown a.selector', function (e) { + var $this = $(this), + $dropdown = $this.closest('div.custom.dropdown'), + $select = getFirstPrevSibling($dropdown, 'select'); + + // make sure other dropdowns close + if (!$dropdown.hasClass('open')) $(self.scope).trigger('click'); + + e.preventDefault(); + if (false === $select.is(':disabled')) { + $dropdown.toggleClass('open'); + + if ($dropdown.hasClass('open')) { + $(self.scope).on('click.fndtn.forms.customdropdown', function () { + $dropdown.removeClass('open'); + $(self.scope).off('.fndtn.forms.customdropdown'); + }); + } else { + $(self.scope).on('.fndtn.forms.customdropdown'); + } + return false; + } + }) + .on('click.fndtn.forms touchend.fndtn.forms', 'form.custom div.custom.dropdown li', function (e) { + var $this = $(this), + $customDropdown = $this.closest('div.custom.dropdown'), + $select = getFirstPrevSibling($customDropdown, 'select'), + selectedIndex = 0; + + e.preventDefault(); + e.stopPropagation(); + + if (!$(this).hasClass('disabled')) { + $('div.dropdown').not($customDropdown).removeClass('open'); + + var $oldThis = $this.closest('ul') + .find('li.selected'); + $oldThis.removeClass('selected'); + + $this.addClass('selected'); + + $customDropdown.removeClass('open') + .find('a.current') + .text($this.text()); + + $this.closest('ul').find('li').each(function (index) { + if ($this[0] === this) { + selectedIndex = index; + } + }); + $select[0].selectedIndex = selectedIndex; + + //store the old value in data + $select.data('prevalue', $oldThis.html()); + + // Kick off full DOM change event + if (typeof (document.createEvent) != 'undefined') { + var event = document.createEvent('HTMLEvents'); + event.initEvent('change', true, true); + $select[0].dispatchEvent(event); + } else { + $select[0].fireEvent('onchange'); // for IE + } + } + }); + + $(window).on('keydown', function (e) { + var focus = document.activeElement, + self = Foundation.libs.forms, + dropdown = $('.custom.dropdown'), + select = getFirstPrevSibling(dropdown, 'select'), + inputs = $('input,select,textarea,button'); // Zepto-compatible jQuery(":input") + + if (dropdown.length > 0 && dropdown.hasClass('open')) { + e.preventDefault(); + + if (e.which === 9) { + $(inputs[$(inputs).index(select) + 1]).focus(); + dropdown.removeClass('open'); + } + + if (e.which === 13) { + dropdown.find('li.selected').trigger('click'); + } + + if (e.which === 27) { + dropdown.removeClass('open'); + } + + if (e.which >= 65 && e.which <= 90) { + var next = self.go_to(dropdown, e.which), + current = dropdown.find('li.selected'); + + if (next) { + current.removeClass('selected'); + self.scrollTo(next.addClass('selected'), 300); + } + } + + if (e.which === 38) { + var current = dropdown.find('li.selected'), + prev = current.prev(':not(.disabled)'); + + if (prev.length > 0) { + prev.parent()[0].scrollTop = prev.parent().scrollTop() - self.outerHeight(prev); + current.removeClass('selected'); + prev.addClass('selected'); + } + } else if (e.which === 40) { + var current = dropdown.find('li.selected'), + next = current.next(':not(.disabled)'); + + if (next.length > 0) { + next.parent()[0].scrollTop = next.parent().scrollTop() + self.outerHeight(next); + current.removeClass('selected'); + next.addClass('selected'); + } + } + } + }); + + $(window).on('keyup', function (e) { + var focus = document.activeElement, + dropdown = $('.custom.dropdown'); + + if (focus === dropdown.find('.current')[0]) { + dropdown.find('.selector').focus().click(); + } + }); + + this.settings.init = true; + }, + + go_to: function (dropdown, character) { + var lis = dropdown.find('li'), + count = lis.length; + + if (count > 0) { + for (var i = 0; i < count; i++) { + var first_letter = lis.eq(i).text().charAt(0).toLowerCase(); + if (first_letter === String.fromCharCode(character).toLowerCase()) return lis.eq(i); + } + } + }, + + scrollTo: function (el, duration) { + if (duration < 0) return; + var parent = el.parent(); + var li_height = this.outerHeight(el); + var difference = (li_height * (el.index())) - parent.scrollTop(); + var perTick = difference / duration * 10; + + this.scrollToTimerCache = setTimeout(function () { + if (!isNaN(parseInt(perTick, 10))) { + parent[0].scrollTop = parent.scrollTop() + perTick; + this.scrollTo(el, duration - 10); + } + }.bind(this), 10); + }, + + set_custom_markup: function (sel) { + var $this = $(sel), + type = $this.attr('type'), + $span = $this.next('span.custom.' + type); + + if (!$this.parent().hasClass('switch')) { + $this.addClass('hidden-field'); + } + + if ($span.length === 0) { + $span = $('').insertAfter($this); + } + + $span.toggleClass('checked', $this.is(':checked')); + $span.toggleClass('disabled', $this.is(':disabled')); + }, + + append_custom_select: function (idx, sel) { + var self = Foundation.libs.forms, + $this = $(sel), + $customSelect = $this.next('div.custom.dropdown'), + $customList = $customSelect.find('ul'), + $selectCurrent = $customSelect.find(".current"), + $selector = $customSelect.find(".selector"), + $options = $this.find('option'), + $selectedOption = $options.filter(':selected'), + copyClasses = $this.attr('class') ? $this.attr('class').split(' ') : [], + maxWidth = 0, + liHtml = '', + $listItems, + $currentSelect = false; + + if ($customSelect.length === 0) { + var customSelectSize = $this.hasClass('small') ? 'small' : $this.hasClass('medium') ? 'medium' : $this.hasClass('large') ? 'large' : $this.hasClass('expand') ? 'expand' : ''; + + $customSelect = $('
              '); + + $selector = $customSelect.find(".selector"); + $customList = $customSelect.find("ul"); + + liHtml = $options.map(function () { + var copyClasses = $(this).attr('class') ? $(this).attr('class') : ''; + return "
            • " + $(this).html() + "
            • "; + }).get().join(''); + + $customList.append(liHtml); + + $currentSelect = $customSelect + .prepend('' + ($selectedOption.html() || '') + '') + .find(".current"); + + $this.after($customSelect) + .addClass('hidden-field'); + } else { + liHtml = $options.map(function () { + return "
            • " + $(this).html() + "
            • "; + }) + .get().join(''); + + $customList.html('') + .append(liHtml); + + } // endif $customSelect.length === 0 + + self.assign_id($this, $customSelect); + $customSelect.toggleClass('disabled', $this.is(':disabled')); + $listItems = $customList.find('li'); + + // cache list length + self.cache[$customSelect.data('id')] = $listItems.length; + + $options.each(function (index) { + if (this.selected) { + $listItems.eq(index).addClass('selected'); + + if ($currentSelect) { + $currentSelect.html($(this).html()); + } + } + if ($(this).is(':disabled')) { + $listItems.eq(index).addClass('disabled'); + } + }); + + // + // If we're not specifying a predetermined form size. + // + if (!$customSelect.is('.small, .medium, .large, .expand')) { + + // ------------------------------------------------------------------------------------ + // This is a work-around for when elements are contained within hidden parents. + // For example, when custom-form elements are inside of a hidden reveal modal. + // + // We need to display the current custom list element as well as hidden parent elements + // in order to properly calculate the list item element's width property. + // ------------------------------------------------------------------------------------- + + $customSelect.addClass('open'); + // + // Quickly, display all parent elements. + // This should help us calcualate the width of the list item's within the drop down. + // + var self = Foundation.libs.forms; + self.hidden_fix.adjust($customList); + + maxWidth = (self.outerWidth($listItems) > maxWidth) ? self.outerWidth($listItems) : maxWidth; + + Foundation.libs.forms.hidden_fix.reset(); + + $customSelect.removeClass('open'); + + } // endif + + }, + + assign_id: function ($select, $customSelect) { + var id = [+new Date(), Foundation.random_str(5)].join('-'); + $select.attr('data-id', id); + $customSelect.attr('data-id', id); + }, + + refresh_custom_select: function ($select, force_refresh) { + var self = this; + var maxWidth = 0, + $customSelect = $select.next(), + $options = $select.find('option'), + $customList = $customSelect.find('ul'), + $listItems = $customSelect.find('li'); + + if ($options.length !== this.cache[$customSelect.data('id')] || force_refresh) { + $customList.html(''); + + // rebuild and re-populate all at once + var customSelectHtml = ''; + $options.each(function () { + var $this = $(this), thisHtml = $this.html(), thisSelected = this.selected; + customSelectHtml += '
            • ' + thisHtml + '
            • '; + if (thisSelected) { + $customSelect.find('.current').html(thisHtml); + } + }); + + $customList.html(customSelectHtml); + + // fix width + $customSelect.removeAttr('style'); + $customList.removeAttr('style'); + $customSelect.find('li').each(function () { + $customSelect.addClass('open'); + if (self.outerWidth($(this)) > maxWidth) { + maxWidth = self.outerWidth($(this)); + } + $customSelect.removeClass('open'); + }); + + $listItems = $customSelect.find('li'); + // cache list length + this.cache[$customSelect.data('id')] = $listItems.length; + } + }, + + refresh_custom_selection: function ($select) { + var selectedValue = $('option:selected', $select).text(); + $('a.current', $select.next()).text(selectedValue); + }, + + toggle_checkbox: function ($element) { + var $input = $element.prev(), + input = $input[0]; + + if (false === $input.is(':disabled')) { + input.checked = ((input.checked) ? false : true); + $element.toggleClass('checked'); + + $input.trigger('change'); + } + }, + + toggle_radio: function ($element) { + var $input = $element.prev(), + $form = $input.closest('form.custom'), + input = $input[0]; + + if (false === $input.is(':disabled')) { + $form.find('input[type="radio"][name="' + this.escape($input.attr('name')) + '"]') + .next().not($element).removeClass('checked'); + + if (!$element.hasClass('checked')) { + $element.toggleClass('checked'); + } + + input.checked = $element.hasClass('checked'); + + $input.trigger('change'); + } + }, + + escape: function (text) { + if (!text) return ''; + return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); + }, + + hidden_fix: { + /** + * Sets all hidden parent elements and self to visibile. + * + * @method adjust + * @param {jQuery Object} $child + */ + + // We'll use this to temporarily store style properties. + tmp: [], + + // We'll use this to set hidden parent elements. + hidden: null, + + adjust: function ($child) { + // Internal reference. + var _self = this; + + // Set all hidden parent elements, including this element. + _self.hidden = $child.parents(); + _self.hidden = _self.hidden.add($child).filter(":hidden"); + + // Loop through all hidden elements. + _self.hidden.each(function () { + + // Cache the element. + var $elem = $(this); + + // Store the style attribute. + // Undefined if element doesn't have a style attribute. + _self.tmp.push($elem.attr('style')); + + // Set the element's display property to block, + // but ensure it's visibility is hidden. + $elem.css({ + 'visibility': 'hidden', + 'display': 'block' + }); + }); + + }, // end adjust + + /** + * Resets the elements previous state. + * + * @method reset + */ + reset: function () { + // Internal reference. + var _self = this; + // Loop through our hidden element collection. + _self.hidden.each(function (i) { + // Cache this element. + var $elem = $(this), + _tmp = _self.tmp[i]; // Get the stored 'style' value for this element. + + // If the stored value is undefined. + if (_tmp === undefined) + // Remove the style attribute. + $elem.removeAttr('style'); + else + // Otherwise, reset the element style attribute. + $elem.attr('style', _tmp); + }); + // Reset the tmp array. + _self.tmp = []; + // Reset the hidden elements variable. + _self.hidden = null; + + } // end reset + }, + + off: function () { + $(this.scope).off('.fndtn.forms'); + }, + + reflow : function () {} + }; + + var getFirstPrevSibling = function($el, selector) { + var $el = $el.prev(); + while ($el.length) { + if ($el.is(selector)) return $el; + $el = $el.prev(); + } + return $(); + }; +}(Foundation.zj, this, this.document)); diff --git a/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.interchange.js b/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.interchange.js new file mode 100644 index 00000000..28c5acb3 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.interchange.js @@ -0,0 +1,280 @@ +/*jslint unparam: true, browser: true, indent: 2 */ + +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.interchange = { + name : 'interchange', + + version : '4.2.4', + + cache : {}, + + images_loaded : false, + + settings : { + load_attr : 'interchange', + + named_queries : { + 'default' : 'only screen and (min-width: 1px)', + small : 'only screen and (min-width: 768px)', + medium : 'only screen and (min-width: 1280px)', + large : 'only screen and (min-width: 1440px)', + landscape : 'only screen and (orientation: landscape)', + portrait : 'only screen and (orientation: portrait)', + retina : 'only screen and (-webkit-min-device-pixel-ratio: 2),' + + 'only screen and (min--moz-device-pixel-ratio: 2),' + + 'only screen and (-o-min-device-pixel-ratio: 2/1),' + + 'only screen and (min-device-pixel-ratio: 2),' + + 'only screen and (min-resolution: 192dpi),' + + 'only screen and (min-resolution: 2dppx)' + }, + + directives : { + replace: function (el, path) { + if (/IMG/.test(el[0].nodeName)) { + var orig_path = el[0].src; + + if (new RegExp(path, 'i').test(orig_path)) return; + + el[0].src = path; + + return el.trigger('replace', [el[0].src, orig_path]); + } + } + } + }, + + init : function (scope, method, options) { + Foundation.inherit(this, 'throttle'); + + if (typeof method === 'object') { + $.extend(true, this.settings, method); + } + + this.events(); + this.images(); + + if (typeof method !== 'string') { + return this.settings.init; + } else { + return this[method].call(this, options); + } + }, + + events : function () { + var self = this; + + $(window).on('resize.fndtn.interchange', self.throttle(function () { + self.resize.call(self); + }, 50)); + }, + + resize : function () { + var cache = this.cache; + + if(!this.images_loaded) { + setTimeout($.proxy(this.resize, this), 50); + return; + } + + for (var uuid in cache) { + if (cache.hasOwnProperty(uuid)) { + var passed = this.results(uuid, cache[uuid]); + + if (passed) { + this.settings.directives[passed + .scenario[1]](passed.el, passed.scenario[0]); + } + } + } + + }, + + results : function (uuid, scenarios) { + var count = scenarios.length; + + if (count > 0) { + var el = $('[data-uuid="' + uuid + '"]'); + + for (var i = count - 1; i >= 0; i--) { + var mq, rule = scenarios[i][2]; + if (this.settings.named_queries.hasOwnProperty(rule)) { + mq = matchMedia(this.settings.named_queries[rule]); + } else { + mq = matchMedia(rule); + } + if (mq.matches) { + return {el: el, scenario: scenarios[i]}; + } + } + } + + return false; + }, + + images : function (force_update) { + if (typeof this.cached_images === 'undefined' || force_update) { + return this.update_images(); + } + + return this.cached_images; + }, + + update_images : function () { + var images = document.getElementsByTagName('img'), + count = images.length, + loaded_count = 0, + data_attr = 'data-' + this.settings.load_attr; + + this.cached_images = []; + this.images_loaded = false; + + for (var i = count - 1; i >= 0; i--) { + this.loaded($(images[i]), function (image) { + loaded_count++; + if (image) { + var str = image.getAttribute(data_attr) || ''; + + if (str.length > 0) { + this.cached_images.push(image); + } + } + + if(loaded_count === count) { + this.images_loaded = true; + this.enhance(); + } + }.bind(this)); + } + + return 'deferred'; + }, + + // based on jquery.imageready.js + // @weblinc, @jsantell, (c) 2012 + + loaded : function (image, callback) { + function loaded () { + callback(image[0]); + } + + function bindLoad () { + this.one('load', loaded); + + if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) { + var src = this.attr( 'src' ), + param = src.match( /\?/ ) ? '&' : '?'; + + param += 'random=' + (new Date()).getTime(); + this.attr('src', src + param); + } + } + + if (!image.attr('src')) { + loaded(); + return; + } + + if (image[0].complete || image[0].readyState === 4) { + loaded(); + } else { + bindLoad.call(image); + } + }, + + enhance : function () { + var count = this.images().length; + + for (var i = count - 1; i >= 0; i--) { + this._object($(this.images()[i])); + } + + return $(window).trigger('resize'); + }, + + parse_params : function (path, directive, mq) { + return [this.trim(path), this.convert_directive(directive), this.trim(mq)]; + }, + + convert_directive : function (directive) { + var trimmed = this.trim(directive); + + if (trimmed.length > 0) { + return trimmed; + } + + return 'replace'; + }, + + _object : function(el) { + var raw_arr = this.parse_data_attr(el), + scenarios = [], count = raw_arr.length; + + if (count > 0) { + for (var i = count - 1; i >= 0; i--) { + var split = raw_arr[i].split(/\((.*?)(\))$/); + + if (split.length > 1) { + var cached_split = split[0].split(','), + params = this.parse_params(cached_split[0], + cached_split[1], split[1]); + + scenarios.push(params); + } + } + } + + return this.store(el, scenarios); + }, + + uuid : function (separator) { + var delim = separator || "-"; + + function S4() { + return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1); + } + + return (S4() + S4() + delim + S4() + delim + S4() + + delim + S4() + delim + S4() + S4() + S4()); + }, + + store : function (el, scenarios) { + var uuid = this.uuid(), + current_uuid = el.data('uuid'); + + if (current_uuid) return this.cache[current_uuid]; + + el.attr('data-uuid', uuid); + + return this.cache[uuid] = scenarios; + }, + + trim : function(str) { + if (typeof str === 'string') { + return $.trim(str); + } + + return str; + }, + + parse_data_attr : function (el) { + var raw = el.data(this.settings.load_attr).split(/\[(.*?)\]/), + count = raw.length, output = []; + + for (var i = count - 1; i >= 0; i--) { + if (raw[i].replace(/[\W\d]+/, '').length > 4) { + output.push(raw[i]); + } + } + + return output; + }, + + reflow : function () { + this.images(true); + } + + }; + +}(Foundation.zj, this, this.document)); diff --git a/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.joyride.js b/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.joyride.js new file mode 100644 index 00000000..627561c4 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.joyride.js @@ -0,0 +1,852 @@ +/*jslint unparam: true, browser: true, indent: 2 */ + +(function ($, window, document, undefined) { + 'use strict'; + + var Modernizr = Modernizr || false; + + Foundation.libs.joyride = { + name : 'joyride', + + version : '4.3.2', + + defaults : { + expose : false, // turn on or off the expose feature + modal : false, // Whether to cover page with modal during the tour + tipLocation : 'bottom', // 'top' or 'bottom' in relation to parent + nubPosition : 'auto', // override on a per tooltip bases + scrollSpeed : 300, // Page scrolling speed in milliseconds, 0 = no scroll animation + timer : 0, // 0 = no timer , all other numbers = timer in milliseconds + startTimerOnClick : true, // true or false - true requires clicking the first button start the timer + startOffset : 0, // the index of the tooltip you want to start on (index of the li) + nextButton : true, // true or false to control whether a next button is used + tipAnimation : 'fade', // 'pop' or 'fade' in each tip + pauseAfter : [], // array of indexes where to pause the tour after + exposed : [], // array of expose elements + tipAnimationFadeSpeed: 300, // when tipAnimation = 'fade' this is speed in milliseconds for the transition + cookieMonster : false, // true or false to control whether cookies are used + cookieName : 'joyride', // Name the cookie you'll use + cookieDomain : false, // Will this cookie be attached to a domain, ie. '.notableapp.com' + cookieExpires : 365, // set when you would like the cookie to expire. + tipContainer : 'body', // Where will the tip be attached + postRideCallback : function (){}, // A method to call once the tour closes (canceled or complete) + postStepCallback : function (){}, // A method to call after each step + preStepCallback : function (){}, // A method to call before each step + preRideCallback : function (){}, // A method to call before the tour starts (passed index, tip, and cloned exposed element) + postExposeCallback : function (){}, // A method to call after an element has been exposed + template : { // HTML segments for tip layout + link : '×', + timer : '
              ', + tip : '
              ', + wrapper : '
              ', + button : '', + modal : '
              ', + expose : '
              ', + exposeCover: '
              ' + }, + exposeAddClass : '' // One or more space-separated class names to be added to exposed element + }, + + settings : {}, + + init : function (scope, method, options) { + this.scope = scope || this.scope; + Foundation.inherit(this, 'throttle data_options scrollTo scrollLeft delay'); + + if (typeof method === 'object') { + $.extend(true, this.settings, this.defaults, method); + } else { + $.extend(true, this.settings, this.defaults, options); + } + + if (typeof method !== 'string') { + if (!this.settings.init) this.events(); + + return this.settings.init; + } else { + return this[method].call(this, options); + } + }, + + events : function () { + var self = this; + + $(this.scope) + .on('click.joyride', '.joyride-next-tip, .joyride-modal-bg', function (e) { + e.preventDefault(); + + if (this.settings.$li.next().length < 1) { + this.end(); + } else if (this.settings.timer > 0) { + clearTimeout(this.settings.automate); + this.hide(); + this.show(); + this.startTimer(); + } else { + this.hide(); + this.show(); + } + + }.bind(this)) + + .on('click.joyride', '.joyride-close-tip', function (e) { + e.preventDefault(); + this.end(); + }.bind(this)); + + $(window).on('resize.fndtn.joyride', self.throttle(function () { + if ($('[data-joyride]').length > 0 && self.settings.$next_tip) { + if (self.settings.exposed.length > 0) { + var $els = $(self.settings.exposed); + + $els.each(function () { + var $this = $(this); + self.un_expose($this); + self.expose($this); + }); + } + + if (self.is_phone()) { + self.pos_phone(); + } else { + self.pos_default(false, true); + } + } + }, 100)); + + this.settings.init = true; + }, + + start : function () { + var self = this, + $this = $(this.scope).find('[data-joyride]'), + integer_settings = ['timer', 'scrollSpeed', 'startOffset', 'tipAnimationFadeSpeed', 'cookieExpires'], + int_settings_count = integer_settings.length; + + if (!this.settings.init) this.events(); + + // non configureable settings + this.settings.$content_el = $this; + this.settings.$body = $(this.settings.tipContainer); + this.settings.body_offset = $(this.settings.tipContainer).position(); + this.settings.$tip_content = this.settings.$content_el.find('> li'); + this.settings.paused = false; + this.settings.attempts = 0; + + this.settings.tipLocationPatterns = { + top: ['bottom'], + bottom: [], // bottom should not need to be repositioned + left: ['right', 'top', 'bottom'], + right: ['left', 'top', 'bottom'] + }; + + // can we create cookies? + if (typeof $.cookie !== 'function') { + this.settings.cookieMonster = false; + } + + // generate the tips and insert into dom. + if (!this.settings.cookieMonster || this.settings.cookieMonster && $.cookie(this.settings.cookieName) === null) { + this.settings.$tip_content.each(function (index) { + var $this = $(this); + $.extend(true, self.settings, self.data_options($this)); + // Make sure that settings parsed from data_options are integers where necessary + for (var i = int_settings_count - 1; i >= 0; i--) { + self.settings[integer_settings[i]] = parseInt(self.settings[integer_settings[i]], 10); + } + self.create({$li : $this, index : index}); + }); + + // show first tip + if (!this.settings.startTimerOnClick && this.settings.timer > 0) { + this.show('init'); + this.startTimer(); + } else { + this.show('init'); + } + + } + }, + + resume : function () { + this.set_li(); + this.show(); + }, + + tip_template : function (opts) { + var $blank, content; + + opts.tip_class = opts.tip_class || ''; + + $blank = $(this.settings.template.tip).addClass(opts.tip_class); + content = $.trim($(opts.li).html()) + + this.button_text(opts.button_text) + + this.settings.template.link + + this.timer_instance(opts.index); + + $blank.append($(this.settings.template.wrapper)); + $blank.first().attr('data-index', opts.index); + $('.joyride-content-wrapper', $blank).append(content); + + return $blank[0]; + }, + + timer_instance : function (index) { + var txt; + + if ((index === 0 && this.settings.startTimerOnClick && this.settings.timer > 0) || this.settings.timer === 0) { + txt = ''; + } else { + txt = this.outerHTML($(this.settings.template.timer)[0]); + } + return txt; + }, + + button_text : function (txt) { + if (this.settings.nextButton) { + txt = $.trim(txt) || 'Next'; + txt = this.outerHTML($(this.settings.template.button).append(txt)[0]); + } else { + txt = ''; + } + return txt; + }, + + create : function (opts) { + var buttonText = opts.$li.attr('data-button') || opts.$li.attr('data-text'), + tipClass = opts.$li.attr('class'), + $tip_content = $(this.tip_template({ + tip_class : tipClass, + index : opts.index, + button_text : buttonText, + li : opts.$li + })); + + $(this.settings.tipContainer).append($tip_content); + }, + + show : function (init) { + var $timer = null; + + // are we paused? + if (this.settings.$li === undefined + || ($.inArray(this.settings.$li.index(), this.settings.pauseAfter) === -1)) { + + // don't go to the next li if the tour was paused + if (this.settings.paused) { + this.settings.paused = false; + } else { + this.set_li(init); + } + + this.settings.attempts = 0; + + if (this.settings.$li.length && this.settings.$target.length > 0) { + if (init) { //run when we first start + this.settings.preRideCallback(this.settings.$li.index(), this.settings.$next_tip); + if (this.settings.modal) { + this.show_modal(); + } + } + + this.settings.preStepCallback(this.settings.$li.index(), this.settings.$next_tip); + + if (this.settings.modal && this.settings.expose) { + this.expose(); + } + + this.settings.tipSettings = $.extend(this.settings, this.data_options(this.settings.$li)); + + this.settings.timer = parseInt(this.settings.timer, 10); + + this.settings.tipSettings.tipLocationPattern = this.settings.tipLocationPatterns[this.settings.tipSettings.tipLocation]; + + // scroll if not modal + if (!/body/i.test(this.settings.$target.selector)) { + this.scroll_to(); + } + + if (this.is_phone()) { + this.pos_phone(true); + } else { + this.pos_default(true); + } + + $timer = this.settings.$next_tip.find('.joyride-timer-indicator'); + + if (/pop/i.test(this.settings.tipAnimation)) { + + $timer.width(0); + + if (this.settings.timer > 0) { + + this.settings.$next_tip.show(); + + this.delay(function () { + $timer.animate({ + width: $timer.parent().width() + }, this.settings.timer, 'linear'); + }.bind(this), this.settings.tipAnimationFadeSpeed); + + } else { + this.settings.$next_tip.show(); + + } + + + } else if (/fade/i.test(this.settings.tipAnimation)) { + + $timer.width(0); + + if (this.settings.timer > 0) { + + this.settings.$next_tip + .fadeIn(this.settings.tipAnimationFadeSpeed) + .show(); + + this.delay(function () { + $timer.animate({ + width: $timer.parent().width() + }, this.settings.timer, 'linear'); + }.bind(this), this.settings.tipAnimationFadeSpeed); + + } else { + this.settings.$next_tip.fadeIn(this.settings.tipAnimationFadeSpeed); + + } + } + + this.settings.$current_tip = this.settings.$next_tip; + + // skip non-existant targets + } else if (this.settings.$li && this.settings.$target.length < 1) { + + this.show(); + + } else { + + this.end(); + + } + } else { + + this.settings.paused = true; + + } + + }, + + is_phone : function () { + if (Modernizr) { + return Modernizr.mq('only screen and (max-width: 767px)') || $('.lt-ie9').length > 0; + } + + return ($(window).width() < 767); + }, + + hide : function () { + if (this.settings.modal && this.settings.expose) { + this.un_expose(); + } + + if (!this.settings.modal) { + $('.joyride-modal-bg').hide(); + } + + // Prevent scroll bouncing...wait to remove from layout + this.settings.$current_tip.css('visibility', 'hidden'); + setTimeout($.proxy(function() { + this.hide(); + this.css('visibility', 'visible'); + }, this.settings.$current_tip), 0); + this.settings.postStepCallback(this.settings.$li.index(), + this.settings.$current_tip); + }, + + set_li : function (init) { + if (init) { + this.settings.$li = this.settings.$tip_content.eq(this.settings.startOffset); + this.set_next_tip(); + this.settings.$current_tip = this.settings.$next_tip; + } else { + this.settings.$li = this.settings.$li.next(); + this.set_next_tip(); + } + + this.set_target(); + }, + + set_next_tip : function () { + this.settings.$next_tip = $(".joyride-tip-guide[data-index='" + this.settings.$li.index() + "']"); + this.settings.$next_tip.data('closed', ''); + }, + + set_target : function () { + var cl = this.settings.$li.attr('data-class'), + id = this.settings.$li.attr('data-id'), + $sel = function () { + if (id) { + return $(document.getElementById(id)); + } else if (cl) { + return $('.' + cl).first(); + } else { + return $('body'); + } + }; + + this.settings.$target = $sel(); + }, + + scroll_to : function () { + var window_half, tipOffset; + + window_half = $(window).height() / 2; + tipOffset = Math.ceil(this.settings.$target.offset().top - window_half + this.outerHeight(this.settings.$next_tip)); + if (tipOffset > 0) { + this.scrollTo($('html, body'), tipOffset, this.settings.scrollSpeed); + } + }, + + paused : function () { + return ($.inArray((this.settings.$li.index() + 1), this.settings.pauseAfter) === -1); + }, + + restart : function () { + this.hide(); + this.settings.$li = undefined; + this.show('init'); + }, + + pos_default : function (init, resizing) { + var half_fold = Math.ceil($(window).height() / 2), + tip_position = this.settings.$next_tip.offset(), + $nub = this.settings.$next_tip.find('.joyride-nub'), + nub_width = Math.ceil(this.outerWidth($nub) / 2), + nub_height = Math.ceil(this.outerHeight($nub) / 2), + toggle = init || false; + + // tip must not be "display: none" to calculate position + if (toggle) { + this.settings.$next_tip.css('visibility', 'hidden'); + this.settings.$next_tip.show(); + } + + if (typeof resizing === 'undefined') { + resizing = false; + } + + if (!/body/i.test(this.settings.$target.selector)) { + + if (this.bottom()) { + var leftOffset = this.settings.$target.offset().left; + if (Foundation.rtl) { + leftOffset = this.settings.$target.offset().width - this.settings.$next_tip.width() + leftOffset; + } + this.settings.$next_tip.css({ + top: (this.settings.$target.offset().top + nub_height + this.outerHeight(this.settings.$target)), + left: leftOffset}); + + this.nub_position($nub, this.settings.tipSettings.nubPosition, 'top'); + + } else if (this.top()) { + var leftOffset = this.settings.$target.offset().left; + if (Foundation.rtl) { + leftOffset = this.settings.$target.offset().width - this.settings.$next_tip.width() + leftOffset; + } + this.settings.$next_tip.css({ + top: (this.settings.$target.offset().top - this.outerHeight(this.settings.$next_tip) - nub_height), + left: leftOffset}); + + this.nub_position($nub, this.settings.tipSettings.nubPosition, 'bottom'); + + } else if (this.right()) { + + this.settings.$next_tip.css({ + top: this.settings.$target.offset().top, + left: (this.outerWidth(this.settings.$target) + this.settings.$target.offset().left + nub_width)}); + + this.nub_position($nub, this.settings.tipSettings.nubPosition, 'left'); + + } else if (this.left()) { + + this.settings.$next_tip.css({ + top: this.settings.$target.offset().top, + left: (this.settings.$target.offset().left - this.outerWidth(this.settings.$next_tip) - nub_width)}); + + this.nub_position($nub, this.settings.tipSettings.nubPosition, 'right'); + + } + + if (!this.visible(this.corners(this.settings.$next_tip)) && this.settings.attempts < this.settings.tipSettings.tipLocationPattern.length) { + + $nub.removeClass('bottom') + .removeClass('top') + .removeClass('right') + .removeClass('left'); + + this.settings.tipSettings.tipLocation = this.settings.tipSettings.tipLocationPattern[this.settings.attempts]; + + this.settings.attempts++; + + this.pos_default(); + + } + + } else if (this.settings.$li.length) { + + this.pos_modal($nub); + + } + + if (toggle) { + this.settings.$next_tip.hide(); + this.settings.$next_tip.css('visibility', 'visible'); + } + + }, + + pos_phone : function (init) { + var tip_height = this.outerHeight(this.settings.$next_tip), + tip_offset = this.settings.$next_tip.offset(), + target_height = this.outerHeight(this.settings.$target), + $nub = $('.joyride-nub', this.settings.$next_tip), + nub_height = Math.ceil(this.outerHeight($nub) / 2), + toggle = init || false; + + $nub.removeClass('bottom') + .removeClass('top') + .removeClass('right') + .removeClass('left'); + + if (toggle) { + this.settings.$next_tip.css('visibility', 'hidden'); + this.settings.$next_tip.show(); + } + + if (!/body/i.test(this.settings.$target.selector)) { + + if (this.top()) { + + this.settings.$next_tip.offset({top: this.settings.$target.offset().top - tip_height - nub_height}); + $nub.addClass('bottom'); + + } else { + + this.settings.$next_tip.offset({top: this.settings.$target.offset().top + target_height + nub_height}); + $nub.addClass('top'); + + } + + } else if (this.settings.$li.length) { + this.pos_modal($nub); + } + + if (toggle) { + this.settings.$next_tip.hide(); + this.settings.$next_tip.css('visibility', 'visible'); + } + }, + + pos_modal : function ($nub) { + this.center(); + $nub.hide(); + + this.show_modal(); + }, + + show_modal : function () { + if (!this.settings.$next_tip.data('closed')) { + var joyridemodalbg = $('.joyride-modal-bg'); + if (joyridemodalbg.length < 1) { + $('body').append(this.settings.template.modal).show(); + } + + if (/pop/i.test(this.settings.tipAnimation)) { + joyridemodalbg.show(); + } else { + joyridemodalbg.fadeIn(this.settings.tipAnimationFadeSpeed); + } + } + }, + + expose : function () { + var expose, + exposeCover, + el, + origCSS, + origClasses, + randId = 'expose-'+Math.floor(Math.random()*10000); + + if (arguments.length > 0 && arguments[0] instanceof $) { + el = arguments[0]; + } else if(this.settings.$target && !/body/i.test(this.settings.$target.selector)){ + el = this.settings.$target; + } else { + return false; + } + + if(el.length < 1){ + if(window.console){ + console.error('element not valid', el); + } + return false; + } + + expose = $(this.settings.template.expose); + this.settings.$body.append(expose); + expose.css({ + top: el.offset().top, + left: el.offset().left, + width: this.outerWidth(el, true), + height: this.outerHeight(el, true) + }); + + exposeCover = $(this.settings.template.exposeCover); + + origCSS = { + zIndex: el.css('z-index'), + position: el.css('position') + }; + + origClasses = el.attr('class') == null ? '' : el.attr('class'); + + el.css('z-index',parseInt(expose.css('z-index'))+1); + + if (origCSS.position == 'static') { + el.css('position','relative'); + } + + el.data('expose-css',origCSS); + el.data('orig-class', origClasses); + el.attr('class', origClasses + ' ' + this.settings.exposeAddClass); + + exposeCover.css({ + top: el.offset().top, + left: el.offset().left, + width: this.outerWidth(el, true), + height: this.outerHeight(el, true) + }); + + this.settings.$body.append(exposeCover); + expose.addClass(randId); + exposeCover.addClass(randId); + el.data('expose', randId); + this.settings.postExposeCallback(this.settings.$li.index(), this.settings.$next_tip, el); + this.add_exposed(el); + }, + + un_expose : function () { + var exposeId, + el, + expose , + origCSS, + origClasses, + clearAll = false; + + if (arguments.length > 0 && arguments[0] instanceof $) { + el = arguments[0]; + } else if(this.settings.$target && !/body/i.test(this.settings.$target.selector)){ + el = this.settings.$target; + } else { + return false; + } + + if(el.length < 1){ + if (window.console) { + console.error('element not valid', el); + } + return false; + } + + exposeId = el.data('expose'); + expose = $('.' + exposeId); + + if (arguments.length > 1) { + clearAll = arguments[1]; + } + + if (clearAll === true) { + $('.joyride-expose-wrapper,.joyride-expose-cover').remove(); + } else { + expose.remove(); + } + + origCSS = el.data('expose-css'); + + if (origCSS.zIndex == 'auto') { + el.css('z-index', ''); + } else { + el.css('z-index', origCSS.zIndex); + } + + if (origCSS.position != el.css('position')) { + if(origCSS.position == 'static') {// this is default, no need to set it. + el.css('position', ''); + } else { + el.css('position', origCSS.position); + } + } + + origClasses = el.data('orig-class'); + el.attr('class', origClasses); + el.removeData('orig-classes'); + + el.removeData('expose'); + el.removeData('expose-z-index'); + this.remove_exposed(el); + }, + + add_exposed: function(el){ + this.settings.exposed = this.settings.exposed || []; + if (el instanceof $ || typeof el === 'object') { + this.settings.exposed.push(el[0]); + } else if (typeof el == 'string') { + this.settings.exposed.push(el); + } + }, + + remove_exposed: function(el){ + var search, count; + if (el instanceof $) { + search = el[0] + } else if (typeof el == 'string'){ + search = el; + } + + this.settings.exposed = this.settings.exposed || []; + count = this.settings.exposed.length; + + for (var i=0; i < count; i++) { + if (this.settings.exposed[i] == search) { + this.settings.exposed.splice(i, 1); + return; + } + } + }, + + center : function () { + var $w = $(window); + + this.settings.$next_tip.css({ + top : ((($w.height() - this.outerHeight(this.settings.$next_tip)) / 2) + $w.scrollTop()), + left : ((($w.width() - this.outerWidth(this.settings.$next_tip)) / 2) + this.scrollLeft($w)) + }); + + return true; + }, + + bottom : function () { + return /bottom/i.test(this.settings.tipSettings.tipLocation); + }, + + top : function () { + return /top/i.test(this.settings.tipSettings.tipLocation); + }, + + right : function () { + return /right/i.test(this.settings.tipSettings.tipLocation); + }, + + left : function () { + return /left/i.test(this.settings.tipSettings.tipLocation); + }, + + corners : function (el) { + var w = $(window), + window_half = w.height() / 2, + //using this to calculate since scroll may not have finished yet. + tipOffset = Math.ceil(this.settings.$target.offset().top - window_half + this.settings.$next_tip.outerHeight()), + right = w.width() + this.scrollLeft(w), + offsetBottom = w.height() + tipOffset, + bottom = w.height() + w.scrollTop(), + top = w.scrollTop(); + + if (tipOffset < top) { + if (tipOffset < 0) { + top = 0; + } else { + top = tipOffset; + } + } + + if (offsetBottom > bottom) { + bottom = offsetBottom; + } + + return [ + el.offset().top < top, + right < el.offset().left + el.outerWidth(), + bottom < el.offset().top + el.outerHeight(), + this.scrollLeft(w) > el.offset().left + ]; + }, + + visible : function (hidden_corners) { + var i = hidden_corners.length; + + while (i--) { + if (hidden_corners[i]) return false; + } + + return true; + }, + + nub_position : function (nub, pos, def) { + if (pos === 'auto') { + nub.addClass(def); + } else { + nub.addClass(pos); + } + }, + + startTimer : function () { + if (this.settings.$li.length) { + this.settings.automate = setTimeout(function () { + this.hide(); + this.show(); + this.startTimer(); + }.bind(this), this.settings.timer); + } else { + clearTimeout(this.settings.automate); + } + }, + + end : function () { + if (this.settings.cookieMonster) { + $.cookie(this.settings.cookieName, 'ridden', { expires: this.settings.cookieExpires, domain: this.settings.cookieDomain }); + } + + if (this.settings.timer > 0) { + clearTimeout(this.settings.automate); + } + + if (this.settings.modal && this.settings.expose) { + this.un_expose(); + } + + this.settings.$next_tip.data('closed', true); + + $('.joyride-modal-bg').hide(); + this.settings.$current_tip.hide(); + this.settings.postStepCallback(this.settings.$li.index(), this.settings.$current_tip); + this.settings.postRideCallback(this.settings.$li.index(), this.settings.$current_tip); + $('.joyride-tip-guide').remove(); + }, + + outerHTML : function (el) { + // support FireFox < 11 + return el.outerHTML || new XMLSerializer().serializeToString(el); + }, + + off : function () { + $(this.scope).off('.joyride'); + $(window).off('.joyride'); + $('.joyride-close-tip, .joyride-next-tip, .joyride-modal-bg').off('.joyride'); + $('.joyride-tip-guide, .joyride-modal-bg').remove(); + clearTimeout(this.settings.automate); + this.settings = {}; + }, + + reflow : function () {} + }; +}(Foundation.zj, this, this.document)); diff --git a/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.js b/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.js new file mode 100644 index 00000000..e9050c54 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.js @@ -0,0 +1,464 @@ +/* + * Foundation Responsive Library + * http://foundation.zurb.com + * Copyright 2013, ZURB + * Free to use under the MIT license. + * http://www.opensource.org/licenses/mit-license.php +*/ + +/*jslint unparam: true, browser: true, indent: 2 */ + +// Accommodate running jQuery or Zepto in noConflict() mode by +// using an anonymous function to redefine the $ shorthand name. +// See http://docs.jquery.com/Using_jQuery_with_Other_Libraries +// and http://zeptojs.com/ +var libFuncName = null; + +if (typeof jQuery === "undefined" && + typeof Zepto === "undefined" && + typeof $ === "function") { + libFuncName = $; +} else if (typeof jQuery === "function") { + libFuncName = jQuery; +} else if (typeof Zepto === "function") { + libFuncName = Zepto; +} else { + throw new TypeError(); +} + +(function ($, window, document, undefined) { + 'use strict'; + + /* + matchMedia() polyfill - Test a CSS media + type/query in JS. Authors & copyright (c) 2012: + Scott Jehl, Paul Irish, Nicholas Zakas. + Dual MIT/BSD license + + https://github.com/paulirish/matchMedia.js + */ + + $('head').append(''); + $('head').append(''); + $('head').append(''); + + window.matchMedia = window.matchMedia || (function( doc, undefined ) { + + "use strict"; + + var bool, + docElem = doc.documentElement, + refNode = docElem.firstElementChild || docElem.firstChild, + // fakeBody required for + fakeBody = doc.createElement( "body" ), + div = doc.createElement( "div" ); + + div.id = "mq-test-1"; + div.style.cssText = "position:absolute;top:-100em"; + fakeBody.style.background = "none"; + fakeBody.appendChild(div); + + return function(q){ + + div.innerHTML = "­"; + + docElem.insertBefore( fakeBody, refNode ); + bool = div.offsetWidth === 42; + docElem.removeChild( fakeBody ); + + return { + matches: bool, + media: q + }; + + }; + + }( document )); + + // add dusty browser stuff + if (!Array.prototype.filter) { + Array.prototype.filter = function(fun /*, thisp */) { + "use strict"; + + if (this == null) { + throw new TypeError(); + } + + var t = Object(this), + len = t.length >>> 0; + if (typeof fun !== "function") { + return; + } + + var res = [], + thisp = arguments[1]; + for (var i = 0; i < len; i++) { + if (i in t) { + var val = t[i]; // in case fun mutates this + if (fun && fun.call(thisp, val, i, t)) { + res.push(val); + } + } + } + + return res; + } + } + + if (!Function.prototype.bind) { + Function.prototype.bind = function (oThis) { + if (typeof this !== "function") { + // closest thing possible to the ECMAScript 5 internal IsCallable function + throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable"); + } + + var aArgs = Array.prototype.slice.call(arguments, 1), + fToBind = this, + fNOP = function () {}, + fBound = function () { + return fToBind.apply(this instanceof fNOP && oThis + ? this + : oThis, + aArgs.concat(Array.prototype.slice.call(arguments))); + }; + + fNOP.prototype = this.prototype; + fBound.prototype = new fNOP(); + + return fBound; + }; + } + + if (!Array.prototype.indexOf) { + Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) { + "use strict"; + if (this == null) { + throw new TypeError(); + } + var t = Object(this); + var len = t.length >>> 0; + if (len === 0) { + return -1; + } + var n = 0; + if (arguments.length > 1) { + n = Number(arguments[1]); + if (n != n) { // shortcut for verifying if it's NaN + n = 0; + } else if (n != 0 && n != Infinity && n != -Infinity) { + n = (n > 0 || -1) * Math.floor(Math.abs(n)); + } + } + if (n >= len) { + return -1; + } + var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); + for (; k < len; k++) { + if (k in t && t[k] === searchElement) { + return k; + } + } + return -1; + } + } + + // fake stop() for zepto. + $.fn.stop = $.fn.stop || function() { + return this; + }; + + window.Foundation = { + name : 'Foundation', + + version : '4.3.2', + + cache : {}, + + media_queries : { + small : $('.foundation-mq-small').css('font-family').replace(/\'/g, ''), + medium : $('.foundation-mq-medium').css('font-family').replace(/\'/g, ''), + large : $('.foundation-mq-large').css('font-family').replace(/\'/g, '') + }, + + stylesheet : $('').appendTo('head')[0].sheet, + + init : function (scope, libraries, method, options, response, /* internal */ nc) { + var library_arr, + args = [scope, method, options, response], + responses = [], + nc = nc || false; + + // disable library error catching, + // used for development only + if (nc) this.nc = nc; + + // check RTL + this.rtl = /rtl/i.test($('html').attr('dir')); + + // set foundation global scope + this.scope = scope || this.scope; + + if (libraries && typeof libraries === 'string' && !/reflow/i.test(libraries)) { + if (/off/i.test(libraries)) return this.off(); + + library_arr = libraries.split(' '); + + if (library_arr.length > 0) { + for (var i = library_arr.length - 1; i >= 0; i--) { + responses.push(this.init_lib(library_arr[i], args)); + } + } + } else { + if (/reflow/i.test(libraries)) args[1] = 'reflow'; + + for (var lib in this.libs) { + responses.push(this.init_lib(lib, args)); + } + } + + // if first argument is callback, add to args + if (typeof libraries === 'function') { + args.unshift(libraries); + } + + return this.response_obj(responses, args); + }, + + response_obj : function (response_arr, args) { + for (var i = 0, len = args.length; i < len; i++) { + if (typeof args[i] === 'function') { + return args[i]({ + errors: response_arr.filter(function (s) { + if (typeof s === 'string') return s; + }) + }); + } + } + + return response_arr; + }, + + init_lib : function (lib, args) { + return this.trap(function () { + if (this.libs.hasOwnProperty(lib)) { + this.patch(this.libs[lib]); + return this.libs[lib].init.apply(this.libs[lib], args); + } else { + return function () {}; + } + }.bind(this), lib); + }, + + trap : function (fun, lib) { + if (!this.nc) { + try { + return fun(); + } catch (e) { + return this.error({name: lib, message: 'could not be initialized', more: e.name + ' ' + e.message}); + } + } + + return fun(); + }, + + patch : function (lib) { + this.fix_outer(lib); + lib.scope = this.scope; + lib.rtl = this.rtl; + }, + + inherit : function (scope, methods) { + var methods_arr = methods.split(' '); + + for (var i = methods_arr.length - 1; i >= 0; i--) { + if (this.lib_methods.hasOwnProperty(methods_arr[i])) { + this.libs[scope.name][methods_arr[i]] = this.lib_methods[methods_arr[i]]; + } + } + }, + + random_str : function (length) { + var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split(''); + + if (!length) { + length = Math.floor(Math.random() * chars.length); + } + + var str = ''; + for (var i = 0; i < length; i++) { + str += chars[Math.floor(Math.random() * chars.length)]; + } + return str; + }, + + libs : {}, + + // methods that can be inherited in libraries + lib_methods : { + set_data : function (node, data) { + // this.name references the name of the library calling this method + var id = [this.name,+new Date(),Foundation.random_str(5)].join('-'); + + Foundation.cache[id] = data; + node.attr('data-' + this.name + '-id', id); + return data; + }, + + get_data : function (node) { + return Foundation.cache[node.attr('data-' + this.name + '-id')]; + }, + + remove_data : function (node) { + if (node) { + delete Foundation.cache[node.attr('data-' + this.name + '-id')]; + node.attr('data-' + this.name + '-id', ''); + } else { + $('[data-' + this.name + '-id]').each(function () { + delete Foundation.cache[$(this).attr('data-' + this.name + '-id')]; + $(this).attr('data-' + this.name + '-id', ''); + }); + } + }, + + throttle : function(fun, delay) { + var timer = null; + return function () { + var context = this, args = arguments; + clearTimeout(timer); + timer = setTimeout(function () { + fun.apply(context, args); + }, delay); + }; + }, + + // parses data-options attribute on nodes and turns + // them into an object + data_options : function (el) { + var opts = {}, ii, p, + opts_arr = (el.attr('data-options') || ':').split(';'), + opts_len = opts_arr.length; + + function isNumber (o) { + return ! isNaN (o-0) && o !== null && o !== "" && o !== false && o !== true; + } + + function trim(str) { + if (typeof str === 'string') return $.trim(str); + return str; + } + + // parse options + for (ii = opts_len - 1; ii >= 0; ii--) { + p = opts_arr[ii].split(':'); + + if (/true/i.test(p[1])) p[1] = true; + if (/false/i.test(p[1])) p[1] = false; + if (isNumber(p[1])) p[1] = parseInt(p[1], 10); + + if (p.length === 2 && p[0].length > 0) { + opts[trim(p[0])] = trim(p[1]); + } + } + + return opts; + }, + + delay : function (fun, delay) { + return setTimeout(fun, delay); + }, + + // animated scrolling + scrollTo : function (el, to, duration) { + if (duration < 0) return; + var difference = to - $(window).scrollTop(); + var perTick = difference / duration * 10; + + this.scrollToTimerCache = setTimeout(function() { + if (!isNaN(parseInt(perTick, 10))) { + window.scrollTo(0, $(window).scrollTop() + perTick); + this.scrollTo(el, to, duration - 10); + } + }.bind(this), 10); + }, + + // not supported in core Zepto + scrollLeft : function (el) { + if (!el.length) return; + return ('scrollLeft' in el[0]) ? el[0].scrollLeft : el[0].pageXOffset; + }, + + // test for empty object or array + empty : function (obj) { + if (obj.length && obj.length > 0) return false; + if (obj.length && obj.length === 0) return true; + + for (var key in obj) { + if (hasOwnProperty.call(obj, key)) return false; + } + + return true; + }, + + addCustomRule : function(rule, media) { + if(media === undefined) { + Foundation.stylesheet.insertRule(rule, Foundation.stylesheet.cssRules.length); + } else { + var query = Foundation.media_queries[media]; + if(query !== undefined) { + Foundation.stylesheet.insertRule('@media ' + + Foundation.media_queries[media] + '{ ' + rule + ' }'); + } + } + } + }, + + fix_outer : function (lib) { + lib.outerHeight = function (el, bool) { + if (typeof Zepto === 'function') { + return el.height(); + } + + if (typeof bool !== 'undefined') { + return el.outerHeight(bool); + } + + return el.outerHeight(); + }; + + lib.outerWidth = function (el, bool) { + if (typeof Zepto === 'function') { + return el.width(); + } + + if (typeof bool !== 'undefined') { + return el.outerWidth(bool); + } + + return el.outerWidth(); + }; + }, + + error : function (error) { + return error.name + ' ' + error.message + '; ' + error.more; + }, + + // remove all foundation events. + off: function () { + $(this.scope).off('.fndtn'); + $(window).off('.fndtn'); + return true; + }, + + zj : $ + }; + + $.fn.foundation = function () { + var args = Array.prototype.slice.call(arguments, 0); + + return this.each(function () { + Foundation.init.apply(Foundation, [this].concat(args)); + return this; + }); + }; + +}(libFuncName, this, this.document)); diff --git a/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.magellan.js b/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.magellan.js new file mode 100644 index 00000000..179478ab --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.magellan.js @@ -0,0 +1,136 @@ +/*jslint unparam: true, browser: true, indent: 2 */ + +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.magellan = { + name : 'magellan', + + version : '4.3.2', + + settings : { + activeClass: 'active', + threshold: 0 + }, + + init : function (scope, method, options) { + this.scope = scope || this.scope; + Foundation.inherit(this, 'data_options'); + + if (typeof method === 'object') { + $.extend(true, this.settings, method); + } + + if (typeof method !== 'string') { + if (!this.settings.init) { + this.fixed_magellan = $("[data-magellan-expedition]"); + this.set_threshold(); + this.last_destination = $('[data-magellan-destination]').last(); + this.events(); + } + + return this.settings.init; + } else { + return this[method].call(this, options); + } + }, + + events : function () { + var self = this; + $(this.scope).on('arrival.fndtn.magellan', '[data-magellan-arrival]', function (e) { + var $destination = $(this), + $expedition = $destination.closest('[data-magellan-expedition]'), + activeClass = $expedition.attr('data-magellan-active-class') + || self.settings.activeClass; + + $destination + .closest('[data-magellan-expedition]') + .find('[data-magellan-arrival]') + .not($destination) + .removeClass(activeClass); + $destination.addClass(activeClass); + }); + + this.fixed_magellan + .on('update-position.fndtn.magellan', function(){ + var $el = $(this); + // $el.data("magellan-fixed-position",""); + // $el.data("magellan-top-offset", ""); + }) + .trigger('update-position'); + + $(window) + .on('resize.fndtn.magellan', function() { + this.fixed_magellan.trigger('update-position'); + }.bind(this)) + + .on('scroll.fndtn.magellan', function() { + var windowScrollTop = $(window).scrollTop(); + self.fixed_magellan.each(function() { + var $expedition = $(this); + if (typeof $expedition.data('magellan-top-offset') === 'undefined') { + $expedition.data('magellan-top-offset', $expedition.offset().top); + } + if (typeof $expedition.data('magellan-fixed-position') === 'undefined') { + $expedition.data('magellan-fixed-position', false) + } + var fixed_position = (windowScrollTop + self.settings.threshold) > $expedition.data("magellan-top-offset"); + var attr = $expedition.attr('data-magellan-top-offset'); + + if ($expedition.data("magellan-fixed-position") != fixed_position) { + $expedition.data("magellan-fixed-position", fixed_position); + if (fixed_position) { + $expedition.addClass('fixed'); + $expedition.css({position:"fixed", top:0}); + } else { + $expedition.removeClass('fixed'); + $expedition.css({position:"", top:""}); + } + if (fixed_position && typeof attr != 'undefined' && attr != false) { + $expedition.css({position:"fixed", top:attr + "px"}); + } + } + }); + }); + + + if (this.last_destination.length > 0) { + $(window).on('scroll.fndtn.magellan', function (e) { + var windowScrollTop = $(window).scrollTop(), + scrolltopPlusHeight = windowScrollTop + $(window).height(), + lastDestinationTop = Math.ceil(self.last_destination.offset().top); + + $('[data-magellan-destination]').each(function () { + var $destination = $(this), + destination_name = $destination.attr('data-magellan-destination'), + topOffset = $destination.offset().top - windowScrollTop; + + if (topOffset <= self.settings.threshold) { + $("[data-magellan-arrival='" + destination_name + "']").trigger('arrival'); + } + // In large screens we may hit the bottom of the page and dont reach the top of the last magellan-destination, so lets force it + if (scrolltopPlusHeight >= $(self.scope).height() && lastDestinationTop > windowScrollTop && lastDestinationTop < scrolltopPlusHeight) { + $('[data-magellan-arrival]').last().trigger('arrival'); + } + }); + }); + } + + this.settings.init = true; + }, + + set_threshold : function () { + if (typeof this.settings.threshold !== 'number') { + this.settings.threshold = (this.fixed_magellan.length > 0) ? + this.outerHeight(this.fixed_magellan, true) : 0; + } + }, + + off : function () { + $(this.scope).off('.fndtn.magellan'); + $(window).off('.fndtn.magellan'); + }, + + reflow : function () {} + }; +}(Foundation.zj, this, this.document)); diff --git a/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.orbit.js b/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.orbit.js new file mode 100644 index 00000000..1f8b92a5 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.orbit.js @@ -0,0 +1,432 @@ +;(function ($, window, document, undefined) { + 'use strict'; + + var noop = function() {}; + + var Orbit = function(el, settings) { + // Don't reinitialize plugin + if (el.hasClass(settings.slides_container_class)) { + return this; + } + + var self = this, + container, + slides_container = el, + number_container, + bullets_container, + timer_container, + idx = 0, + animate, + timer, + locked = false, + adjust_height_after = false; + + slides_container.children().first().addClass(settings.active_slide_class); + + self.update_slide_number = function(index) { + if (settings.slide_number) { + number_container.find('span:first').text(parseInt(index)+1); + number_container.find('span:last').text(slides_container.children().length); + } + if (settings.bullets) { + bullets_container.children().removeClass(settings.bullets_active_class); + $(bullets_container.children().get(index)).addClass(settings.bullets_active_class); + } + }; + + self.update_active_link = function(index) { + var link = $('a[data-orbit-link="'+slides_container.children().eq(index).attr('data-orbit-slide')+'"]'); + link.parents('ul').find('[data-orbit-link]').removeClass(settings.bullets_active_class); + link.addClass(settings.bullets_active_class); + }; + + self.build_markup = function() { + slides_container.wrap('
              '); + container = slides_container.parent(); + slides_container.addClass(settings.slides_container_class); + + if (settings.navigation_arrows) { + container.append($('').addClass(settings.prev_class)); + container.append($('').addClass(settings.next_class)); + } + + if (settings.timer) { + timer_container = $('
              ').addClass(settings.timer_container_class); + timer_container.append(''); + timer_container.append($('
              ').addClass(settings.timer_progress_class)); + timer_container.addClass(settings.timer_paused_class); + container.append(timer_container); + } + + if (settings.slide_number) { + number_container = $('
              ').addClass(settings.slide_number_class); + number_container.append(' ' + settings.slide_number_text + ' '); + container.append(number_container); + } + + if (settings.bullets) { + bullets_container = $('
                ').addClass(settings.bullets_container_class); + container.append(bullets_container); + slides_container.children().each(function(idx, el) { + var bullet = $('
              1. ').attr('data-orbit-slide', idx); + bullets_container.append(bullet); + }); + } + + if (settings.stack_on_small) { + container.addClass(settings.stack_on_small_class); + } + + self.update_slide_number(0); + self.update_active_link(0); + }; + + self._goto = function(next_idx, start_timer) { + // if (locked) {return false;} + if (next_idx === idx) {return false;} + if (typeof timer === 'object') {timer.restart();} + var slides = slides_container.children(); + + var dir = 'next'; + locked = true; + if (next_idx < idx) {dir = 'prev';} + if (next_idx >= slides.length) {next_idx = 0;} + else if (next_idx < 0) {next_idx = slides.length - 1;} + + var current = $(slides.get(idx)); + var next = $(slides.get(next_idx)); + + current.css('zIndex', 2); + current.removeClass(settings.active_slide_class); + next.css('zIndex', 4).addClass(settings.active_slide_class); + + slides_container.trigger('orbit:before-slide-change'); + settings.before_slide_change(); + self.update_active_link(next_idx); + + var callback = function() { + var unlock = function() { + idx = next_idx; + locked = false; + if (start_timer === true) {timer = self.create_timer(); timer.start();} + self.update_slide_number(idx); + slides_container.trigger('orbit:after-slide-change',[{slide_number: idx, total_slides: slides.length}]); + settings.after_slide_change(idx, slides.length); + }; + if (slides_container.height() != next.height() && settings.variable_height) { + slides_container.animate({'height': next.height()}, 250, 'linear', unlock); + } else { + unlock(); + } + }; + + if (slides.length === 1) {callback(); return false;} + + var start_animation = function() { + if (dir === 'next') {animate.next(current, next, callback);} + if (dir === 'prev') {animate.prev(current, next, callback);} + }; + + if (next.height() > slides_container.height() && settings.variable_height) { + slides_container.animate({'height': next.height()}, 250, 'linear', start_animation); + } else { + start_animation(); + } + }; + + self.next = function(e) { + e.stopImmediatePropagation(); + e.preventDefault(); + self._goto(idx + 1); + }; + + self.prev = function(e) { + e.stopImmediatePropagation(); + e.preventDefault(); + self._goto(idx - 1); + }; + + self.link_custom = function(e) { + e.preventDefault(); + var link = $(this).attr('data-orbit-link'); + if ((typeof link === 'string') && (link = $.trim(link)) != "") { + var slide = container.find('[data-orbit-slide='+link+']'); + if (slide.index() != -1) {self._goto(slide.index());} + } + }; + + self.link_bullet = function(e) { + var index = $(this).attr('data-orbit-slide'); + if ((typeof index === 'string') && (index = $.trim(index)) != "") { + self._goto(parseInt(index)); + } + } + + self.timer_callback = function() { + self._goto(idx + 1, true); + } + + self.compute_dimensions = function() { + var current = $(slides_container.children().get(idx)); + var h = current.height(); + if (!settings.variable_height) { + slides_container.children().each(function(){ + if ($(this).height() > h) { h = $(this).height(); } + }); + } + slides_container.height(h); + }; + + self.create_timer = function() { + var t = new Timer( + container.find('.'+settings.timer_container_class), + settings, + self.timer_callback + ); + return t; + }; + + self.stop_timer = function() { + if (typeof timer === 'object') timer.stop(); + }; + + self.toggle_timer = function() { + var t = container.find('.'+settings.timer_container_class); + if (t.hasClass(settings.timer_paused_class)) { + if (typeof timer === 'undefined') {timer = self.create_timer();} + timer.start(); + } + else { + if (typeof timer === 'object') {timer.stop();} + } + }; + + self.init = function() { + self.build_markup(); + if (settings.timer) {timer = self.create_timer(); timer.start();} + animate = new FadeAnimation(settings, slides_container); + if (settings.animation === 'slide') + animate = new SlideAnimation(settings, slides_container); + container.on('click', '.'+settings.next_class, self.next); + container.on('click', '.'+settings.prev_class, self.prev); + container.on('click', '[data-orbit-slide]', self.link_bullet); + container.on('click', self.toggle_timer); + if (settings.swipe) { + container.on('touchstart.fndtn.orbit', function(e) { + if (!e.touches) {e = e.originalEvent;} + var data = { + start_page_x: e.touches[0].pageX, + start_page_y: e.touches[0].pageY, + start_time: (new Date()).getTime(), + delta_x: 0, + is_scrolling: undefined + }; + container.data('swipe-transition', data); + e.stopPropagation(); + }) + .on('touchmove.fndtn.orbit', function(e) { + if (!e.touches) { e = e.originalEvent; } + // Ignore pinch/zoom events + if(e.touches.length > 1 || e.scale && e.scale !== 1) return; + + var data = container.data('swipe-transition'); + if (typeof data === 'undefined') {data = {};} + + data.delta_x = e.touches[0].pageX - data.start_page_x; + + if ( typeof data.is_scrolling === 'undefined') { + data.is_scrolling = !!( data.is_scrolling || Math.abs(data.delta_x) < Math.abs(e.touches[0].pageY - data.start_page_y) ); + } + + if (!data.is_scrolling && !data.active) { + e.preventDefault(); + var direction = (data.delta_x < 0) ? (idx+1) : (idx-1); + data.active = true; + self._goto(direction); + } + }) + .on('touchend.fndtn.orbit', function(e) { + container.data('swipe-transition', {}); + e.stopPropagation(); + }) + } + container.on('mouseenter.fndtn.orbit', function(e) { + if (settings.timer && settings.pause_on_hover) { + self.stop_timer(); + } + }) + .on('mouseleave.fndtn.orbit', function(e) { + if (settings.timer && settings.resume_on_mouseout) { + timer.start(); + } + }); + + $(document).on('click', '[data-orbit-link]', self.link_custom); + $(window).on('resize', self.compute_dimensions); + $(window).on('load', self.compute_dimensions); + $(window).on('load', function(){ + container.prev('.preloader').css('display', 'none'); + }); + slides_container.trigger('orbit:ready'); + }; + + self.init(); + }; + + var Timer = function(el, settings, callback) { + var self = this, + duration = settings.timer_speed, + progress = el.find('.'+settings.timer_progress_class), + start, + timeout, + left = -1; + + this.update_progress = function(w) { + var new_progress = progress.clone(); + new_progress.attr('style', ''); + new_progress.css('width', w+'%'); + progress.replaceWith(new_progress); + progress = new_progress; + }; + + this.restart = function() { + clearTimeout(timeout); + el.addClass(settings.timer_paused_class); + left = -1; + self.update_progress(0); + }; + + this.start = function() { + if (!el.hasClass(settings.timer_paused_class)) {return true;} + left = (left === -1) ? duration : left; + el.removeClass(settings.timer_paused_class); + start = new Date().getTime(); + progress.animate({'width': '100%'}, left, 'linear'); + timeout = setTimeout(function() { + self.restart(); + callback(); + }, left); + el.trigger('orbit:timer-started') + }; + + this.stop = function() { + if (el.hasClass(settings.timer_paused_class)) {return true;} + clearTimeout(timeout); + el.addClass(settings.timer_paused_class); + var end = new Date().getTime(); + left = left - (end - start); + var w = 100 - ((left / duration) * 100); + self.update_progress(w); + el.trigger('orbit:timer-stopped'); + }; + }; + + var SlideAnimation = function(settings, container) { + var duration = settings.animation_speed; + var is_rtl = ($('html[dir=rtl]').length === 1); + var margin = is_rtl ? 'marginRight' : 'marginLeft'; + var animMargin = {}; + animMargin[margin] = '0%'; + + this.next = function(current, next, callback) { + next.animate(animMargin, duration, 'linear', function() { + current.css(margin, '100%'); + callback(); + }); + }; + + this.prev = function(current, prev, callback) { + prev.css(margin, '-100%'); + prev.animate(animMargin, duration, 'linear', function() { + current.css(margin, '100%'); + callback(); + }); + }; + }; + + var FadeAnimation = function(settings, container) { + var duration = settings.animation_speed; + var is_rtl = ($('html[dir=rtl]').length === 1); + var margin = is_rtl ? 'marginRight' : 'marginLeft'; + + this.next = function(current, next, callback) { + next.css({'margin':'0%', 'opacity':'0.01'}); + next.animate({'opacity':'1'}, duration, 'linear', function() { + current.css('margin', '100%'); + callback(); + }); + }; + + this.prev = function(current, prev, callback) { + prev.css({'margin':'0%', 'opacity':'0.01'}); + prev.animate({'opacity':'1'}, duration, 'linear', function() { + current.css('margin', '100%'); + callback(); + }); + }; + }; + + + Foundation.libs = Foundation.libs || {}; + + Foundation.libs.orbit = { + name: 'orbit', + + version: '4.3.2', + + settings: { + animation: 'slide', + timer_speed: 10000, + pause_on_hover: true, + resume_on_mouseout: false, + animation_speed: 500, + stack_on_small: false, + navigation_arrows: true, + slide_number: true, + slide_number_text: 'of', + container_class: 'orbit-container', + stack_on_small_class: 'orbit-stack-on-small', + next_class: 'orbit-next', + prev_class: 'orbit-prev', + timer_container_class: 'orbit-timer', + timer_paused_class: 'paused', + timer_progress_class: 'orbit-progress', + slides_container_class: 'orbit-slides-container', + bullets_container_class: 'orbit-bullets', + bullets_active_class: 'active', + slide_number_class: 'orbit-slide-number', + caption_class: 'orbit-caption', + active_slide_class: 'active', + orbit_transition_class: 'orbit-transitioning', + bullets: true, + timer: true, + variable_height: false, + swipe: true, + before_slide_change: noop, + after_slide_change: noop + }, + + init: function (scope, method, options) { + var self = this; + Foundation.inherit(self, 'data_options'); + + if (typeof method === 'object') { + $.extend(true, self.settings, method); + } + + if ($(scope).is('[data-orbit]')) { + var $el = $(scope); + var opts = self.data_options($el); + new Orbit($el, $.extend({},self.settings, opts)); + } + + $('[data-orbit]', scope).each(function(idx, el) { + var $el = $(el); + var opts = self.data_options($el); + new Orbit($el, $.extend({},self.settings, opts)); + }); + } + }; + + +}(Foundation.zj, this, this.document)); diff --git a/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.placeholder.js b/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.placeholder.js new file mode 100644 index 00000000..93bd2ca3 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.placeholder.js @@ -0,0 +1,426 @@ +/* + * The MIT License + * + * Copyright (c) 2012 James Allardice + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +// Defines the global Placeholders object along with various utility methods +(function (global) { + + "use strict"; + + // Cross-browser DOM event binding + function addEventListener(elem, event, fn) { + if (elem.addEventListener) { + return elem.addEventListener(event, fn, false); + } + if (elem.attachEvent) { + return elem.attachEvent("on" + event, fn); + } + } + + // Check whether an item is in an array (we don't use Array.prototype.indexOf so we don't clobber any existing polyfills - this is a really simple alternative) + function inArray(arr, item) { + var i, len; + for (i = 0, len = arr.length; i < len; i++) { + if (arr[i] === item) { + return true; + } + } + return false; + } + + // Move the caret to the index position specified. Assumes that the element has focus + function moveCaret(elem, index) { + var range; + if (elem.createTextRange) { + range = elem.createTextRange(); + range.move("character", index); + range.select(); + } else if (elem.selectionStart) { + elem.focus(); + elem.setSelectionRange(index, index); + } + } + + // Attempt to change the type property of an input element + function changeType(elem, type) { + try { + elem.type = type; + return true; + } catch (e) { + // You can't change input type in IE8 and below + return false; + } + } + + // Expose public methods + global.Placeholders = { + Utils: { + addEventListener: addEventListener, + inArray: inArray, + moveCaret: moveCaret, + changeType: changeType + } + }; + +}(this)); + +(function (global) { + + "use strict"; + + var validTypes = [ + "text", + "search", + "url", + "tel", + "email", + "password", + "number", + "textarea" + ], + + // The list of keycodes that are not allowed when the polyfill is configured to hide-on-input + badKeys = [ + + // The following keys all cause the caret to jump to the end of the input value + 27, // Escape + 33, // Page up + 34, // Page down + 35, // End + 36, // Home + + // Arrow keys allow you to move the caret manually, which should be prevented when the placeholder is visible + 37, // Left + 38, // Up + 39, // Right + 40, // Down + + // The following keys allow you to modify the placeholder text by removing characters, which should be prevented when the placeholder is visible + 8, // Backspace + 46 // Delete + ], + + // Styling variables + placeholderStyleColor = "#ccc", + placeholderClassName = "placeholdersjs", + classNameRegExp = new RegExp("(?:^|\\s)" + placeholderClassName + "(?!\\S)"), + + // These will hold references to all elements that can be affected. NodeList objects are live, so we only need to get those references once + inputs, textareas, + + // The various data-* attributes used by the polyfill + ATTR_CURRENT_VAL = "data-placeholder-value", + ATTR_ACTIVE = "data-placeholder-active", + ATTR_INPUT_TYPE = "data-placeholder-type", + ATTR_FORM_HANDLED = "data-placeholder-submit", + ATTR_EVENTS_BOUND = "data-placeholder-bound", + ATTR_OPTION_FOCUS = "data-placeholder-focus", + ATTR_OPTION_LIVE = "data-placeholder-live", + + // Various other variables used throughout the rest of the script + test = document.createElement("input"), + head = document.getElementsByTagName("head")[0], + root = document.documentElement, + Placeholders = global.Placeholders, + Utils = Placeholders.Utils, + hideOnInput, liveUpdates, keydownVal, styleElem, styleRules, placeholder, timer, form, elem, len, i; + + // No-op (used in place of public methods when native support is detected) + function noop() {} + + // Hide the placeholder value on a single element. Returns true if the placeholder was hidden and false if it was not (because it wasn't visible in the first place) + function hidePlaceholder(elem) { + var type; + if (elem.value === elem.getAttribute(ATTR_CURRENT_VAL) && elem.getAttribute(ATTR_ACTIVE) === "true") { + elem.setAttribute(ATTR_ACTIVE, "false"); + elem.value = ""; + elem.className = elem.className.replace(classNameRegExp, ""); + + // If the polyfill has changed the type of the element we need to change it back + type = elem.getAttribute(ATTR_INPUT_TYPE); + if (type) { + elem.type = type; + } + return true; + } + return false; + } + + // Show the placeholder value on a single element. Returns true if the placeholder was shown and false if it was not (because it was already visible) + function showPlaceholder(elem) { + var type, + val = elem.getAttribute(ATTR_CURRENT_VAL); + if (elem.value === "" && val) { + elem.setAttribute(ATTR_ACTIVE, "true"); + elem.value = val; + elem.className += " " + placeholderClassName; + + // If the type of element needs to change, change it (e.g. password inputs) + type = elem.getAttribute(ATTR_INPUT_TYPE); + if (type) { + elem.type = "text"; + } else if (elem.type === "password") { + if (Utils.changeType(elem, "text")) { + elem.setAttribute(ATTR_INPUT_TYPE, "password"); + } + } + return true; + } + return false; + } + + function handleElem(node, callback) { + + var handleInputs, handleTextareas, elem, len, i; + + // Check if the passed in node is an input/textarea (in which case it can't have any affected descendants) + if (node && node.getAttribute(ATTR_CURRENT_VAL)) { + callback(node); + } else { + + // If an element was passed in, get all affected descendants. Otherwise, get all affected elements in document + handleInputs = node ? node.getElementsByTagName("input") : inputs; + handleTextareas = node ? node.getElementsByTagName("textarea") : textareas; + + // Run the callback for each element + for (i = 0, len = handleInputs.length + handleTextareas.length; i < len; i++) { + elem = i < handleInputs.length ? handleInputs[i] : handleTextareas[i - handleInputs.length]; + callback(elem); + } + } + } + + // Return all affected elements to their normal state (remove placeholder value if present) + function disablePlaceholders(node) { + handleElem(node, hidePlaceholder); + } + + // Show the placeholder value on all appropriate elements + function enablePlaceholders(node) { + handleElem(node, showPlaceholder); + } + + // Returns a function that is used as a focus event handler + function makeFocusHandler(elem) { + return function () { + + // Only hide the placeholder value if the (default) hide-on-focus behaviour is enabled + if (hideOnInput && elem.value === elem.getAttribute(ATTR_CURRENT_VAL) && elem.getAttribute(ATTR_ACTIVE) === "true") { + + // Move the caret to the start of the input (this mimics the behaviour of all browsers that do not hide the placeholder on focus) + Utils.moveCaret(elem, 0); + + } else { + + // Remove the placeholder + hidePlaceholder(elem); + } + }; + } + + // Returns a function that is used as a blur event handler + function makeBlurHandler(elem) { + return function () { + showPlaceholder(elem); + }; + } + + // Functions that are used as a event handlers when the hide-on-input behaviour has been activated - very basic implementation of the "input" event + function makeKeydownHandler(elem) { + return function (e) { + keydownVal = elem.value; + + //Prevent the use of the arrow keys (try to keep the cursor before the placeholder) + if (elem.getAttribute(ATTR_ACTIVE) === "true") { + if (keydownVal === elem.getAttribute(ATTR_CURRENT_VAL) && Utils.inArray(badKeys, e.keyCode)) { + if (e.preventDefault) { + e.preventDefault(); + } + return false; + } + } + }; + } + function makeKeyupHandler(elem) { + return function () { + var type; + + if (elem.getAttribute(ATTR_ACTIVE) === "true" && elem.value !== keydownVal) { + + // Remove the placeholder + elem.className = elem.className.replace(classNameRegExp, ""); + elem.value = elem.value.replace(elem.getAttribute(ATTR_CURRENT_VAL), ""); + elem.setAttribute(ATTR_ACTIVE, false); + + // If the type of element needs to change, change it (e.g. password inputs) + type = elem.getAttribute(ATTR_INPUT_TYPE); + if (type) { + elem.type = type; + } + } + + // If the element is now empty we need to show the placeholder + if (elem.value === "") { + elem.blur(); + Utils.moveCaret(elem, 0); + } + }; + } + function makeClickHandler(elem) { + return function () { + if (elem === document.activeElement && elem.value === elem.getAttribute(ATTR_CURRENT_VAL) && elem.getAttribute(ATTR_ACTIVE) === "true") { + Utils.moveCaret(elem, 0); + } + }; + } + + // Returns a function that is used as a submit event handler on form elements that have children affected by this polyfill + function makeSubmitHandler(form) { + return function () { + + // Turn off placeholders on all appropriate descendant elements + disablePlaceholders(form); + }; + } + + // Bind event handlers to an element that we need to affect with the polyfill + function newElement(elem) { + + // If the element is part of a form, make sure the placeholder string is not submitted as a value + if (elem.form) { + form = elem.form; + + // Set a flag on the form so we know it's been handled (forms can contain multiple inputs) + if (!form.getAttribute(ATTR_FORM_HANDLED)) { + Utils.addEventListener(form, "submit", makeSubmitHandler(form)); + form.setAttribute(ATTR_FORM_HANDLED, "true"); + } + } + + // Bind event handlers to the element so we can hide/show the placeholder as appropriate + Utils.addEventListener(elem, "focus", makeFocusHandler(elem)); + Utils.addEventListener(elem, "blur", makeBlurHandler(elem)); + + // If the placeholder should hide on input rather than on focus we need additional event handlers + if (hideOnInput) { + Utils.addEventListener(elem, "keydown", makeKeydownHandler(elem)); + Utils.addEventListener(elem, "keyup", makeKeyupHandler(elem)); + Utils.addEventListener(elem, "click", makeClickHandler(elem)); + } + + // Remember that we've bound event handlers to this element + elem.setAttribute(ATTR_EVENTS_BOUND, "true"); + elem.setAttribute(ATTR_CURRENT_VAL, placeholder); + + // If the element doesn't have a value, set it to the placeholder string + showPlaceholder(elem); + } + + Placeholders.nativeSupport = test.placeholder !== void 0; + + if (!Placeholders.nativeSupport) { + + // Get references to all the input and textarea elements currently in the DOM (live NodeList objects to we only need to do this once) + inputs = document.getElementsByTagName("input"); + textareas = document.getElementsByTagName("textarea"); + + // Get any settings declared as data-* attributes on the root element (currently the only options are whether to hide the placeholder on focus or input and whether to auto-update) + hideOnInput = root.getAttribute(ATTR_OPTION_FOCUS) === "false"; + liveUpdates = root.getAttribute(ATTR_OPTION_LIVE) !== "false"; + + // Create style element for placeholder styles (instead of directly setting style properties on elements - allows for better flexibility alongside user-defined styles) + styleElem = document.createElement("style"); + styleElem.type = "text/css"; + + // Create style rules as text node + styleRules = document.createTextNode("." + placeholderClassName + " { color:" + placeholderStyleColor + "; }"); + + // Append style rules to newly created stylesheet + if (styleElem.styleSheet) { + styleElem.styleSheet.cssText = styleRules.nodeValue; + } else { + styleElem.appendChild(styleRules); + } + + // Prepend new style element to the head (before any existing stylesheets, so user-defined rules take precedence) + head.insertBefore(styleElem, head.firstChild); + + // Set up the placeholders + for (i = 0, len = inputs.length + textareas.length; i < len; i++) { + elem = i < inputs.length ? inputs[i] : textareas[i - inputs.length]; + + // Get the value of the placeholder attribute, if any. IE10 emulating IE7 fails with getAttribute, hence the use of the attributes node + placeholder = elem.attributes.placeholder; + if (placeholder) { + + // IE returns an empty object instead of undefined if the attribute is not present + placeholder = placeholder.nodeValue; + + // Only apply the polyfill if this element is of a type that supports placeholders, and has a placeholder attribute with a non-empty value + if (placeholder && Utils.inArray(validTypes, elem.type)) { + newElement(elem); + } + } + } + + // If enabled, the polyfill will repeatedly check for changed/added elements and apply to those as well + timer = setInterval(function () { + for (i = 0, len = inputs.length + textareas.length; i < len; i++) { + elem = i < inputs.length ? inputs[i] : textareas[i - inputs.length]; + + // Only apply the polyfill if this element is of a type that supports placeholders, and has a placeholder attribute with a non-empty value + placeholder = elem.attributes.placeholder; + if (placeholder) { + placeholder = placeholder.nodeValue; + if (placeholder && Utils.inArray(validTypes, elem.type)) { + + // If the element hasn't had event handlers bound to it then add them + if (!elem.getAttribute(ATTR_EVENTS_BOUND)) { + newElement(elem); + } + + // If the placeholder value has changed or not been initialised yet we need to update the display + if (placeholder !== elem.getAttribute(ATTR_CURRENT_VAL) || (elem.type === "password" && !elem.getAttribute(ATTR_INPUT_TYPE))) { + + // Attempt to change the type of password inputs (fails in IE < 9) + if (elem.type === "password" && !elem.getAttribute(ATTR_INPUT_TYPE) && Utils.changeType(elem, "text")) { + elem.setAttribute(ATTR_INPUT_TYPE, "password"); + } + + // If the placeholder value has changed and the placeholder is currently on display we need to change it + if (elem.value === elem.getAttribute(ATTR_CURRENT_VAL)) { + elem.value = placeholder; + } + + // Keep a reference to the current placeholder value in case it changes via another script + elem.setAttribute(ATTR_CURRENT_VAL, placeholder); + } + } + } + } + + // If live updates are not enabled cancel the timer + if (!liveUpdates) { + clearInterval(timer); + } + }, 100); + } + + // Expose public methods + Placeholders.disable = Placeholders.nativeSupport ? noop : disablePlaceholders; + Placeholders.enable = Placeholders.nativeSupport ? noop : enablePlaceholders; + +}(this)); diff --git a/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.reveal.js b/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.reveal.js new file mode 100644 index 00000000..0ef46a2e --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.reveal.js @@ -0,0 +1,353 @@ +/*jslint unparam: true, browser: true, indent: 2 */ + +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.reveal = { + name : 'reveal', + + version : '4.3.2', + + locked : false, + + settings : { + animation: 'fadeAndPop', + animationSpeed: 250, + closeOnBackgroundClick: true, + closeOnEsc: true, + dismissModalClass: 'close-reveal-modal', + bgClass: 'reveal-modal-bg', + open: function(){}, + opened: function(){}, + close: function(){}, + closed: function(){}, + bg : $('.reveal-modal-bg'), + css : { + open : { + 'opacity': 0, + 'visibility': 'visible', + 'display' : 'block' + }, + close : { + 'opacity': 1, + 'visibility': 'hidden', + 'display': 'none' + } + } + }, + + init : function (scope, method, options) { + Foundation.inherit(this, 'data_options delay'); + + if (typeof method === 'object') { + $.extend(true, this.settings, method); + } else if (typeof options !== 'undefined') { + $.extend(true, this.settings, options); + } + + if (typeof method !== 'string') { + this.events(); + + return this.settings.init; + } else { + return this[method].call(this, options); + } + }, + + events : function () { + var self = this; + + $(this.scope) + .off('.fndtn.reveal') + .on('click.fndtn.reveal', '[data-reveal-id]', function (e) { + e.preventDefault(); + + if (!self.locked) { + var element = $(this), + ajax = element.data('reveal-ajax'); + + self.locked = true; + + if (typeof ajax === 'undefined') { + self.open.call(self, element); + } else { + var url = ajax === true ? element.attr('href') : ajax; + + self.open.call(self, element, {url: url}); + } + } + }) + .on('click.fndtn.reveal touchend', this.close_targets(), function (e) { + e.preventDefault(); + if (!self.locked) { + var settings = $.extend({}, self.settings, self.data_options($('.reveal-modal.open'))), + bgClicked = $(e.target)[0] === $('.' + settings.bgClass)[0]; + if (bgClicked && !settings.closeOnBackgroundClick) { + return; + } + + self.locked = true; + self.close.call(self, bgClicked ? $('.reveal-modal.open') : $(this).closest('.reveal-modal')); + } + }); + + if($(this.scope).hasClass('reveal-modal')) { + $(this.scope) + .on('open.fndtn.reveal', this.settings.open) + .on('opened.fndtn.reveal', this.settings.opened) + .on('opened.fndtn.reveal', this.open_video) + .on('close.fndtn.reveal', this.settings.close) + .on('closed.fndtn.reveal', this.settings.closed) + .on('closed.fndtn.reveal', this.close_video); + } else { + $(this.scope) + .on('open.fndtn.reveal', '.reveal-modal', this.settings.open) + .on('opened.fndtn.reveal', '.reveal-modal', this.settings.opened) + .on('opened.fndtn.reveal', '.reveal-modal', this.open_video) + .on('close.fndtn.reveal', '.reveal-modal', this.settings.close) + .on('closed.fndtn.reveal', '.reveal-modal', this.settings.closed) + .on('closed.fndtn.reveal', '.reveal-modal', this.close_video); + } + + $( 'body' ).bind( 'keyup.reveal', function ( event ) { + var open_modal = $('.reveal-modal.open'), + settings = $.extend({}, self.settings, self.data_options(open_modal)); + if ( event.which === 27 && settings.closeOnEsc) { // 27 is the keycode for the Escape key + open_modal.foundation('reveal', 'close'); + } + }); + + return true; + }, + + open : function (target, ajax_settings) { + if (target) { + if (typeof target.selector !== 'undefined') { + var modal = $('#' + target.data('reveal-id')); + } else { + var modal = $(this.scope); + + ajax_settings = target; + } + } else { + var modal = $(this.scope); + } + + if (!modal.hasClass('open')) { + var open_modal = $('.reveal-modal.open'); + + if (typeof modal.data('css-top') === 'undefined') { + modal.data('css-top', parseInt(modal.css('top'), 10)) + .data('offset', this.cache_offset(modal)); + } + + modal.trigger('open'); + + if (open_modal.length < 1) { + this.toggle_bg(); + } + + if (typeof ajax_settings === 'undefined' || !ajax_settings.url) { + this.hide(open_modal, this.settings.css.close); + this.show(modal, this.settings.css.open); + } else { + var self = this, + old_success = typeof ajax_settings.success !== 'undefined' ? ajax_settings.success : null; + + $.extend(ajax_settings, { + success: function (data, textStatus, jqXHR) { + if ( $.isFunction(old_success) ) { + old_success(data, textStatus, jqXHR); + } + + modal.html(data); + $(modal).foundation('section', 'reflow'); + + self.hide(open_modal, self.settings.css.close); + self.show(modal, self.settings.css.open); + } + }); + + $.ajax(ajax_settings); + } + } + }, + + close : function (modal) { + + var modal = modal && modal.length ? modal : $(this.scope), + open_modals = $('.reveal-modal.open'); + + if (open_modals.length > 0) { + this.locked = true; + modal.trigger('close'); + this.toggle_bg(); + this.hide(open_modals, this.settings.css.close); + } + }, + + close_targets : function () { + var base = '.' + this.settings.dismissModalClass; + + if (this.settings.closeOnBackgroundClick) { + return base + ', .' + this.settings.bgClass; + } + + return base; + }, + + toggle_bg : function () { + if ($('.' + this.settings.bgClass).length === 0) { + this.settings.bg = $('
                ', {'class': this.settings.bgClass}) + .appendTo('body'); + } + + if (this.settings.bg.filter(':visible').length > 0) { + this.hide(this.settings.bg); + } else { + this.show(this.settings.bg); + } + }, + + show : function (el, css) { + // is modal + if (css) { + if (el.parent('body').length === 0) { + var placeholder = el.wrap('
                ').parent(); + el.on('closed.fndtn.reveal.wrapped', function() { + el.detach().appendTo(placeholder); + el.unwrap().unbind('closed.fndtn.reveal.wrapped'); + }); + + el.detach().appendTo('body'); + } + + if (/pop/i.test(this.settings.animation)) { + css.top = $(window).scrollTop() - el.data('offset') + 'px'; + var end_css = { + top: $(window).scrollTop() + el.data('css-top') + 'px', + opacity: 1 + }; + + return this.delay(function () { + return el + .css(css) + .animate(end_css, this.settings.animationSpeed, 'linear', function () { + this.locked = false; + el.trigger('opened'); + }.bind(this)) + .addClass('open'); + }.bind(this), this.settings.animationSpeed / 2); + } + + if (/fade/i.test(this.settings.animation)) { + var end_css = {opacity: 1}; + + return this.delay(function () { + return el + .css(css) + .animate(end_css, this.settings.animationSpeed, 'linear', function () { + this.locked = false; + el.trigger('opened'); + }.bind(this)) + .addClass('open'); + }.bind(this), this.settings.animationSpeed / 2); + } + + return el.css(css).show().css({opacity: 1}).addClass('open').trigger('opened'); + } + + // should we animate the background? + if (/fade/i.test(this.settings.animation)) { + return el.fadeIn(this.settings.animationSpeed / 2); + } + + return el.show(); + }, + + hide : function (el, css) { + // is modal + if (css) { + if (/pop/i.test(this.settings.animation)) { + var end_css = { + top: - $(window).scrollTop() - el.data('offset') + 'px', + opacity: 0 + }; + + return this.delay(function () { + return el + .animate(end_css, this.settings.animationSpeed, 'linear', function () { + this.locked = false; + el.css(css).trigger('closed'); + }.bind(this)) + .removeClass('open'); + }.bind(this), this.settings.animationSpeed / 2); + } + + if (/fade/i.test(this.settings.animation)) { + var end_css = {opacity: 0}; + + return this.delay(function () { + return el + .animate(end_css, this.settings.animationSpeed, 'linear', function () { + this.locked = false; + el.css(css).trigger('closed'); + }.bind(this)) + .removeClass('open'); + }.bind(this), this.settings.animationSpeed / 2); + } + + return el.hide().css(css).removeClass('open').trigger('closed'); + } + + // should we animate the background? + if (/fade/i.test(this.settings.animation)) { + return el.fadeOut(this.settings.animationSpeed / 2); + } + + return el.hide(); + }, + + close_video : function (e) { + var video = $(this).find('.flex-video'), + iframe = video.find('iframe'); + + if (iframe.length > 0) { + iframe.attr('data-src', iframe[0].src); + iframe.attr('src', 'about:blank'); + video.hide(); + } + }, + + open_video : function (e) { + var video = $(this).find('.flex-video'), + iframe = video.find('iframe'); + + if (iframe.length > 0) { + var data_src = iframe.attr('data-src'); + if (typeof data_src === 'string') { + iframe[0].src = iframe.attr('data-src'); + } else { + var src = iframe[0].src; + iframe[0].src = undefined; + iframe[0].src = src; + } + video.show(); + } + }, + + cache_offset : function (modal) { + var offset = modal.show().height() + parseInt(modal.css('top'), 10); + + modal.hide(); + + return offset; + }, + + off : function () { + $(this.scope).off('.fndtn.reveal'); + }, + + reflow : function () {} + }; +}(Foundation.zj, this, this.document)); diff --git a/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.section.js b/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.section.js new file mode 100644 index 00000000..0f1e06e5 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.section.js @@ -0,0 +1,430 @@ +/*jslint unparam: true, browser: true, indent: 2 */ + +; +(function($, window, document) { + 'use strict'; + + Foundation.libs.section = { + name : 'section', + + version : '4.3.2', + + settings: { + deep_linking: false, + small_breakpoint: 768, + one_up: true, + multi_expand: false, + section_selector: '[data-section]', + region_selector: 'section, .section, [data-section-region]', + title_selector: '.title, [data-section-title]', + //marker: container is resized + resized_data_attr: 'data-section-resized', + //marker: container should apply accordion style + small_style_data_attr: 'data-section-small-style', + content_selector: '.content, [data-section-content]', + nav_selector: '[data-section="vertical-nav"], [data-section="horizontal-nav"]', + active_class: 'active', + callback: function() {} + }, + + init: function(scope, method, options) { + var self = this; + Foundation.inherit(this, 'throttle data_options position_right offset_right'); + + if (typeof method === 'object') { + $.extend(true, self.settings, method); + } + + if (typeof method !== 'string') { + this.events(); + return true; + } else { + return this[method].call(this, options); + } + }, + + events: function() { + var self = this; + + //combine titles selector from settings for click event binding + var click_title_selectors = [], + section_selector = self.settings.section_selector, + region_selectors = self.settings.region_selector.split(","), + title_selectors = self.settings.title_selector.split(","); + + for (var i = 0, len = region_selectors.length; i < len; i++) { + var region_selector = region_selectors[i]; + + for (var j = 0, len1 = title_selectors.length; j < len1; j++) { + var title_selector = section_selector + ">" + region_selector + ">" + title_selectors[j]; + + click_title_selectors.push(title_selector + " a"); //or we can not do preventDefault for click event of + click_title_selectors.push(title_selector); + } + } + + $(self.scope) + .on('click.fndtn.section', click_title_selectors.join(","), function(e) { + var title = $(this).closest(self.settings.title_selector); + + self.close_navs(title); + if (title.siblings(self.settings.content_selector).length > 0) { + self.toggle_active.call(title[0], e); + } + }); + + $(window) + .on('resize.fndtn.section', self.throttle(function() { self.resize(); }, 30)) + .on('hashchange.fndtn.section', self.set_active_from_hash); + + $(document).on('click.fndtn.section', function (e) { + if (e.isPropagationStopped && e.isPropagationStopped()) return; + if (e.target === document) return; + self.close_navs($(e.target).closest(self.settings.title_selector)); + }); + + $(window).triggerHandler('resize.fndtn.section'); + $(window).triggerHandler('hashchange.fndtn.section'); + }, + + //close nav !one_up on click elsewhere + close_navs: function(except_nav_with_title) { + var self = Foundation.libs.section, + navsToClose = $(self.settings.nav_selector) + .filter(function() { return !$.extend({}, + self.settings, self.data_options($(this))).one_up; }); + + if (except_nav_with_title.length > 0) { + var section = except_nav_with_title.parent().parent(); + + if (self.is_horizontal_nav(section) || self.is_vertical_nav(section)) { + //exclude current nav from list + navsToClose = navsToClose.filter(function() { return this !== section[0]; }); + } + } + //close navs on click on title + navsToClose.children(self.settings.region_selector).removeClass(self.settings.active_class); + }, + + toggle_active: function(e) { + var $this = $(this), + self = Foundation.libs.section, + region = $this.parent(), + content = $this.siblings(self.settings.content_selector), + section = region.parent(), + settings = $.extend({}, self.settings, self.data_options(section)), + prev_active_region = section.children(self.settings.region_selector).filter("." + self.settings.active_class); + + //for anchors inside [data-section-title] + if (!settings.deep_linking && content.length > 0) { + e.preventDefault(); + } + + e.stopPropagation(); //do not catch same click again on parent + + if (!region.hasClass(self.settings.active_class)) { + if (!self.is_accordion(section) || (self.is_accordion(section) && !self.settings.multi_expand)) { + prev_active_region.removeClass(self.settings.active_class); + prev_active_region.trigger('closed.fndtn.section'); + } + region.addClass(self.settings.active_class); + //force resize for better performance (do not wait timer) + self.resize(region.find(self.settings.section_selector).not("[" + self.settings.resized_data_attr + "]"), true); + region.trigger('opened.fndtn.section'); + } else if (region.hasClass(self.settings.active_class) && self.is_accordion(section) || !settings.one_up && (self.small(section) || self.is_vertical_nav(section) || self.is_horizontal_nav(section) || self.is_accordion(section))) { + region.removeClass(self.settings.active_class); + region.trigger('closed.fndtn.section'); + } + settings.callback(section); + }, + + check_resize_timer: null, + + //main function that sets title and content positions; runs for :not(.resized) and :visible once when window width is medium up + //sections: + // selected sections to resize, are defined on resize forced by visibility changes + //ensure_has_active_region: + // is true when we force resize for no resized sections that were hidden and became visible, + // these sections can have no selected region, because all regions were hidden along with section on executing set_active_from_hash + resize: function(sections, ensure_has_active_region) { + + var self = Foundation.libs.section, + section_container = $(self.settings.section_selector), + is_small_window = self.small(section_container), + //filter for section resize + should_be_resized = function (section, now_is_hidden) { + return !self.is_accordion(section) && + !section.is("[" + self.settings.resized_data_attr + "]") && + (!is_small_window || self.is_horizontal_tabs(section)) && + now_is_hidden === (section.css('display') === 'none' || + !section.parent().is(':visible')); + }; + + sections = sections || $(self.settings.section_selector); + + clearTimeout(self.check_resize_timer); + + if (!is_small_window) { + sections.removeAttr(self.settings.small_style_data_attr); + } + + //resize + sections.filter(function() { return should_be_resized($(this), false); }) + .each(function() { + var section = $(this), + regions = section.children(self.settings.region_selector), + titles = regions.children(self.settings.title_selector), + content = regions.children(self.settings.content_selector), + titles_max_height = 0; + + if (ensure_has_active_region && + section.children(self.settings.region_selector).filter("." + self.settings.active_class).length == 0) { + var settings = $.extend({}, self.settings, self.data_options(section)); + + if (!settings.deep_linking && (settings.one_up || !self.is_horizontal_nav(section) && + !self.is_vertical_nav(section) && !self.is_accordion(section))) { + regions.filter(":visible").first().addClass(self.settings.active_class); + } + } + + if (self.is_horizontal_tabs(section) || self.is_auto(section)) { + // region: position relative + // title: position absolute + // content: position static + var titles_sum_width = 0; + + titles.each(function() { + var title = $(this); + + if (title.is(":visible")) { + title.css(!self.rtl ? 'left' : 'right', titles_sum_width); + var title_h_border_width = parseInt(title.css("border-" + (self.rtl ? 'left' : 'right') + "-width"), 10); + + if (title_h_border_width.toString() === 'Nan') { + title_h_border_width = 0; + } + + titles_sum_width += self.outerWidth(title) - title_h_border_width; + titles_max_height = Math.max(titles_max_height, self.outerHeight(title)); + } + }); + titles.css('height', titles_max_height); + regions.each(function() { + var region = $(this), + region_content = region.children(self.settings.content_selector), + content_top_border_width = parseInt(region_content.css("border-top-width"), 10); + + if (content_top_border_width.toString() === 'Nan') { + content_top_border_width = 0; + } + + region.css('padding-top', titles_max_height - content_top_border_width); + }); + + section.css("min-height", titles_max_height); + } else if (self.is_horizontal_nav(section)) { + var first = true; + // region: positon relative, float left + // title: position static + // content: position absolute + titles.each(function() { + titles_max_height = Math.max(titles_max_height, self.outerHeight($(this))); + }); + + regions.each(function() { + var region = $(this); + + region.css("margin-left", "-" + (first ? section : region.children(self.settings.title_selector)).css("border-left-width")); + first = false; + }); + + regions.css("margin-top", "-" + section.css("border-top-width")); + titles.css('height', titles_max_height); + content.css('top', titles_max_height); + section.css("min-height", titles_max_height); + } else if (self.is_vertical_tabs(section)) { + var titles_sum_height = 0; + // region: position relative, for .active: fixed padding==title.width + // title: fixed width, position absolute + // content: position static + titles.each(function() { + var title = $(this); + + if (title.is(":visible")) { + title.css('top', titles_sum_height); + var title_top_border_width = parseInt(title.css("border-top-width"), 10); + + if (title_top_border_width.toString() === 'Nan') { + title_top_border_width = 0; + } + + titles_sum_height += self.outerHeight(title) - title_top_border_width; + } + }); + + content.css('min-height', titles_sum_height + 1); + } else if (self.is_vertical_nav(section)) { + var titles_max_width = 0, + first1 = true; + // region: positon relative + // title: position static + // content: position absolute + titles.each(function() { + titles_max_width = Math.max(titles_max_width, self.outerWidth($(this))); + }); + + regions.each(function () { + var region = $(this); + + region.css("margin-top", "-" + (first1 ? section : region.children(self.settings.title_selector)).css("border-top-width")); + first1 = false; + }); + + titles.css('width', titles_max_width); + content.css(!self.rtl ? 'left' : 'right', titles_max_width); + section.css('width', titles_max_width); + } + + section.attr(self.settings.resized_data_attr, true); + }); + + //wait elements to become visible then resize + if ($(self.settings.section_selector).filter(function() { return should_be_resized($(this), true); }).length > 0) + self.check_resize_timer = setTimeout(function() { + self.resize(sections.filter(function() { return should_be_resized($(this), false); }), true); + }, 700); + + if (is_small_window) { + sections.attr(self.settings.small_style_data_attr, true); + } + }, + + is_vertical_nav: function(el) { + return /vertical-nav/i.test(el.data('section')); + }, + + is_horizontal_nav: function(el) { + return /horizontal-nav/i.test(el.data('section')); + }, + + is_accordion: function(el) { + return /accordion/i.test(el.data('section')); + }, + + is_horizontal_tabs: function(el) { + return /^tabs$/i.test(el.data('section')); + }, + + is_vertical_tabs: function(el) { + return /vertical-tabs/i.test(el.data('section')); + }, + + is_auto: function (el) { + var data_section = el.data('section'); + return data_section === '' || /auto/i.test(data_section); + }, + + set_active_from_hash: function() { + var self = Foundation.libs.section, + hash = window.location.hash.substring(1), + sections = $(self.settings.section_selector); + + var selectedSection; + + sections.each(function() { + var section = $(this), + regions = section.children(self.settings.region_selector); + regions.each(function() { + var region = $(this), + data_slug = region.children(self.settings.content_selector).data('slug'); + if (new RegExp(data_slug, 'i').test(hash)) { + selectedSection=section; + return false; + } + }); + + if (selectedSection != null) { + return false; + } + }); + + if (selectedSection != null) { + sections.each(function() { + if (selectedSection == $(this)) { + var section = $(this), + settings = $.extend({}, self.settings, self.data_options(section)), + regions = section.children(self.settings.region_selector), + set_active_from_hash = settings.deep_linking && hash.length > 0, + selected = false; + + regions.each(function() { + var region = $(this); + + if (selected) { + region.removeClass(self.settings.active_class); + } else if (set_active_from_hash) { + var data_slug = region.children(self.settings.content_selector).data('slug'); + + if (data_slug && new RegExp(data_slug, 'i').test(hash)) { + if (!region.hasClass(self.settings.active_class)) + region.addClass(self.settings.active_class); + selected = true; + } else { + region.removeClass(self.settings.active_class); + } + } else if (region.hasClass(self.settings.active_class)) { + selected = true; + } + }); + + if (!selected && (settings.one_up || !self.is_horizontal_nav(section) && + !self.is_vertical_nav(section) && !self.is_accordion(section))) + regions.filter(":visible").first().addClass(self.settings.active_class); + } + }); + } + }, + + reflow: function() { + var self = Foundation.libs.section; + + $(self.settings.section_selector).removeAttr(self.settings.resized_data_attr); + self.throttle(function() { self.resize(); }, 30)(); + }, + + small: function(el) { + var settings = $.extend({}, this.settings, this.data_options(el)); + + if (this.is_horizontal_tabs(el)) { + return false; + } + if (el && this.is_accordion(el)) { + return true; + } + if ($('html').hasClass('lt-ie9')) { + return true; + } + if ($('html').hasClass('ie8compat')) { + return true; + } + return $(this.scope).width() < settings.small_breakpoint; + }, + + off: function() { + $(this.scope).off('.fndtn.section'); + $(window).off('.fndtn.section'); + $(document).off('.fndtn.section'); + } + }; + + //resize selected sections + $.fn.reflow_section = function(ensure_has_active_region) { + var section = this, + self = Foundation.libs.section; + + section.removeAttr(self.settings.resized_data_attr); + self.throttle(function() { self.resize(section, ensure_has_active_region); }, 30)(); + return this; + }; + +}(Foundation.zj, window, document)); diff --git a/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.tooltips.js b/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.tooltips.js new file mode 100644 index 00000000..344989f3 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.tooltips.js @@ -0,0 +1,209 @@ +/*jslint unparam: true, browser: true, indent: 2 */ + +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.tooltips = { + name : 'tooltips', + + version : '4.3.2', + + settings : { + selector : '.has-tip', + additionalInheritableClasses : [], + tooltipClass : '.tooltip', + touchCloseText: 'tap to close', + appendTo: 'body', + 'disable-for-touch': false, + tipTemplate : function (selector, content) { + return '' + content + ''; + } + }, + + cache : {}, + + init : function (scope, method, options) { + Foundation.inherit(this, 'data_options'); + var self = this; + + if (typeof method === 'object') { + $.extend(true, this.settings, method); + } else if (typeof options !== 'undefined') { + $.extend(true, this.settings, options); + } + + if (typeof method !== 'string') { + if (Modernizr.touch) { + $(this.scope) + .on('click.fndtn.tooltip touchstart.fndtn.tooltip touchend.fndtn.tooltip', + '[data-tooltip]', function (e) { + var settings = $.extend({}, self.settings, self.data_options($(this))); + if (!settings['disable-for-touch']) { + e.preventDefault(); + $(settings.tooltipClass).hide(); + self.showOrCreateTip($(this)); + } + }) + .on('click.fndtn.tooltip touchstart.fndtn.tooltip touchend.fndtn.tooltip', + this.settings.tooltipClass, function (e) { + e.preventDefault(); + $(this).fadeOut(150); + }); + } else { + $(this.scope) + .on('mouseenter.fndtn.tooltip mouseleave.fndtn.tooltip', + '[data-tooltip]', function (e) { + var $this = $(this); + + if (/enter|over/i.test(e.type)) { + self.showOrCreateTip($this); + } else if (e.type === 'mouseout' || e.type === 'mouseleave') { + self.hide($this); + } + }); + } + + // $(this.scope).data('fndtn-tooltips', true); + } else { + return this[method].call(this, options); + } + + }, + + showOrCreateTip : function ($target) { + var $tip = this.getTip($target); + + if ($tip && $tip.length > 0) { + return this.show($target); + } + + return this.create($target); + }, + + getTip : function ($target) { + var selector = this.selector($target), + tip = null; + + if (selector) { + tip = $('span[data-selector="' + selector + '"]' + this.settings.tooltipClass); + } + + return (typeof tip === 'object') ? tip : false; + }, + + selector : function ($target) { + var id = $target.attr('id'), + dataSelector = $target.attr('data-tooltip') || $target.attr('data-selector'); + + if ((id && id.length < 1 || !id) && typeof dataSelector != 'string') { + dataSelector = 'tooltip' + Math.random().toString(36).substring(7); + $target.attr('data-selector', dataSelector); + } + + return (id && id.length > 0) ? id : dataSelector; + }, + + create : function ($target) { + var $tip = $(this.settings.tipTemplate(this.selector($target), $('
                ').html($target.attr('title')).html())), + classes = this.inheritable_classes($target); + + $tip.addClass(classes).appendTo(this.settings.appendTo); + if (Modernizr.touch) { + $tip.append(''+this.settings.touchCloseText+''); + } + $target.removeAttr('title').attr('title',''); + this.show($target); + }, + + reposition : function (target, tip, classes) { + var width, nub, nubHeight, nubWidth, column, objPos; + + tip.css('visibility', 'hidden').show(); + + width = target.data('width'); + nub = tip.children('.nub'); + nubHeight = this.outerHeight(nub); + nubWidth = this.outerHeight(nub); + + objPos = function (obj, top, right, bottom, left, width) { + return obj.css({ + 'top' : (top) ? top : 'auto', + 'bottom' : (bottom) ? bottom : 'auto', + 'left' : (left) ? left : 'auto', + 'right' : (right) ? right : 'auto', + 'width' : (width) ? width : 'auto' + }).end(); + }; + + objPos(tip, (target.offset().top + this.outerHeight(target) + 10), 'auto', 'auto', target.offset().left, width); + + if ($(window).width() < 767) { + objPos(tip, (target.offset().top + this.outerHeight(target) + 10), 'auto', 'auto', 12.5, $(this.scope).width()); + tip.addClass('tip-override'); + objPos(nub, -nubHeight, 'auto', 'auto', target.offset().left); + } else { + var left = target.offset().left; + if (Foundation.rtl) { + left = target.offset().left + target.offset().width - this.outerWidth(tip); + } + objPos(tip, (target.offset().top + this.outerHeight(target) + 10), 'auto', 'auto', left, width); + tip.removeClass('tip-override'); + if (classes && classes.indexOf('tip-top') > -1) { + objPos(tip, (target.offset().top - this.outerHeight(tip)), 'auto', 'auto', left, width) + .removeClass('tip-override'); + } else if (classes && classes.indexOf('tip-left') > -1) { + objPos(tip, (target.offset().top + (this.outerHeight(target) / 2) - nubHeight*2.5), 'auto', 'auto', (target.offset().left - this.outerWidth(tip) - nubHeight), width) + .removeClass('tip-override'); + } else if (classes && classes.indexOf('tip-right') > -1) { + objPos(tip, (target.offset().top + (this.outerHeight(target) / 2) - nubHeight*2.5), 'auto', 'auto', (target.offset().left + this.outerWidth(target) + nubHeight), width) + .removeClass('tip-override'); + } + } + + tip.css('visibility', 'visible').hide(); + }, + + inheritable_classes : function (target) { + var inheritables = ['tip-top', 'tip-left', 'tip-bottom', 'tip-right', 'noradius'].concat(this.settings.additionalInheritableClasses), + classes = target.attr('class'), + filtered = classes ? $.map(classes.split(' '), function (el, i) { + if ($.inArray(el, inheritables) !== -1) { + return el; + } + }).join(' ') : ''; + + return $.trim(filtered); + }, + + show : function ($target) { + var $tip = this.getTip($target); + + this.reposition($target, $tip, $target.attr('class')); + $tip.fadeIn(150); + }, + + hide : function ($target) { + var $tip = this.getTip($target); + + $tip.fadeOut(150); + }, + + // deprecate reload + reload : function () { + var $self = $(this); + + return ($self.data('fndtn-tooltips')) ? $self.foundationTooltips('destroy').foundationTooltips('init') : $self.foundationTooltips('init'); + }, + + off : function () { + $(this.scope).off('.fndtn.tooltip'); + $(this.settings.tooltipClass).each(function (i) { + $('[data-tooltip]').get(i).attr('title', $(this).text()); + }).remove(); + }, + + reflow : function () {} + }; +}(Foundation.zj, this, this.document)); diff --git a/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.topbar.js b/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.topbar.js new file mode 100644 index 00000000..5cb2d6c5 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/js/foundation/foundation.topbar.js @@ -0,0 +1,370 @@ +/*jslint unparam: true, browser: true, indent: 2 */ + +;(function ($, window, document, undefined) { + 'use strict'; + + Foundation.libs.topbar = { + name : 'topbar', + + version: '4.3.2', + + settings : { + index : 0, + stickyClass : 'sticky', + custom_back_text: true, + back_text: 'Back', + is_hover: true, + mobile_show_parent_link: false, + scrolltop : true, // jump to top when sticky nav menu toggle is clicked + init : false + }, + + init : function (section, method, options) { + Foundation.inherit(this, 'data_options addCustomRule'); + var self = this; + + if (typeof method === 'object') { + $.extend(true, this.settings, method); + } else if (typeof options !== 'undefined') { + $.extend(true, this.settings, options); + } + + if (typeof method !== 'string') { + + $('.top-bar, [data-topbar]').each(function () { + $.extend(true, self.settings, self.data_options($(this))); + self.settings.$w = $(window); + self.settings.$topbar = $(this); + self.settings.$section = self.settings.$topbar.find('section'); + self.settings.$titlebar = self.settings.$topbar.children('ul').first(); + self.settings.$topbar.data('index', 0); + + var topbarContainer = self.settings.$topbar.parent(); + if(topbarContainer.hasClass('fixed') || topbarContainer.hasClass(self.settings.stickyClass)) { + self.settings.$topbar.data('height', self.outerHeight(topbarContainer)); + self.settings.$topbar.data('stickyoffset', topbarContainer.offset().top); + } else { + self.settings.$topbar.data('height', self.outerHeight(self.settings.$topbar)); + } + + var breakpoint = $("
                ").insertAfter(self.settings.$topbar); + self.settings.breakPoint = breakpoint.width(); + breakpoint.remove(); + + self.assemble(); + + if (self.settings.is_hover) { + self.settings.$topbar.find('.has-dropdown').addClass('not-click'); + } + + // Pad body when sticky (scrolled) or fixed. + self.addCustomRule('.f-topbar-fixed { padding-top: ' + self.settings.$topbar.data('height') + 'px }'); + + if (self.settings.$topbar.parent().hasClass('fixed')) { + $('body').addClass('f-topbar-fixed'); + } + }); + + if (!self.settings.init) { + this.events(); + } + + return this.settings.init; + } else { + // fire method + return this[method].call(this, options); + } + }, + + toggle: function() { + var self = this; + var topbar = $('.top-bar, [data-topbar]'), + section = topbar.find('section, .section'); + + if (self.breakpoint()) { + if (!self.rtl) { + section.css({left: '0%'}); + section.find('>.name').css({left: '100%'}); + } else { + section.css({right: '0%'}); + section.find('>.name').css({right: '100%'}); + } + + section.find('li.moved').removeClass('moved'); + topbar.data('index', 0); + + topbar + .toggleClass('expanded') + .css('height', ''); + } + + if(self.settings.scrolltop) + { + if (!topbar.hasClass('expanded')) { + if (topbar.hasClass('fixed')) { + topbar.parent().addClass('fixed'); + topbar.removeClass('fixed'); + $('body').addClass('f-topbar-fixed'); + } + } else if (topbar.parent().hasClass('fixed')) { + if (self.settings.scrolltop) { + topbar.parent().removeClass('fixed'); + topbar.addClass('fixed'); + $('body').removeClass('f-topbar-fixed'); + + window.scrollTo(0,0); + } else { + topbar.parent().removeClass('expanded'); + } + } + } else { + if(topbar.parent().hasClass(self.settings.stickyClass)) { + topbar.parent().addClass('fixed'); + } + + if(topbar.parent().hasClass('fixed')) { + if (!topbar.hasClass('expanded')) { + topbar.removeClass('fixed'); + topbar.parent().removeClass('expanded'); + self.updateStickyPositioning(); + } else { + topbar.addClass('fixed'); + topbar.parent().addClass('expanded'); + } + } + } + }, + + timer : null, + + events : function () { + var self = this; + $(this.scope) + .off('.fndtn.topbar') + .on('click.fndtn.topbar', '.top-bar .toggle-topbar, [data-topbar] .toggle-topbar', function (e) { + e.preventDefault(); + self.toggle(); + }) + + .on('click.fndtn.topbar', '.top-bar li.has-dropdown', function (e) { + var li = $(this), + target = $(e.target), + topbar = li.closest('[data-topbar], .top-bar'), + is_hover = topbar.data('topbar'); + + if(target.data('revealId')) { + self.toggle(); + return; + } + + if (self.breakpoint()) return; + if (self.settings.is_hover && !Modernizr.touch) return; + + e.stopImmediatePropagation(); + + if (target[0].nodeName === 'A' && target.parent().hasClass('has-dropdown')) { + e.preventDefault(); + } + + if (li.hasClass('hover')) { + li + .removeClass('hover') + .find('li') + .removeClass('hover'); + + li.parents('li.hover') + .removeClass('hover'); + } else { + li.addClass('hover'); + } + }) + + .on('click.fndtn.topbar', '.top-bar .has-dropdown>a, [data-topbar] .has-dropdown>a', function (e) { + if (self.breakpoint() && $(window).width() != self.settings.breakPoint) { + + e.preventDefault(); + + var $this = $(this), + topbar = $this.closest('.top-bar, [data-topbar]'), + section = topbar.find('section, .section'), + dropdownHeight = $this.next('.dropdown').outerHeight(), + $selectedLi = $this.closest('li'); + + topbar.data('index', topbar.data('index') + 1); + $selectedLi.addClass('moved'); + + if (!self.rtl) { + section.css({left: -(100 * topbar.data('index')) + '%'}); + section.find('>.name').css({left: 100 * topbar.data('index') + '%'}); + } else { + section.css({right: -(100 * topbar.data('index')) + '%'}); + section.find('>.name').css({right: 100 * topbar.data('index') + '%'}); + } + + topbar.css('height', self.outerHeight($this.siblings('ul'), true) + self.settings.$topbar.data('height')); + } + }); + + $(window).on('resize.fndtn.topbar', function () { + if (typeof self.settings.$topbar === 'undefined') { return; } + var stickyContainer = self.settings.$topbar.parent('.' + this.settings.stickyClass); + var stickyOffset; + + if (!self.breakpoint()) { + var doToggle = self.settings.$topbar.hasClass('expanded'); + $('.top-bar, [data-topbar]') + .css('height', '') + .removeClass('expanded') + .find('li') + .removeClass('hover'); + + if(doToggle) { + self.toggle(); + } + } + + if(stickyContainer.length > 0) { + if(stickyContainer.hasClass('fixed')) { + // Remove the fixed to allow for correct calculation of the offset. + stickyContainer.removeClass('fixed'); + + stickyOffset = stickyContainer.offset().top; + if($(document.body).hasClass('f-topbar-fixed')) { + stickyOffset -= self.settings.$topbar.data('height'); + } + + self.settings.$topbar.data('stickyoffset', stickyOffset); + stickyContainer.addClass('fixed'); + } else { + stickyOffset = stickyContainer.offset().top; + self.settings.$topbar.data('stickyoffset', stickyOffset); + } + } + }.bind(this)); + + $('body').on('click.fndtn.topbar', function (e) { + var parent = $(e.target).closest('li').closest('li.hover'); + + if (parent.length > 0) { + return; + } + + $('.top-bar li, [data-topbar] li').removeClass('hover'); + }); + + // Go up a level on Click + $(this.scope).on('click.fndtn', '.top-bar .has-dropdown .back, [data-topbar] .has-dropdown .back', function (e) { + e.preventDefault(); + + var $this = $(this), + topbar = $this.closest('.top-bar, [data-topbar]'), + section = topbar.find('section, .section'), + $movedLi = $this.closest('li.moved'), + $previousLevelUl = $movedLi.parent(); + + topbar.data('index', topbar.data('index') - 1); + + if (!self.rtl) { + section.css({left: -(100 * topbar.data('index')) + '%'}); + section.find('>.name').css({left: 100 * topbar.data('index') + '%'}); + } else { + section.css({right: -(100 * topbar.data('index')) + '%'}); + section.find('>.name').css({right: 100 * topbar.data('index') + '%'}); + } + + if (topbar.data('index') === 0) { + topbar.css('height', ''); + } else { + topbar.css('height', self.outerHeight($previousLevelUl, true) + self.settings.$topbar.data('height')); + } + + setTimeout(function () { + $movedLi.removeClass('moved'); + }, 300); + }); + }, + + breakpoint : function () { + return $(document).width() <= this.settings.breakPoint || $('html').hasClass('lt-ie9'); + }, + + assemble : function () { + var self = this; + // Pull element out of the DOM for manipulation + this.settings.$section.detach(); + + this.settings.$section.find('.has-dropdown>a').each(function () { + var $link = $(this), + $dropdown = $link.siblings('.dropdown'), + url = $link.attr('href'); + + if (self.settings.mobile_show_parent_link && url && url.length > 1) { + var $titleLi = $('
              2. ' + $link.text() +'
              3. '); + } else { + var $titleLi = $('
              4. '); + } + + // Copy link to subnav + if (self.settings.custom_back_text == true) { + $titleLi.find('h5>a').html(self.settings.back_text); + } else { + $titleLi.find('h5>a').html('« ' + $link.html()); + } + $dropdown.prepend($titleLi); + }); + + // Put element back in the DOM + this.settings.$section.appendTo(this.settings.$topbar); + + // check for sticky + this.sticky(); + }, + + height : function (ul) { + var total = 0, + self = this; + + ul.find('> li').each(function () { total += self.outerHeight($(this), true); }); + + return total; + }, + + sticky : function () { + var $window = $(window), + self = this; + + $window.scroll(function() { + self.updateStickyPositioning(); + }); + }, + + updateStickyPositioning: function() { + var klass = '.' + this.settings.stickyClass; + var $window = $(window); + + if ($(klass).length > 0) { + var distance = this.settings.$topbar.data('stickyoffset'); + if (!$(klass).hasClass('expanded')) { + if ($window.scrollTop() > (distance)) { + if (!$(klass).hasClass('fixed')) { + $(klass).addClass('fixed'); + $('body').addClass('f-topbar-fixed'); + } + } else if ($window.scrollTop() <= distance) { + if ($(klass).hasClass('fixed')) { + $(klass).removeClass('fixed'); + $('body').removeClass('f-topbar-fixed'); + } + } + } + } + }, + + off : function () { + $(this.scope).off('.fndtn.topbar'); + $(window).off('.fndtn.topbar'); + }, + + reflow : function () {} + }; +}(Foundation.zj, this, this.document)); diff --git a/docroot/sites/all/themes/libraryzurb_teen/js/fullcalendar.min.js b/docroot/sites/all/themes/libraryzurb_teen/js/fullcalendar.min.js new file mode 100644 index 00000000..da4b984b --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/js/fullcalendar.min.js @@ -0,0 +1,7 @@ +/*! + * FullCalendar v1.6.4 + * Docs & License: http://arshaw.com/fullcalendar/ + * (c) 2013 Adam Shaw + */ +(function(t,e){function n(e){t.extend(!0,Ce,e)}function r(n,r,c){function u(t){ae?p()&&(S(),M(t)):f()}function f(){oe=r.theme?"ui":"fc",n.addClass("fc"),r.isRTL?n.addClass("fc-rtl"):n.addClass("fc-ltr"),r.theme&&n.addClass("ui-widget"),ae=t("
                ").prependTo(n),ne=new a(ee,r),re=ne.render(),re&&n.prepend(re),y(r.defaultView),r.handleWindowResize&&t(window).resize(x),m()||v()}function v(){setTimeout(function(){!ie.start&&m()&&C()},0)}function h(){ie&&(te("viewDestroy",ie,ie,ie.element),ie.triggerEventDestroy()),t(window).unbind("resize",x),ne.destroy(),ae.remove(),n.removeClass("fc fc-rtl ui-widget")}function p(){return n.is(":visible")}function m(){return t("body").is(":visible")}function y(t){ie&&t==ie.name||D(t)}function D(e){he++,ie&&(te("viewDestroy",ie,ie,ie.element),Y(),ie.triggerEventDestroy(),G(),ie.element.remove(),ne.deactivateButton(ie.name)),ne.activateButton(e),ie=new Se[e](t("
                ").appendTo(ae),ee),C(),$(),he--}function C(t){(!ie.start||t||ie.start>ge||ge>=ie.end)&&p()&&M(t)}function M(t){he++,ie.start&&(te("viewDestroy",ie,ie,ie.element),Y(),N()),G(),ie.render(ge,t||0),T(),$(),(ie.afterRender||A)(),_(),P(),te("viewRender",ie,ie,ie.element),ie.trigger("viewDisplay",de),he--,z()}function E(){p()&&(Y(),N(),S(),T(),F())}function S(){le=r.contentHeight?r.contentHeight:r.height?r.height-(re?re.height():0)-R(ae):Math.round(ae.width()/Math.max(r.aspectRatio,.5))}function T(){le===e&&S(),he++,ie.setHeight(le),ie.setWidth(ae.width()),he--,se=n.outerWidth()}function x(){if(!he)if(ie.start){var t=++ve;setTimeout(function(){t==ve&&!he&&p()&&se!=(se=n.outerWidth())&&(he++,E(),ie.trigger("windowResize",de),he--)},200)}else v()}function k(){N(),W()}function H(t){N(),F(t)}function F(t){p()&&(ie.setEventData(pe),ie.renderEvents(pe,t),ie.trigger("eventAfterAllRender"))}function N(){ie.triggerEventDestroy(),ie.clearEvents(),ie.clearEventData()}function z(){!r.lazyFetching||ue(ie.visStart,ie.visEnd)?W():F()}function W(){fe(ie.visStart,ie.visEnd)}function O(t){pe=t,F()}function L(t){H(t)}function _(){ne.updateTitle(ie.title)}function P(){var t=new Date;t>=ie.start&&ie.end>t?ne.disableButton("today"):ne.enableButton("today")}function q(t,n,r){ie.select(t,n,r===e?!0:r)}function Y(){ie&&ie.unselect()}function B(){C(-1)}function j(){C(1)}function I(){i(ge,-1),C()}function X(){i(ge,1),C()}function J(){ge=new Date,C()}function V(t,e,n){t instanceof Date?ge=d(t):g(ge,t,e,n),C()}function U(t,n,r){t!==e&&i(ge,t),n!==e&&s(ge,n),r!==e&&l(ge,r),C()}function Z(){return d(ge)}function G(){ae.css({width:"100%",height:ae.height(),overflow:"hidden"})}function $(){ae.css({width:"",height:"",overflow:""})}function Q(){return ie}function K(t,n){return n===e?r[t]:(("height"==t||"contentHeight"==t||"aspectRatio"==t)&&(r[t]=n,E()),e)}function te(t,n){return r[t]?r[t].apply(n||de,Array.prototype.slice.call(arguments,2)):e}var ee=this;ee.options=r,ee.render=u,ee.destroy=h,ee.refetchEvents=k,ee.reportEvents=O,ee.reportEventChange=L,ee.rerenderEvents=H,ee.changeView=y,ee.select=q,ee.unselect=Y,ee.prev=B,ee.next=j,ee.prevYear=I,ee.nextYear=X,ee.today=J,ee.gotoDate=V,ee.incrementDate=U,ee.formatDate=function(t,e){return w(t,e,r)},ee.formatDates=function(t,e,n){return b(t,e,n,r)},ee.getDate=Z,ee.getView=Q,ee.option=K,ee.trigger=te,o.call(ee,r,c);var ne,re,ae,oe,ie,se,le,ce,ue=ee.isFetchNeeded,fe=ee.fetchEvents,de=n[0],ve=0,he=0,ge=new Date,pe=[];g(ge,r.year,r.month,r.date),r.droppable&&t(document).bind("dragstart",function(e,n){var a=e.target,o=t(a);if(!o.parents(".fc").length){var i=r.dropAccept;(t.isFunction(i)?i.call(a,o):o.is(i))&&(ce=a,ie.dragStart(ce,e,n))}}).bind("dragstop",function(t,e){ce&&(ie.dragStop(ce,t,e),ce=null)})}function a(n,r){function a(){v=r.theme?"ui":"fc";var n=r.header;return n?h=t("").append(t("").append(i("left")).append(i("center")).append(i("right"))):e}function o(){h.remove()}function i(e){var a=t("",ue&&(r+=""),t=0;ne>t;t++)e=Ee(0,t),r+="";return r+=""}function v(){var t,e,n,r=le+"-widget-content",a="";for(a+="",t=0;ee>t;t++){for(a+="",ue&&(n=Ee(t,0),a+=""),e=0;ne>e;e++)n=Ee(t,e),a+=h(n);a+=""}return a+=""}function h(t){var e=le+"-widget-content",n=O.start.getMonth(),r=f(new Date),a="",o=["fc-day","fc-"+ke[t.getDay()],e];return t.getMonth()!=n&&o.push("fc-other-month"),+t==+r?o.push("fc-today",le+"-state-highlight"):r>t?o.push("fc-past"):o.push("fc-future"),a+=""}function g(e){Q=e;var n,r,a,o=Q-_.height();"variable"==he("weekMode")?n=r=Math.floor(o/(1==ee?2:6)):(n=Math.floor(o/ee),r=o-n*(ee-1)),J.each(function(e,o){ee>e&&(a=t(o),a.find("> div").css("min-height",(e==ee-1?r:n)-R(a)))})}function p(t){$=t,ie.clear(),se.clear(),te=0,ue&&(te=_.find("th.fc-week-number").outerWidth()),K=Math.floor(($-te)/ne),S(P.slice(0,-1),K)}function y(t){t.click(w).mousedown(Me)}function w(e){if(!he("selectable")){var n=m(t(this).data("date"));ge("dayClick",this,n,!0,e)}}function b(t,e,n){n&&ae.build();for(var r=Te(t,e),a=0;r.length>a;a++){var o=r[a];y(D(o.row,o.leftCol,o.row,o.rightCol))}}function D(t,n,r,a){var o=ae.rect(t,n,r,a,e);return be(o,e)}function C(t){return d(t)}function M(t,e){b(t,l(d(e),1),!0)}function E(){Ce()}function T(t,e,n){var r=Se(t),a=X[r.row*ne+r.col];ge("dayClick",a,t,e,n)}function x(t,e){oe.start(function(t){Ce(),t&&D(t.row,t.col,t.row,t.col)},e)}function k(t,e,n){var r=oe.stop();if(Ce(),r){var a=Ee(r);ge("drop",t,a,!0,e,n)}}function H(t){return d(t.start)}function F(t){return ie.left(t)}function N(t){return ie.right(t)}function z(t){return se.left(t)}function W(t){return se.right(t)}function A(t){return I.eq(t)}var O=this;O.renderBasic=a,O.setHeight=g,O.setWidth=p,O.renderDayOverlay=b,O.defaultSelectionEnd=C,O.renderSelection=M,O.clearSelection=E,O.reportDayClick=T,O.dragStart=x,O.dragStop=k,O.defaultEventEnd=H,O.getHoverListener=function(){return oe},O.colLeft=F,O.colRight=N,O.colContentLeft=z,O.colContentRight=W,O.getIsCellAllDay=function(){return!0},O.allDayRow=A,O.getRowCnt=function(){return ee},O.getColCnt=function(){return ne},O.getColWidth=function(){return K},O.getDaySegmentContainer=function(){return Z},fe.call(O,e,n,r),me.call(O),pe.call(O),G.call(O);var L,_,P,j,I,X,J,V,U,Z,$,Q,K,te,ee,ne,re,ae,oe,ie,se,le,ce,ue,de,ve,he=O.opt,ge=O.trigger,be=O.renderOverlay,Ce=O.clearOverlays,Me=O.daySelectionMousedown,Ee=O.cellToDate,Se=O.dateToCell,Te=O.rangeToSegments,xe=n.formatDate;Y(e.addClass("fc-grid")),ae=new ye(function(e,n){var r,a,o;P.each(function(e,i){r=t(i),a=r.offset().left,e&&(o[1]=a),o=[a],n[e]=o}),o[1]=a+r.outerWidth(),I.each(function(n,i){ee>n&&(r=t(i),a=r.offset().top,n&&(o[1]=a),o=[a],e[n]=o)}),o[1]=a+r.outerHeight()}),oe=new we(ae),ie=new De(function(t){return V.eq(t)}),se=new De(function(t){return U.eq(t)})}function G(){function t(t,e){n.renderDayEvents(t,e)}function e(){n.getDaySegmentContainer().empty()}var n=this;n.renderEvents=t,n.clearEvents=e,de.call(n)}function $(t,e){function n(t,e){e&&l(t,7*e);var n=l(d(t),-((t.getDay()-a("firstDay")+7)%7)),u=l(d(n),7),f=d(n);i(f);var v=d(u);i(v,-1,!0);var h=s();r.title=c(f,l(d(v),-1),a("titleFormat")),r.start=n,r.end=u,r.visStart=f,r.visEnd=v,o(h)}var r=this;r.render=n,K.call(r,t,e,"agendaWeek");var a=r.opt,o=r.renderAgenda,i=r.skipHiddenDays,s=r.getCellsPerWeek,c=e.formatDates}function Q(t,e){function n(t,e){e&&l(t,e),i(t,0>e?-1:1);var n=d(t,!0),c=l(d(n),1);r.title=s(t,a("titleFormat")),r.start=r.visStart=n,r.end=r.visEnd=c,o(1)}var r=this;r.render=n,K.call(r,t,e,"agendaDay");var a=r.opt,o=r.renderAgenda,i=r.skipHiddenDays,s=e.formatDate}function K(n,r,a){function o(t){We=t,i(),K?c():s()}function i(){qe=Ue("theme")?"ui":"fc",Ye=Ue("isRTL"),Be=y(Ue("minTime")),je=y(Ue("maxTime")),Ie=Ue("columnFormat"),Xe=Ue("weekNumbers"),Je=Ue("weekNumberTitle"),Ve="iso"!=Ue("weekNumberCalculation")?"w":"W",Re=Ue("snapMinutes")||Ue("slotMinutes")}function s(){var e,r,a,o,i,s=qe+"-widget-header",l=qe+"-widget-content",f=0==Ue("slotMinutes")%15;for(c(),ce=t("
                ").appendTo(n),Ue("allDaySlot")?(ue=t("
                ").appendTo(ce),e="
                "),o=r.header[e];return o&&t.each(o.split(" "),function(e){e>0&&a.append("");var o;t.each(this.split(","),function(e,i){if("title"==i)a.append("

                 

                "),o&&o.addClass(v+"-corner-right"),o=null;else{var s;if(n[i]?s=n[i]:Se[i]&&(s=function(){u.removeClass(v+"-state-hover"),n.changeView(i)}),s){var l=r.theme?P(r.buttonIcons,i):null,c=P(r.buttonText,i),u=t(""+(l?""+"":c)+"").click(function(){u.hasClass(v+"-state-disabled")||s()}).mousedown(function(){u.not("."+v+"-state-active").not("."+v+"-state-disabled").addClass(v+"-state-down")}).mouseup(function(){u.removeClass(v+"-state-down")}).hover(function(){u.not("."+v+"-state-active").not("."+v+"-state-disabled").addClass(v+"-state-hover")},function(){u.removeClass(v+"-state-hover").removeClass(v+"-state-down")}).appendTo(a);Y(u),o||u.addClass(v+"-corner-left"),o=u}}}),o&&o.addClass(v+"-corner-right")}),a}function s(t){h.find("h2").html(t)}function l(t){h.find("span.fc-button-"+t).addClass(v+"-state-active")}function c(t){h.find("span.fc-button-"+t).removeClass(v+"-state-active")}function u(t){h.find("span.fc-button-"+t).addClass(v+"-state-disabled")}function f(t){h.find("span.fc-button-"+t).removeClass(v+"-state-disabled")}var d=this;d.render=a,d.destroy=o,d.updateTitle=s,d.activateButton=l,d.deactivateButton=c,d.disableButton=u,d.enableButton=f;var v,h=t([])}function o(n,r){function a(t,e){return!E||E>t||e>S}function o(t,e){E=t,S=e,W=[];var n=++R,r=F.length;N=r;for(var a=0;r>a;a++)i(F[a],n)}function i(e,r){s(e,function(a){if(r==R){if(a){n.eventDataTransform&&(a=t.map(a,n.eventDataTransform)),e.eventDataTransform&&(a=t.map(a,e.eventDataTransform));for(var o=0;a.length>o;o++)a[o].source=e,w(a[o]);W=W.concat(a)}N--,N||k(W)}})}function s(r,a){var o,i,l=Ee.sourceFetchers;for(o=0;l.length>o;o++){if(i=l[o](r,E,S,a),i===!0)return;if("object"==typeof i)return s(i,a),e}var c=r.events;if(c)t.isFunction(c)?(m(),c(d(E),d(S),function(t){a(t),y()})):t.isArray(c)?a(c):a();else{var u=r.url;if(u){var f,v=r.success,h=r.error,g=r.complete;f=t.isFunction(r.data)?r.data():r.data;var p=t.extend({},f||{}),w=X(r.startParam,n.startParam),b=X(r.endParam,n.endParam);w&&(p[w]=Math.round(+E/1e3)),b&&(p[b]=Math.round(+S/1e3)),m(),t.ajax(t.extend({},Te,r,{data:p,success:function(e){e=e||[];var n=I(v,this,arguments);t.isArray(n)&&(e=n),a(e)},error:function(){I(h,this,arguments),a()},complete:function(){I(g,this,arguments),y()}}))}else a()}}function l(t){t=c(t),t&&(N++,i(t,R))}function c(n){return t.isFunction(n)||t.isArray(n)?n={events:n}:"string"==typeof n&&(n={url:n}),"object"==typeof n?(b(n),F.push(n),n):e}function u(e){F=t.grep(F,function(t){return!D(t,e)}),W=t.grep(W,function(t){return!D(t.source,e)}),k(W)}function f(t){var e,n,r=W.length,a=x().defaultEventEnd,o=t.start-t._start,i=t.end?t.end-(t._end||a(t)):0;for(e=0;r>e;e++)n=W[e],n._id==t._id&&n!=t&&(n.start=new Date(+n.start+o),n.end=t.end?n.end?new Date(+n.end+i):new Date(+a(n)+i):null,n.title=t.title,n.url=t.url,n.allDay=t.allDay,n.className=t.className,n.editable=t.editable,n.color=t.color,n.backgroundColor=t.backgroundColor,n.borderColor=t.borderColor,n.textColor=t.textColor,w(n));w(t),k(W)}function v(t,e){w(t),t.source||(e&&(H.events.push(t),t.source=H),W.push(t)),k(W)}function h(e){if(e){if(!t.isFunction(e)){var n=e+"";e=function(t){return t._id==n}}W=t.grep(W,e,!0);for(var r=0;F.length>r;r++)t.isArray(F[r].events)&&(F[r].events=t.grep(F[r].events,e,!0))}else{W=[];for(var r=0;F.length>r;r++)t.isArray(F[r].events)&&(F[r].events=[])}k(W)}function g(e){return t.isFunction(e)?t.grep(W,e):e?(e+="",t.grep(W,function(t){return t._id==e})):W}function m(){z++||T("loading",null,!0,x())}function y(){--z||T("loading",null,!1,x())}function w(t){var r=t.source||{},a=X(r.ignoreTimezone,n.ignoreTimezone);t._id=t._id||(t.id===e?"_fc"+xe++:t.id+""),t.date&&(t.start||(t.start=t.date),delete t.date),t._start=d(t.start=p(t.start,a)),t.end=p(t.end,a),t.end&&t.end<=t.start&&(t.end=null),t._end=t.end?d(t.end):null,t.allDay===e&&(t.allDay=X(r.allDayDefault,n.allDayDefault)),t.className?"string"==typeof t.className&&(t.className=t.className.split(/\s+/)):t.className=[]}function b(t){t.className?"string"==typeof t.className&&(t.className=t.className.split(/\s+/)):t.className=[];for(var e=Ee.sourceNormalizers,n=0;e.length>n;n++)e[n](t)}function D(t,e){return t&&e&&C(t)==C(e)}function C(t){return("object"==typeof t?t.events||t.url:"")||t}var M=this;M.isFetchNeeded=a,M.fetchEvents=o,M.addEventSource=l,M.removeEventSource=u,M.updateEvent=f,M.renderEvent=v,M.removeEvents=h,M.clientEvents=g,M.normalizeEvent=w;for(var E,S,T=M.trigger,x=M.getView,k=M.reportEvents,H={events:[]},F=[H],R=0,N=0,z=0,W=[],A=0;r.length>A;A++)c(r[A])}function i(t,e,n){return t.setFullYear(t.getFullYear()+e),n||f(t),t}function s(t,e,n){if(+t){var r=t.getMonth()+e,a=d(t);for(a.setDate(1),a.setMonth(r),t.setMonth(r),n||f(t);t.getMonth()!=a.getMonth();)t.setDate(t.getDate()+(a>t?1:-1))}return t}function l(t,e,n){if(+t){var r=t.getDate()+e,a=d(t);a.setHours(9),a.setDate(r),t.setDate(r),n||f(t),c(t,a)}return t}function c(t,e){if(+t)for(;t.getDate()!=e.getDate();)t.setTime(+t+(e>t?1:-1)*Fe)}function u(t,e){return t.setMinutes(t.getMinutes()+e),t}function f(t){return t.setHours(0),t.setMinutes(0),t.setSeconds(0),t.setMilliseconds(0),t}function d(t,e){return e?f(new Date(+t)):new Date(+t)}function v(){var t,e=0;do t=new Date(1970,e++,1);while(t.getHours());return t}function h(t,e){return Math.round((d(t,!0)-d(e,!0))/He)}function g(t,n,r,a){n!==e&&n!=t.getFullYear()&&(t.setDate(1),t.setMonth(0),t.setFullYear(n)),r!==e&&r!=t.getMonth()&&(t.setDate(1),t.setMonth(r)),a!==e&&t.setDate(a)}function p(t,n){return"object"==typeof t?t:"number"==typeof t?new Date(1e3*t):"string"==typeof t?t.match(/^\d+(\.\d+)?$/)?new Date(1e3*parseFloat(t)):(n===e&&(n=!0),m(t,n)||(t?new Date(t):null)):null}function m(t,e){var n=t.match(/^([0-9]{4})(-([0-9]{2})(-([0-9]{2})([T ]([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?(Z|(([-+])([0-9]{2})(:?([0-9]{2}))?))?)?)?)?$/);if(!n)return null;var r=new Date(n[1],0,1);if(e||!n[13]){var a=new Date(n[1],0,1,9,0);n[3]&&(r.setMonth(n[3]-1),a.setMonth(n[3]-1)),n[5]&&(r.setDate(n[5]),a.setDate(n[5])),c(r,a),n[7]&&r.setHours(n[7]),n[8]&&r.setMinutes(n[8]),n[10]&&r.setSeconds(n[10]),n[12]&&r.setMilliseconds(1e3*Number("0."+n[12])),c(r,a)}else if(r.setUTCFullYear(n[1],n[3]?n[3]-1:0,n[5]||1),r.setUTCHours(n[7]||0,n[8]||0,n[10]||0,n[12]?1e3*Number("0."+n[12]):0),n[14]){var o=60*Number(n[16])+(n[18]?Number(n[18]):0);o*="-"==n[15]?1:-1,r=new Date(+r+1e3*60*o)}return r}function y(t){if("number"==typeof t)return 60*t;if("object"==typeof t)return 60*t.getHours()+t.getMinutes();var e=t.match(/(\d+)(?::(\d+))?\s*(\w+)?/);if(e){var n=parseInt(e[1],10);return e[3]&&(n%=12,"p"==e[3].toLowerCase().charAt(0)&&(n+=12)),60*n+(e[2]?parseInt(e[2],10):0)}}function w(t,e,n){return b(t,null,e,n)}function b(t,e,n,r){r=r||Ce;var a,o,i,s,l=t,c=e,u=n.length,f="";for(a=0;u>a;a++)if(o=n.charAt(a),"'"==o){for(i=a+1;u>i;i++)if("'"==n.charAt(i)){l&&(f+=i==a+1?"'":n.substring(a+1,i),a=i);break}}else if("("==o){for(i=a+1;u>i;i++)if(")"==n.charAt(i)){var d=w(l,n.substring(a+1,i),r);parseInt(d.replace(/\D/,""),10)&&(f+=d),a=i;break}}else if("["==o){for(i=a+1;u>i;i++)if("]"==n.charAt(i)){var v=n.substring(a+1,i),d=w(l,v,r);d!=w(c,v,r)&&(f+=d),a=i;break}}else if("{"==o)l=e,c=t;else if("}"==o)l=t,c=e;else{for(i=u;i>a;i--)if(s=Ne[n.substring(a,i)]){l&&(f+=s(l,r)),a=i-1;break}i==a&&l&&(f+=o)}return f}function D(t){var e,n=new Date(t.getTime());return n.setDate(n.getDate()+4-(n.getDay()||7)),e=n.getTime(),n.setMonth(0),n.setDate(1),Math.floor(Math.round((e-n)/864e5)/7)+1}function C(t){return t.end?M(t.end,t.allDay):l(d(t.start),1)}function M(t,e){return t=d(t),e||t.getHours()||t.getMinutes()?l(t,1):f(t)}function E(n,r,a){n.unbind("mouseover").mouseover(function(n){for(var o,i,s,l=n.target;l!=this;)o=l,l=l.parentNode;(i=o._fci)!==e&&(o._fci=e,s=r[i],a(s.event,s.element,s),t(n.target).trigger(n)),n.stopPropagation()})}function S(e,n,r){for(var a,o=0;e.length>o;o++)a=t(e[o]),a.width(Math.max(0,n-x(a,r)))}function T(e,n,r){for(var a,o=0;e.length>o;o++)a=t(e[o]),a.height(Math.max(0,n-R(a,r)))}function x(t,e){return k(t)+F(t)+(e?H(t):0)}function k(e){return(parseFloat(t.css(e[0],"paddingLeft",!0))||0)+(parseFloat(t.css(e[0],"paddingRight",!0))||0)}function H(e){return(parseFloat(t.css(e[0],"marginLeft",!0))||0)+(parseFloat(t.css(e[0],"marginRight",!0))||0)}function F(e){return(parseFloat(t.css(e[0],"borderLeftWidth",!0))||0)+(parseFloat(t.css(e[0],"borderRightWidth",!0))||0)}function R(t,e){return N(t)+W(t)+(e?z(t):0)}function N(e){return(parseFloat(t.css(e[0],"paddingTop",!0))||0)+(parseFloat(t.css(e[0],"paddingBottom",!0))||0)}function z(e){return(parseFloat(t.css(e[0],"marginTop",!0))||0)+(parseFloat(t.css(e[0],"marginBottom",!0))||0)}function W(e){return(parseFloat(t.css(e[0],"borderTopWidth",!0))||0)+(parseFloat(t.css(e[0],"borderBottomWidth",!0))||0)}function A(){}function O(t,e){return t-e}function L(t){return Math.max.apply(Math,t)}function _(t){return(10>t?"0":"")+t}function P(t,n){if(t[n]!==e)return t[n];for(var r,a=n.split(/(?=[A-Z])/),o=a.length-1;o>=0;o--)if(r=t[a[o].toLowerCase()],r!==e)return r;return t[""]}function q(t){return t.replace(/&/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""").replace(/\n/g,"
                ")}function Y(t){t.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return!1})}function B(t){t.children().removeClass("fc-first fc-last").filter(":first-child").addClass("fc-first").end().filter(":last-child").addClass("fc-last")}function j(t,e){var n=t.source||{},r=t.color,a=n.color,o=e("eventColor"),i=t.backgroundColor||r||n.backgroundColor||a||e("eventBackgroundColor")||o,s=t.borderColor||r||n.borderColor||a||e("eventBorderColor")||o,l=t.textColor||n.textColor||e("eventTextColor"),c=[];return i&&c.push("background-color:"+i),s&&c.push("border-color:"+s),l&&c.push("color:"+l),c.join(";")}function I(e,n,r){if(t.isFunction(e)&&(e=[e]),e){var a,o;for(a=0;e.length>a;a++)o=e[a].apply(n,r)||o;return o}}function X(){for(var t=0;arguments.length>t;t++)if(arguments[t]!==e)return arguments[t]}function J(t,e){function n(t,e){e&&(s(t,e),t.setDate(1));var n=a("firstDay"),f=d(t,!0);f.setDate(1);var v=s(d(f),1),g=d(f);l(g,-((g.getDay()-n+7)%7)),i(g);var p=d(v);l(p,(7-p.getDay()+n)%7),i(p,-1,!0);var m=c(),y=Math.round(h(p,g)/7);"fixed"==a("weekMode")&&(l(p,7*(6-y)),y=6),r.title=u(f,a("titleFormat")),r.start=f,r.end=v,r.visStart=g,r.visEnd=p,o(y,m,!0)}var r=this;r.render=n,Z.call(r,t,e,"month");var a=r.opt,o=r.renderBasic,i=r.skipHiddenDays,c=r.getCellsPerWeek,u=e.formatDate}function V(t,e){function n(t,e){e&&l(t,7*e);var n=l(d(t),-((t.getDay()-a("firstDay")+7)%7)),u=l(d(n),7),f=d(n);i(f);var v=d(u);i(v,-1,!0);var h=s();r.start=n,r.end=u,r.visStart=f,r.visEnd=v,r.title=c(f,l(d(v),-1),a("titleFormat")),o(1,h,!1)}var r=this;r.render=n,Z.call(r,t,e,"basicWeek");var a=r.opt,o=r.renderBasic,i=r.skipHiddenDays,s=r.getCellsPerWeek,c=e.formatDates}function U(t,e){function n(t,e){e&&l(t,e),i(t,0>e?-1:1);var n=d(t,!0),c=l(d(n),1);r.title=s(t,a("titleFormat")),r.start=r.visStart=n,r.end=r.visEnd=c,o(1,1,!1)}var r=this;r.render=n,Z.call(r,t,e,"basicDay");var a=r.opt,o=r.renderBasic,i=r.skipHiddenDays,s=e.formatDate}function Z(e,n,r){function a(t,e,n){ee=t,ne=e,re=n,o(),j||i(),s()}function o(){le=he("theme")?"ui":"fc",ce=he("columnFormat"),ue=he("weekNumbers"),de=he("weekNumberTitle"),ve="iso"!=he("weekNumberCalculation")?"w":"W"}function i(){Z=t("
                ").appendTo(e)}function s(){var n=c();L&&L.remove(),L=t(n).appendTo(e),_=L.find("thead"),P=_.find(".fc-day-header"),j=L.find("tbody"),I=j.find("tr"),X=j.find(".fc-day"),J=I.find("td:first-child"),V=I.eq(0).find(".fc-day > div"),U=I.eq(0).find(".fc-day-content > div"),B(_.add(_.find("tr"))),B(I),I.eq(0).addClass("fc-first"),I.filter(":last").addClass("fc-last"),X.each(function(e,n){var r=Ee(Math.floor(e/ne),e%ne);ge("dayRender",O,r,t(n))}),y(X)}function c(){var t=""+u()+v()+"
                ";return t}function u(){var t,e,n=le+"-widget-header",r="";for(r+="
                "+q(de)+""+q(xe(e,ce))+"
                "+"
                "+q(xe(n,ve))+"
                "+"
                "+"
                ",re&&(a+="
                "+t.getDate()+"
                "),a+="
                 
                "+""+""+""+"
                "+Ue("allDayText")+""+"
                "+"
                 
                ",de=t(e).appendTo(ce),ve=de.find("tr"),C(ve.find("td")),ce.append("
                "+"
                "+"
                ")):ue=t([]),he=t("
                ").appendTo(ce),ge=t("
                ").appendTo(he),be=t("
                ").appendTo(ge),e="",r=v(),o=u(d(r),je),u(r,Be),Ae=0,a=0;o>r;a++)i=r.getMinutes(),e+=""+""+""+"",u(r,Ue("slotMinutes")),Ae++;e+="
                "+(f&&i?" ":on(r,Ue("axisFormat")))+""+"
                 
                "+"
                ",Ce=t(e).appendTo(ge),M(Ce.find("td"))}function c(){var e=h();K&&K.remove(),K=t(e).appendTo(n),ee=K.find("thead"),ne=ee.find("th").slice(1,-1),re=K.find("tbody"),ae=re.find("td").slice(0,-1),oe=ae.find("> div"),ie=ae.find(".fc-day-content > div"),se=ae.eq(0),le=oe.eq(0),B(ee.add(ee.find("tr"))),B(re.add(re.find("tr")))}function h(){var t=""+g()+p()+"
                ";return t}function g(){var t,e,n,r=qe+"-widget-header",a="";for(a+="",Xe?(t=nn(0,0),e=on(t,Ve),Ye?e+=Je:e=Je+e,a+=""+q(e)+""):a+=" ",n=0;We>n;n++)t=nn(0,n),a+=""+q(on(t,Ie))+"";return a+=" "+""+""}function p(){var t,e,n,r,a,o=qe+"-widget-header",i=qe+"-widget-content",s=f(new Date),l="";for(l+=" ",n="",e=0;We>e;e++)t=nn(0,e),a=["fc-col"+e,"fc-"+ke[t.getDay()],i],+t==+s?a.push(qe+"-state-highlight","fc-today"):s>t?a.push("fc-past"):a.push("fc-future"),r=""+"
                "+"
                "+"
                 
                "+"
                "+"
                "+"",n+=r;return l+=n,l+=" "+""+""}function m(t){t===e&&(t=Se),Se=t,sn={};var n=re.position().top,r=he.position().top,a=Math.min(t-n,Ce.height()+r+1);le.height(a-R(se)),ce.css("top",n),he.height(a-r-1),Fe=Ce.find("tr:first").height()+1,Ne=Ue("slotMinutes")/Re,ze=Fe/Ne}function w(e){Ee=e,_e.clear(),Pe.clear();var n=ee.find("th:first");de&&(n=n.add(de.find("th:first"))),n=n.add(Ce.find("th:first")),Te=0,S(n.width("").each(function(e,n){Te=Math.max(Te,t(n).outerWidth())}),Te);var r=K.find(".fc-agenda-gutter");de&&(r=r.add(de.find("th.fc-agenda-gutter")));var a=he[0].clientWidth;He=he.width()-a,He?(S(r,He),r.show().prev().removeClass("fc-last")):r.hide().prev().addClass("fc-last"),xe=Math.floor((a-Te)/We),S(ne.slice(0,-1),xe)}function b(){function t(){he.scrollTop(r)}var e=v(),n=d(e);n.setHours(Ue("firstHour"));var r=_(e,n)+1;t(),setTimeout(t,0)}function D(){b()}function C(t){t.click(E).mousedown(tn)}function M(t){t.click(E).mousedown(U)}function E(t){if(!Ue("selectable")){var e=Math.min(We-1,Math.floor((t.pageX-K.offset().left-Te)/xe)),n=nn(0,e),r=this.parentNode.className.match(/fc-slot(\d+)/);if(r){var a=parseInt(r[1])*Ue("slotMinutes"),o=Math.floor(a/60);n.setHours(o),n.setMinutes(a%60+Be),Ze("dayClick",ae[e],n,!1,t)}else Ze("dayClick",ae[e],n,!0,t)}}function x(t,e,n){n&&Oe.build();for(var r=an(t,e),a=0;r.length>a;a++){var o=r[a];C(k(o.row,o.leftCol,o.row,o.rightCol))}}function k(t,e,n,r){var a=Oe.rect(t,e,n,r,ce);return Ge(a,ce)}function H(t,e){for(var n=0;We>n;n++){var r=nn(0,n),a=l(d(r),1),o=new Date(Math.max(r,t)),i=new Date(Math.min(a,e));if(i>o){var s=Oe.rect(0,n,0,n,ge),c=_(r,o),u=_(r,i);s.top=c,s.height=u-c,M(Ge(s,ge))}}}function F(t){return _e.left(t)}function N(t){return Pe.left(t)}function z(t){return _e.right(t)}function W(t){return Pe.right(t)}function A(t){return Ue("allDaySlot")&&!t.row}function L(t){var e=nn(0,t.col),n=t.row;return Ue("allDaySlot")&&n--,n>=0&&u(e,Be+n*Re),e}function _(t,n){if(t=d(t,!0),u(d(t),Be)>n)return 0;if(n>=u(d(t),je))return Ce.height();var r=Ue("slotMinutes"),a=60*n.getHours()+n.getMinutes()-Be,o=Math.floor(a/r),i=sn[o];return i===e&&(i=sn[o]=Ce.find("tr").eq(o).find("td div")[0].offsetTop),Math.max(0,Math.round(i-1+Fe*(a%r/r)))}function P(){return ve}function j(t){var e=d(t.start);return t.allDay?e:u(e,Ue("defaultEventMinutes"))}function I(t,e){return e?d(t):u(d(t),Ue("slotMinutes"))}function X(t,e,n){n?Ue("allDaySlot")&&x(t,l(d(e),1),!0):J(t,e)}function J(e,n){var r=Ue("selectHelper");if(Oe.build(),r){var a=rn(e).col;if(a>=0&&We>a){var o=Oe.rect(0,a,0,a,ge),i=_(e,e),s=_(e,n);if(s>i){if(o.top=i,o.height=s-i,o.left+=2,o.width-=5,t.isFunction(r)){var l=r(e,n);l&&(o.position="absolute",Me=t(l).css(o).appendTo(ge))}else o.isStart=!0,o.isEnd=!0,Me=t(en({title:"",start:e,end:n,className:["fc-select-helper"],editable:!1},o)),Me.css("opacity",Ue("dragOpacity"));Me&&(M(Me),ge.append(Me),S(Me,o.width,!0),T(Me,o.height,!0))}}}else H(e,n)}function V(){$e(),Me&&(Me.remove(),Me=null)}function U(e){if(1==e.which&&Ue("selectable")){Ke(e);var n;Le.start(function(t,e){if(V(),t&&t.col==e.col&&!A(t)){var r=L(e),a=L(t);n=[r,u(d(r),Re),a,u(d(a),Re)].sort(O),J(n[0],n[3])}else n=null},e),t(document).one("mouseup",function(t){Le.stop(),n&&(+n[0]==+n[1]&&Z(n[0],!1,t),Qe(n[0],n[3],!1,t))})}}function Z(t,e,n){Ze("dayClick",ae[rn(t).col],t,e,n)}function G(t,e){Le.start(function(t){if($e(),t)if(A(t))k(t.row,t.col,t.row,t.col);else{var e=L(t),n=u(d(e),Ue("defaultEventMinutes"));H(e,n)}},e)}function $(t,e,n){var r=Le.stop();$e(),r&&Ze("drop",t,L(r),A(r),e,n)}var Q=this;Q.renderAgenda=o,Q.setWidth=w,Q.setHeight=m,Q.afterRender=D,Q.defaultEventEnd=j,Q.timePosition=_,Q.getIsCellAllDay=A,Q.allDayRow=P,Q.getCoordinateGrid=function(){return Oe},Q.getHoverListener=function(){return Le},Q.colLeft=F,Q.colRight=z,Q.colContentLeft=N,Q.colContentRight=W,Q.getDaySegmentContainer=function(){return ue},Q.getSlotSegmentContainer=function(){return be},Q.getMinMinute=function(){return Be},Q.getMaxMinute=function(){return je},Q.getSlotContainer=function(){return ge},Q.getRowCnt=function(){return 1},Q.getColCnt=function(){return We},Q.getColWidth=function(){return xe},Q.getSnapHeight=function(){return ze},Q.getSnapMinutes=function(){return Re},Q.defaultSelectionEnd=I,Q.renderDayOverlay=x,Q.renderSelection=X,Q.clearSelection=V,Q.reportDayClick=Z,Q.dragStart=G,Q.dragStop=$,fe.call(Q,n,r,a),me.call(Q),pe.call(Q),te.call(Q);var K,ee,ne,re,ae,oe,ie,se,le,ce,ue,de,ve,he,ge,be,Ce,Me,Ee,Se,Te,xe,He,Fe,Re,Ne,ze,We,Ae,Oe,Le,_e,Pe,qe,Ye,Be,je,Ie,Xe,Je,Ve,Ue=Q.opt,Ze=Q.trigger,Ge=Q.renderOverlay,$e=Q.clearOverlays,Qe=Q.reportSelection,Ke=Q.unselect,tn=Q.daySelectionMousedown,en=Q.slotSegHtml,nn=Q.cellToDate,rn=Q.dateToCell,an=Q.rangeToSegments,on=r.formatDate,sn={};Y(n.addClass("fc-agenda")),Oe=new ye(function(e,n){function r(t){return Math.max(l,Math.min(c,t))}var a,o,i;ne.each(function(e,r){a=t(r),o=a.offset().left,e&&(i[1]=o),i=[o],n[e]=i}),i[1]=o+a.outerWidth(),Ue("allDaySlot")&&(a=ve,o=a.offset().top,e[0]=[o,o+a.outerHeight()]);for(var s=ge.offset().top,l=he.offset().top,c=l+he.outerHeight(),u=0;Ae*Ne>u;u++)e.push([r(s+ze*u),r(s+ze*(u+1))])}),Le=new we(Oe),_e=new De(function(t){return oe.eq(t)}),Pe=new De(function(t){return ie.eq(t)})}function te(){function n(t,e){var n,r=t.length,o=[],i=[];for(n=0;r>n;n++)t[n].allDay?o.push(t[n]):i.push(t[n]);y("allDaySlot")&&(te(o,e),k()),s(a(i),e)}function r(){H().empty(),F().empty()}function a(e){var n,r,a,s,l,c=Y(),f=W(),v=z(),h=t.map(e,i),g=[];for(r=0;c>r;r++)for(n=P(0,r),u(n,f),l=o(e,h,n,u(d(n),v-f)),l=ee(l),a=0;l.length>a;a++)s=l[a],s.col=r,g.push(s);return g}function o(t,e,n,r){var a,o,i,s,l,c,u,f,v=[],h=t.length;for(a=0;h>a;a++)o=t[a],i=o.start,s=e[a],s>n&&r>i&&(n>i?(l=d(n),u=!1):(l=i,u=!0),s>r?(c=d(r),f=!1):(c=s,f=!0),v.push({event:o,start:l,end:c,isStart:u,isEnd:f}));return v.sort(ue)}function i(t){return t.end?d(t.end):u(d(t.start),y("defaultEventMinutes"))}function s(n,r){var a,o,i,s,l,u,d,v,h,g,p,m,b,D,C,M,S=n.length,T="",k=F(),H=y("isRTL");for(a=0;S>a;a++)o=n[a],i=o.event,s=A(o.start,o.start),l=A(o.start,o.end),u=L(o.col),d=_(o.col),v=d-u,d-=.025*v,v=d-u,h=v*(o.forwardCoord-o.backwardCoord),y("slotEventOverlap")&&(h=Math.max(2*(h-10),h)),H?(p=d-o.backwardCoord*v,g=p-h):(g=u+o.backwardCoord*v,p=g+h),g=Math.max(g,u),p=Math.min(p,d),h=p-g,o.top=s,o.left=g,o.outerWidth=h,o.outerHeight=l-s,T+=c(i,o);for(k[0].innerHTML=T,m=k.children(),a=0;S>a;a++)o=n[a],i=o.event,b=t(m[a]),D=w("eventRender",i,i,b),D===!1?b.remove():(D&&D!==!0&&(b.remove(),b=t(D).css({position:"absolute",top:o.top,left:o.left}).appendTo(k)),o.element=b,i._id===r?f(i,b,o):b[0]._fci=a,V(i,b));for(E(k,n,f),a=0;S>a;a++)o=n[a],(b=o.element)&&(o.vsides=R(b,!0),o.hsides=x(b,!0),C=b.find(".fc-event-title"),C.length&&(o.contentTop=C[0].offsetTop));for(a=0;S>a;a++)o=n[a],(b=o.element)&&(b[0].style.width=Math.max(0,o.outerWidth-o.hsides)+"px",M=Math.max(0,o.outerHeight-o.vsides),b[0].style.height=M+"px",i=o.event,o.contentTop!==e&&10>M-o.contentTop&&(b.find("div.fc-event-time").text(re(i.start,y("timeFormat"))+" - "+i.title),b.find("div.fc-event-title").remove()),w("eventAfterRender",i,i,b))}function c(t,e){var n="<",r=t.url,a=j(t,y),o=["fc-event","fc-event-vert"];return b(t)&&o.push("fc-event-draggable"),e.isStart&&o.push("fc-event-start"),e.isEnd&&o.push("fc-event-end"),o=o.concat(t.className),t.source&&(o=o.concat(t.source.className||[])),n+=r?"a href='"+q(t.url)+"'":"div",n+=" class='"+o.join(" ")+"'"+" style="+"'"+"position:absolute;"+"top:"+e.top+"px;"+"left:"+e.left+"px;"+a+"'"+">"+"
                "+"
                "+q(ae(t.start,t.end,y("timeFormat")))+"
                "+"
                "+q(t.title||"")+"
                "+"
                "+"
                ",e.isEnd&&D(t)&&(n+="
                =
                "),n+=""}function f(t,e,n){var r=e.find("div.fc-event-time");b(t)&&g(t,e,r),n.isEnd&&D(t)&&p(t,e,r),S(t,e)}function v(t,e,n){function r(){c||(e.width(a).height("").draggable("option","grid",null),c=!0)}var a,o,i,s=n.isStart,c=!0,u=N(),f=B(),v=I(),g=X(),p=W();e.draggable({opacity:y("dragOpacity","month"),revertDuration:y("dragRevertDuration"),start:function(n,p){w("eventDragStart",e,t,n,p),Z(t,e),a=e.width(),u.start(function(n,a){if(K(),n){o=!1;var u=P(0,a.col),p=P(0,n.col);i=h(p,u),n.row?s?c&&(e.width(f-10),T(e,v*Math.round((t.end?(t.end-t.start)/Re:y("defaultEventMinutes"))/g)),e.draggable("option","grid",[f,1]),c=!1):o=!0:(Q(l(d(t.start),i),l(C(t),i)),r()),o=o||c&&!i +}else r(),o=!0;e.draggable("option","revert",o)},n,"drag")},stop:function(n,a){if(u.stop(),K(),w("eventDragStop",e,t,n,a),o)r(),e.css("filter",""),U(t,e);else{var s=0;c||(s=Math.round((e.offset().top-J().offset().top)/v)*g+p-(60*t.start.getHours()+t.start.getMinutes())),G(this,t,i,s,c,n,a)}}})}function g(t,e,n){function r(){K(),s&&(f?(n.hide(),e.draggable("option","grid",null),Q(l(d(t.start),b),l(C(t),b))):(a(D),n.css("display",""),e.draggable("option","grid",[T,x])))}function a(e){var r,a=u(d(t.start),e);t.end&&(r=u(d(t.end),e)),n.text(ae(a,r,y("timeFormat")))}var o,i,s,c,f,v,g,p,b,D,M,E=m.getCoordinateGrid(),S=Y(),T=B(),x=I(),k=X();e.draggable({scroll:!1,grid:[T,x],axis:1==S?"y":!1,opacity:y("dragOpacity"),revertDuration:y("dragRevertDuration"),start:function(n,r){w("eventDragStart",e,t,n,r),Z(t,e),E.build(),o=e.position(),i=E.cell(n.pageX,n.pageY),s=c=!0,f=v=O(i),g=p=0,b=0,D=M=0},drag:function(t,n){var a=E.cell(t.pageX,t.pageY);if(s=!!a){if(f=O(a),g=Math.round((n.position.left-o.left)/T),g!=p){var l=P(0,i.col),u=i.col+g;u=Math.max(0,u),u=Math.min(S-1,u);var d=P(0,u);b=h(d,l)}f||(D=Math.round((n.position.top-o.top)/x)*k)}(s!=c||f!=v||g!=p||D!=M)&&(r(),c=s,v=f,p=g,M=D),e.draggable("option","revert",!s)},stop:function(n,a){K(),w("eventDragStop",e,t,n,a),s&&(f||b||D)?G(this,t,b,f?0:D,f,n,a):(s=!0,f=!1,g=0,b=0,D=0,r(),e.css("filter",""),e.css(o),U(t,e))}})}function p(t,e,n){var r,a,o=I(),i=X();e.resizable({handles:{s:".ui-resizable-handle"},grid:o,start:function(n,o){r=a=0,Z(t,e),w("eventResizeStart",this,t,n,o)},resize:function(s,l){r=Math.round((Math.max(o,e.height())-l.originalSize.height)/o),r!=a&&(n.text(ae(t.start,r||t.end?u(M(t),i*r):null,y("timeFormat"))),a=r)},stop:function(n,a){w("eventResizeStop",this,t,n,a),r?$(this,t,0,i*r,n,a):U(t,e)}})}var m=this;m.renderEvents=n,m.clearEvents=r,m.slotSegHtml=c,de.call(m);var y=m.opt,w=m.trigger,b=m.isEventDraggable,D=m.isEventResizable,M=m.eventEnd,S=m.eventElementHandlers,k=m.setHeight,H=m.getDaySegmentContainer,F=m.getSlotSegmentContainer,N=m.getHoverListener,z=m.getMaxMinute,W=m.getMinMinute,A=m.timePosition,O=m.getIsCellAllDay,L=m.colContentLeft,_=m.colContentRight,P=m.cellToDate,Y=m.getColCnt,B=m.getColWidth,I=m.getSnapHeight,X=m.getSnapMinutes,J=m.getSlotContainer,V=m.reportEventElement,U=m.showEvents,Z=m.hideEvents,G=m.eventDrop,$=m.eventResize,Q=m.renderDayOverlay,K=m.clearOverlays,te=m.renderDayEvents,ne=m.calendar,re=ne.formatDate,ae=ne.formatDates;m.draggableDayEvent=v}function ee(t){var e,n=ne(t),r=n[0];if(re(n),r){for(e=0;r.length>e;e++)ae(r[e]);for(e=0;r.length>e;e++)oe(r[e],0,0)}return ie(n)}function ne(t){var e,n,r,a=[];for(e=0;t.length>e;e++){for(n=t[e],r=0;a.length>r&&se(n,a[r]).length;r++);(a[r]||(a[r]=[])).push(n)}return a}function re(t){var e,n,r,a,o;for(e=0;t.length>e;e++)for(n=t[e],r=0;n.length>r;r++)for(a=n[r],a.forwardSegs=[],o=e+1;t.length>o;o++)se(a,t[o],a.forwardSegs)}function ae(t){var n,r,a=t.forwardSegs,o=0;if(t.forwardPressure===e){for(n=0;a.length>n;n++)r=a[n],ae(r),o=Math.max(o,1+r.forwardPressure);t.forwardPressure=o}}function oe(t,n,r){var a,o=t.forwardSegs;if(t.forwardCoord===e)for(o.length?(o.sort(ce),oe(o[0],n+1,r),t.forwardCoord=o[0].backwardCoord):t.forwardCoord=1,t.backwardCoord=t.forwardCoord-(t.forwardCoord-r)/(n+1),a=0;o.length>a;a++)oe(o[a],0,t.forwardCoord)}function ie(t){var e,n,r,a=[];for(e=0;t.length>e;e++)for(n=t[e],r=0;n.length>r;r++)a.push(n[r]);return a}function se(t,e,n){n=n||[];for(var r=0;e.length>r;r++)le(t,e[r])&&n.push(e[r]);return n}function le(t,e){return t.end>e.start&&t.starte;e++)n=t[e],j[n._id]?j[n._id].push(n):j[n._id]=[n]}function v(){j={},I={},J=[]}function g(t){return t.end?d(t.end):q(t)}function p(t,e){J.push({event:t,element:e}),I[t._id]?I[t._id].push(e):I[t._id]=[e]}function m(){t.each(J,function(t,e){_.trigger("eventDestroy",e.event,e.event,e.element)})}function y(t,n){n.click(function(r){return n.hasClass("ui-draggable-dragging")||n.hasClass("ui-resizable-resizing")?e:i("eventClick",this,t,r)}).hover(function(e){i("eventMouseover",this,t,e)},function(e){i("eventMouseout",this,t,e)})}function w(t,e){D(t,e,"show")}function b(t,e){D(t,e,"hide")}function D(t,e,n){var r,a=I[t._id],o=a.length;for(r=0;o>r;r++)e&&a[r][0]==e[0]||a[r][n]()}function C(t,e,n,r,a,o,s){var l=e.allDay,c=e._id;E(j[c],n,r,a),i("eventDrop",t,e,n,r,a,function(){E(j[c],-n,-r,l),B(c)},o,s),B(c)}function M(t,e,n,r,a,o){var s=e._id;S(j[s],n,r),i("eventResize",t,e,n,r,function(){S(j[s],-n,-r),B(s)},a,o),B(s)}function E(t,n,r,a){r=r||0;for(var o,i=t.length,s=0;i>s;s++)o=t[s],a!==e&&(o.allDay=a),u(l(o.start,n,!0),r),o.end&&(o.end=u(l(o.end,n,!0),r)),Y(o,V)}function S(t,e,n){n=n||0;for(var r,a=t.length,o=0;a>o;o++)r=t[o],r.end=u(l(g(r),e,!0),n),Y(r,V)}function T(t){return"object"==typeof t&&(t=t.getDay()),G[t]}function x(){return U}function k(t,e,n){for(e=e||1;G[(t.getDay()+(n?e:0)+7)%7];)l(t,e)}function H(){var t=F.apply(null,arguments),e=R(t),n=N(e);return n}function F(t,e){var n=_.getColCnt(),r=K?-1:1,a=K?n-1:0;"object"==typeof t&&(e=t.col,t=t.row);var o=t*n+(e*r+a);return o}function R(t){var e=_.visStart.getDay();return t+=$[e],7*Math.floor(t/U)+Q[(t%U+U)%U]-e}function N(t){var e=d(_.visStart);return l(e,t),e}function z(t){var e=W(t),n=A(e),r=O(n);return r}function W(t){return h(t,_.visStart)}function A(t){var e=_.visStart.getDay();return t+=e,Math.floor(t/7)*U+$[(t%7+7)%7]-$[e]}function O(t){var e=_.getColCnt(),n=K?-1:1,r=K?e-1:0,a=Math.floor(t/e),o=(t%e+e)%e*n+r;return{row:a,col:o}}function L(t,e){for(var n=_.getRowCnt(),r=_.getColCnt(),a=[],o=W(t),i=W(e),s=A(o),l=A(i)-1,c=0;n>c;c++){var u=c*r,f=u+r-1,d=Math.max(s,u),v=Math.min(l,f);if(v>=d){var h=O(d),g=O(v),p=[h.col,g.col].sort(),m=R(d)==o,y=R(v)+1==i;a.push({row:c,leftCol:p[0],rightCol:p[1],isStart:m,isEnd:y})}}return a}var _=this;_.element=n,_.calendar=r,_.name=a,_.opt=o,_.trigger=i,_.isEventDraggable=s,_.isEventResizable=c,_.setEventData=f,_.clearEventData=v,_.eventEnd=g,_.reportEventElement=p,_.triggerEventDestroy=m,_.eventElementHandlers=y,_.showEvents=w,_.hideEvents=b,_.eventDrop=C,_.eventResize=M;var q=_.defaultEventEnd,Y=r.normalizeEvent,B=r.reportEventChange,j={},I={},J=[],V=r.options;_.isHiddenDay=T,_.skipHiddenDays=k,_.getCellsPerWeek=x,_.dateToCell=z,_.dateToDayOffset=W,_.dayOffsetToCellOffset=A,_.cellOffsetToCell=O,_.cellToDate=H,_.cellToCellOffset=F,_.cellOffsetToDayOffset=R,_.dayOffsetToDate=N,_.rangeToSegments=L;var U,Z=o("hiddenDays")||[],G=[],$=[],Q=[],K=o("isRTL");(function(){o("weekends")===!1&&Z.push(0,6);for(var e=0,n=0;7>e;e++)$[e]=n,G[e]=-1!=t.inArray(e,Z),G[e]||(Q[n]=e,n++);if(U=n,!U)throw"invalid hiddenDays"})()}function de(){function e(t,e){var n=r(t,!1,!0);he(n,function(t,e){N(t.event,e)}),w(n,e),he(n,function(t,e){k("eventAfterRender",t.event,t.event,e)})}function n(t,e,n){var a=r([t],!0,!1),o=[];return he(a,function(t,r){t.row===e&&r.css("top",n),o.push(r[0])}),o}function r(e,n,r){var o,l,c=Z(),d=n?t("
                "):c,v=a(e);return i(v),o=s(v),d[0].innerHTML=o,l=d.children(),n&&c.append(l),u(v,l),he(v,function(t,e){t.hsides=x(e,!0)}),he(v,function(t,e){e.width(Math.max(0,t.outerWidth-t.hsides))}),he(v,function(t,e){t.outerHeight=e.outerHeight(!0)}),f(v,r),v}function a(t){for(var e=[],n=0;t.length>n;n++){var r=o(t[n]);e.push.apply(e,r)}return e}function o(t){for(var e=t.start,n=C(t),r=ee(e,n),a=0;r.length>a;a++)r[a].event=t;return r}function i(t){for(var e=T("isRTL"),n=0;t.length>n;n++){var r=t[n],a=(e?r.isEnd:r.isStart)?V:X,o=(e?r.isStart:r.isEnd)?U:J,i=a(r.leftCol),s=o(r.rightCol);r.left=i,r.outerWidth=s-i}}function s(t){for(var e="",n=0;t.length>n;n++)e+=c(t[n]);return e}function c(t){var e="",n=T("isRTL"),r=t.event,a=r.url,o=["fc-event","fc-event-hori"];H(r)&&o.push("fc-event-draggable"),t.isStart&&o.push("fc-event-start"),t.isEnd&&o.push("fc-event-end"),o=o.concat(r.className),r.source&&(o=o.concat(r.source.className||[]));var i=j(r,T);return e+=a?""+"
                ",!r.allDay&&t.isStart&&(e+=""+q(G(r.start,r.end,T("timeFormat")))+""),e+=""+q(r.title||"")+""+"
                ",t.isEnd&&F(r)&&(e+="
                "+"   "+"
                "),e+=""}function u(e,n){for(var r=0;e.length>r;r++){var a=e[r],o=a.event,i=n.eq(r),s=k("eventRender",o,o,i);s===!1?i.remove():(s&&s!==!0&&(s=t(s).css({position:"absolute",left:a.left}),i.replaceWith(s),i=s),a.element=i)}}function f(t,e){var n=v(t),r=y(),a=[];if(e)for(var o=0;r.length>o;o++)r[o].height(n[o]);for(var o=0;r.length>o;o++)a.push(r[o].position().top);he(t,function(t,e){e.css("top",a[t.row]+t.top)})}function v(t){for(var e=P(),n=B(),r=[],a=g(t),o=0;e>o;o++){for(var i=a[o],s=[],l=0;n>l;l++)s.push(0);for(var c=0;i.length>c;c++){var u=i[c];u.top=L(s.slice(u.leftCol,u.rightCol+1));for(var l=u.leftCol;u.rightCol>=l;l++)s[l]=u.top+u.outerHeight}r.push(L(s))}return r}function g(t){var e,n,r,a=P(),o=[];for(e=0;t.length>e;e++)n=t[e],r=n.row,n.element&&(o[r]?o[r].push(n):o[r]=[n]);for(r=0;a>r;r++)o[r]=p(o[r]||[]);return o}function p(t){for(var e=[],n=m(t),r=0;n.length>r;r++)e.push.apply(e,n[r]);return e}function m(t){t.sort(ge);for(var e=[],n=0;t.length>n;n++){for(var r=t[n],a=0;e.length>a&&ve(r,e[a]);a++);e[a]?e[a].push(r):e[a]=[r]}return e}function y(){var t,e=P(),n=[];for(t=0;e>t;t++)n[t]=I(t).find("div.fc-day-content > div");return n}function w(t,e){var n=Z();he(t,function(t,n,r){var a=t.event;a._id===e?b(a,n,t):n[0]._fci=r}),E(n,t,b)}function b(t,e,n){H(t)&&S.draggableDayEvent(t,e,n),n.isEnd&&F(t)&&S.resizableDayEvent(t,e,n),z(t,e)}function D(t,e){var n,r=te();e.draggable({delay:50,opacity:T("dragOpacity"),revertDuration:T("dragRevertDuration"),start:function(a,o){k("eventDragStart",e,t,a,o),A(t,e),r.start(function(r,a,o,i){if(e.draggable("option","revert",!r||!o&&!i),Q(),r){var s=ne(a),c=ne(r);n=h(c,s),$(l(d(t.start),n),l(C(t),n))}else n=0},a,"drag")},stop:function(a,o){r.stop(),Q(),k("eventDragStop",e,t,a,o),n?O(this,t,n,0,t.allDay,a,o):(e.css("filter",""),W(t,e))}})}function M(e,r,a){var o=T("isRTL"),i=o?"w":"e",s=r.find(".ui-resizable-"+i),c=!1;Y(r),r.mousedown(function(t){t.preventDefault()}).click(function(t){c&&(t.preventDefault(),t.stopImmediatePropagation())}),s.mousedown(function(o){function s(n){k("eventResizeStop",this,e,n),t("body").css("cursor",""),u.stop(),Q(),f&&_(this,e,f,0,n),setTimeout(function(){c=!1},0)}if(1==o.which){c=!0;var u=te();P(),B();var f,d,v=r.css("top"),h=t.extend({},e),g=ie(oe(e.start));K(),t("body").css("cursor",i+"-resize").one("mouseup",s),k("eventResizeStart",this,e,o),u.start(function(r,o){if(r){var s=re(o),c=re(r);if(c=Math.max(c,g),f=ae(c)-ae(s)){h.end=l(R(e),f,!0);var u=d;d=n(h,a.row,v),d=t(d),d.find("*").css("cursor",i+"-resize"),u&&u.remove(),A(e)}else d&&(W(e),d.remove(),d=null);Q(),$(e.start,l(C(e),f))}},o)}})}var S=this;S.renderDayEvents=e,S.draggableDayEvent=D,S.resizableDayEvent=M;var T=S.opt,k=S.trigger,H=S.isEventDraggable,F=S.isEventResizable,R=S.eventEnd,N=S.reportEventElement,z=S.eventElementHandlers,W=S.showEvents,A=S.hideEvents,O=S.eventDrop,_=S.eventResize,P=S.getRowCnt,B=S.getColCnt;S.getColWidth;var I=S.allDayRow,X=S.colLeft,J=S.colRight,V=S.colContentLeft,U=S.colContentRight;S.dateToCell;var Z=S.getDaySegmentContainer,G=S.calendar.formatDates,$=S.renderDayOverlay,Q=S.clearOverlays,K=S.clearSelection,te=S.getHoverListener,ee=S.rangeToSegments,ne=S.cellToDate,re=S.cellToCellOffset,ae=S.cellOffsetToDayOffset,oe=S.dateToDayOffset,ie=S.dayOffsetToCellOffset}function ve(t,e){for(var n=0;e.length>n;n++){var r=e[n];if(r.leftCol<=t.rightCol&&r.rightCol>=t.leftCol)return!0}return!1}function he(t,e){for(var n=0;t.length>n;n++){var r=t[n],a=r.element;a&&e(r,a,n)}}function ge(t,e){return e.rightCol-e.leftCol-(t.rightCol-t.leftCol)||e.event.allDay-t.event.allDay||t.event.start-e.event.start||(t.event.title||"").localeCompare(e.event.title)}function pe(){function e(t,e,a){n(),e||(e=l(t,a)),c(t,e,a),r(t,e,a)}function n(t){f&&(f=!1,u(),s("unselect",null,t))}function r(t,e,n,r){f=!0,s("select",null,t,e,n,r)}function a(e){var a=o.cellToDate,s=o.getIsCellAllDay,l=o.getHoverListener(),f=o.reportDayClick;if(1==e.which&&i("selectable")){n(e);var d;l.start(function(t,e){u(),t&&s(t)?(d=[a(e),a(t)].sort(O),c(d[0],d[1],!0)):d=null},e),t(document).one("mouseup",function(t){l.stop(),d&&(+d[0]==+d[1]&&f(d[0],!0,t),r(d[0],d[1],!0,t))})}}var o=this;o.select=e,o.unselect=n,o.reportSelection=r,o.daySelectionMousedown=a;var i=o.opt,s=o.trigger,l=o.defaultSelectionEnd,c=o.renderSelection,u=o.clearSelection,f=!1;i("selectable")&&i("unselectAuto")&&t(document).mousedown(function(e){var r=i("unselectCancel");r&&t(e.target).parents(r).length||n(e)})}function me(){function e(e,n){var r=o.shift();return r||(r=t("
                ")),r[0].parentNode!=n[0]&&r.appendTo(n),a.push(r.css(e).show()),r}function n(){for(var t;t=a.shift();)o.push(t.hide().unbind())}var r=this;r.renderOverlay=e,r.clearOverlays=n;var a=[],o=[]}function ye(t){var e,n,r=this;r.build=function(){e=[],n=[],t(e,n)},r.cell=function(t,r){var a,o=e.length,i=n.length,s=-1,l=-1;for(a=0;o>a;a++)if(r>=e[a][0]&&e[a][1]>r){s=a;break}for(a=0;i>a;a++)if(t>=n[a][0]&&n[a][1]>t){l=a;break}return s>=0&&l>=0?{row:s,col:l}:null},r.rect=function(t,r,a,o,i){var s=i.offset();return{top:e[t][0]-s.top,left:n[r][0]-s.left,width:n[o][1]-n[r][0],height:e[a][1]-e[t][0]}}}function we(e){function n(t){be(t);var n=e.cell(t.pageX,t.pageY);(!n!=!i||n&&(n.row!=i.row||n.col!=i.col))&&(n?(o||(o=n),a(n,o,n.row-o.row,n.col-o.col)):a(n,o),i=n)}var r,a,o,i,s=this;s.start=function(s,l,c){a=s,o=i=null,e.build(),n(l),r=c||"mousemove",t(document).bind(r,n)},s.stop=function(){return t(document).unbind(r,n),i}}function be(t){t.pageX===e&&(t.pageX=t.originalEvent.pageX,t.pageY=t.originalEvent.pageY)}function De(t){function n(e){return a[e]=a[e]||t(e)}var r=this,a={},o={},i={};r.left=function(t){return o[t]=o[t]===e?n(t).position().left:o[t]},r.right=function(t){return i[t]=i[t]===e?r.left(t)+n(t).width():i[t]},r.clear=function(){a={},o={},i={}}}var Ce={defaultView:"month",aspectRatio:1.35,header:{left:"title",center:"",right:"today prev,next"},weekends:!0,weekNumbers:!1,weekNumberCalculation:"iso",weekNumberTitle:"W",allDayDefault:!0,ignoreTimezone:!0,lazyFetching:!0,startParam:"start",endParam:"end",titleFormat:{month:"MMMM yyyy",week:"MMM d[ yyyy]{ '—'[ MMM] d yyyy}",day:"dddd, MMM d, yyyy"},columnFormat:{month:"ddd",week:"ddd M/d",day:"dddd M/d"},timeFormat:{"":"h(:mm)t"},isRTL:!1,firstDay:0,monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],buttonText:{prev:"‹",next:"›",prevYear:"«",nextYear:"»",today:"today",month:"month",week:"week",day:"day"},theme:!1,buttonIcons:{prev:"circle-triangle-w",next:"circle-triangle-e"},unselectAuto:!0,dropAccept:"*",handleWindowResize:!0},Me={header:{left:"next,prev today",center:"",right:"title"},buttonText:{prev:"›",next:"‹",prevYear:"»",nextYear:"«"},buttonIcons:{prev:"circle-triangle-e",next:"circle-triangle-w"}},Ee=t.fullCalendar={version:"1.6.4"},Se=Ee.views={};t.fn.fullCalendar=function(n){if("string"==typeof n){var a,o=Array.prototype.slice.call(arguments,1);return this.each(function(){var r=t.data(this,"fullCalendar");if(r&&t.isFunction(r[n])){var i=r[n].apply(r,o);a===e&&(a=i),"destroy"==n&&t.removeData(this,"fullCalendar")}}),a!==e?a:this}n=n||{};var i=n.eventSources||[];return delete n.eventSources,n.events&&(i.push(n.events),delete n.events),n=t.extend(!0,{},Ce,n.isRTL||n.isRTL===e&&Ce.isRTL?Me:{},n),this.each(function(e,a){var o=t(a),s=new r(o,n,i);o.data("fullCalendar",s),s.render()}),this},Ee.sourceNormalizers=[],Ee.sourceFetchers=[];var Te={dataType:"json",cache:!1},xe=1;Ee.addDays=l,Ee.cloneDate=d,Ee.parseDate=p,Ee.parseISO8601=m,Ee.parseTime=y,Ee.formatDate=w,Ee.formatDates=b;var ke=["sun","mon","tue","wed","thu","fri","sat"],He=864e5,Fe=36e5,Re=6e4,Ne={s:function(t){return t.getSeconds()},ss:function(t){return _(t.getSeconds())},m:function(t){return t.getMinutes()},mm:function(t){return _(t.getMinutes())},h:function(t){return t.getHours()%12||12},hh:function(t){return _(t.getHours()%12||12)},H:function(t){return t.getHours()},HH:function(t){return _(t.getHours())},d:function(t){return t.getDate()},dd:function(t){return _(t.getDate())},ddd:function(t,e){return e.dayNamesShort[t.getDay()]},dddd:function(t,e){return e.dayNames[t.getDay()]},M:function(t){return t.getMonth()+1},MM:function(t){return _(t.getMonth()+1)},MMM:function(t,e){return e.monthNamesShort[t.getMonth()]},MMMM:function(t,e){return e.monthNames[t.getMonth()]},yy:function(t){return(t.getFullYear()+"").substring(2)},yyyy:function(t){return t.getFullYear()},t:function(t){return 12>t.getHours()?"a":"p"},tt:function(t){return 12>t.getHours()?"am":"pm"},T:function(t){return 12>t.getHours()?"A":"P"},TT:function(t){return 12>t.getHours()?"AM":"PM"},u:function(t){return w(t,"yyyy-MM-dd'T'HH:mm:ss'Z'")},S:function(t){var e=t.getDate();return e>10&&20>e?"th":["st","nd","rd"][e%10-1]||"th"},w:function(t,e){return e.weekNumberCalculation(t)},W:function(t){return D(t)}};Ee.dateFormatters=Ne,Ee.applyAll=I,Se.month=J,Se.basicWeek=V,Se.basicDay=U,n({weekMode:"fixed"}),Se.agendaWeek=$,Se.agendaDay=Q,n({allDaySlot:!0,allDayText:"all-day",firstHour:6,slotMinutes:30,defaultEventMinutes:120,axisFormat:"h(:mm)tt",timeFormat:{agenda:"h:mm{ - h:mm}"},dragOpacity:{agenda:.5},minTime:0,maxTime:24,slotEventOverlap:!0})})(jQuery); \ No newline at end of file diff --git a/docroot/sites/all/themes/libraryzurb_teen/js/gcal.js b/docroot/sites/all/themes/libraryzurb_teen/js/gcal.js new file mode 100644 index 00000000..16442276 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/js/gcal.js @@ -0,0 +1,107 @@ +/*! + * FullCalendar v1.6.4 Google Calendar Plugin + * Docs & License: http://arshaw.com/fullcalendar/ + * (c) 2013 Adam Shaw + */ + +(function($) { + + +var fc = $.fullCalendar; +var formatDate = fc.formatDate; +var parseISO8601 = fc.parseISO8601; +var addDays = fc.addDays; +var applyAll = fc.applyAll; + + +fc.sourceNormalizers.push(function(sourceOptions) { + if (sourceOptions.dataType == 'gcal' || + sourceOptions.dataType === undefined && + (sourceOptions.url || '').match(/^(http|https):\/\/www.google.com\/calendar\/feeds\//)) { + sourceOptions.dataType = 'gcal'; + if (sourceOptions.editable === undefined) { + sourceOptions.editable = false; + } + } +}); + + +fc.sourceFetchers.push(function(sourceOptions, start, end) { + if (sourceOptions.dataType == 'gcal') { + return transformOptions(sourceOptions, start, end); + } +}); + + +function transformOptions(sourceOptions, start, end) { + + var success = sourceOptions.success; + var data = $.extend({}, sourceOptions.data || {}, { + 'start-min': formatDate(start, 'u'), + 'start-max': formatDate(end, 'u'), + 'singleevents': true, + 'max-results': 9999 + }); + + var ctz = sourceOptions.currentTimezone; + if (ctz) { + data.ctz = ctz = ctz.replace(' ', '_'); + } + + return $.extend({}, sourceOptions, { + url: sourceOptions.url.replace(/\/basic$/, '/full') + '?alt=json-in-script&callback=?', + dataType: 'jsonp', + data: data, + startParam: false, + endParam: false, + success: function(data) { + var events = []; + if (data.feed.entry) { + $.each(data.feed.entry, function(i, entry) { + var startStr = entry['gd$when'][0]['startTime']; + var start = parseISO8601(startStr, true); + var end = parseISO8601(entry['gd$when'][0]['endTime'], true); + var allDay = startStr.indexOf('T') == -1; + var url; + $.each(entry.link, function(i, link) { + if (link.type == 'text/html') { + url = link.href; + if (ctz) { + url += (url.indexOf('?') == -1 ? '?' : '&') + 'ctz=' + ctz; + } + } + }); + if (allDay) { + addDays(end, -1); // make inclusive + } + events.push({ + id: entry['gCal$uid']['value'], + title: entry['title']['$t'], + url: url, + start: start, + end: end, + allDay: allDay, + location: entry['gd$where'][0]['valueString'], + description: entry['content']['$t'] + }); + }); + } + var args = [events].concat(Array.prototype.slice.call(arguments, 1)); + var res = applyAll(success, this, args); + if ($.isArray(res)) { + return res; + } + return events; + } + }); + +} + + +// legacy +fc.gcalFeed = function(url, sourceOptions) { + return $.extend({}, sourceOptions, { url: url, dataType: 'gcal' }); +}; + + +})(jQuery); diff --git a/docroot/sites/all/themes/libraryzurb_teen/js/jquery-ui.min.js b/docroot/sites/all/themes/libraryzurb_teen/js/jquery-ui.min.js new file mode 100644 index 00000000..5824d129 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/js/jquery-ui.min.js @@ -0,0 +1,13 @@ +/*! jQuery UI - v1.11.4 - 2015-03-11 +* http://jqueryui.com +* Includes: core.js, widget.js, mouse.js, position.js, accordion.js, autocomplete.js, button.js, datepicker.js, dialog.js, draggable.js, droppable.js, effect.js, effect-blind.js, effect-bounce.js, effect-clip.js, effect-drop.js, effect-explode.js, effect-fade.js, effect-fold.js, effect-highlight.js, effect-puff.js, effect-pulsate.js, effect-scale.js, effect-shake.js, effect-size.js, effect-slide.js, effect-transfer.js, menu.js, progressbar.js, resizable.js, selectable.js, selectmenu.js, slider.js, sortable.js, spinner.js, tabs.js, tooltip.js +* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */ + +(function(e){"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){function t(t,s){var n,a,o,r=t.nodeName.toLowerCase();return"area"===r?(n=t.parentNode,a=n.name,t.href&&a&&"map"===n.nodeName.toLowerCase()?(o=e("img[usemap='#"+a+"']")[0],!!o&&i(o)):!1):(/^(input|select|textarea|button|object)$/.test(r)?!t.disabled:"a"===r?t.href||s:s)&&i(t)}function i(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return"hidden"===e.css(this,"visibility")}).length}function s(e){for(var t,i;e.length&&e[0]!==document;){if(t=e.css("position"),("absolute"===t||"relative"===t||"fixed"===t)&&(i=parseInt(e.css("zIndex"),10),!isNaN(i)&&0!==i))return i;e=e.parent()}return 0}function n(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},e.extend(this._defaults,this.regional[""]),this.regional.en=e.extend(!0,{},this.regional[""]),this.regional["en-US"]=e.extend(!0,{},this.regional.en),this.dpDiv=a(e("
                "))}function a(t){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return t.delegate(i,"mouseout",function(){e(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&e(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&e(this).removeClass("ui-datepicker-next-hover")}).delegate(i,"mouseover",o)}function o(){e.datepicker._isDisabledDatepicker(v.inline?v.dpDiv.parent()[0]:v.input[0])||(e(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),e(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&e(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&e(this).addClass("ui-datepicker-next-hover"))}function r(t,i){e.extend(t,i);for(var s in i)null==i[s]&&(t[s]=i[s]);return t}function h(e){return function(){var t=this.element.val();e.apply(this,arguments),this._refresh(),t!==this.element.val()&&this._trigger("change")}}e.ui=e.ui||{},e.extend(e.ui,{version:"1.11.4",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({scrollParent:function(t){var i=this.css("position"),s="absolute"===i,n=t?/(auto|scroll|hidden)/:/(auto|scroll)/,a=this.parents().filter(function(){var t=e(this);return s&&"static"===t.css("position")?!1:n.test(t.css("overflow")+t.css("overflow-y")+t.css("overflow-x"))}).eq(0);return"fixed"!==i&&a.length?a:e(this[0].ownerDocument||document)},uniqueId:function(){var e=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++e)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,s){return!!e.data(t,s[3])},focusable:function(i){return t(i,!isNaN(e.attr(i,"tabindex")))},tabbable:function(i){var s=e.attr(i,"tabindex"),n=isNaN(s);return(n||s>=0)&&t(i,!n)}}),e("
                ").outerWidth(1).jquery||e.each(["Width","Height"],function(t,i){function s(t,i,s,a){return e.each(n,function(){i-=parseFloat(e.css(t,"padding"+this))||0,s&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),a&&(i-=parseFloat(e.css(t,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],a=i.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+i]=function(t){return void 0===t?o["inner"+i].call(this):this.each(function(){e(this).css(a,s(this,t)+"px")})},e.fn["outer"+i]=function(t,n){return"number"!=typeof t?o["outer"+i].call(this,t):this.each(function(){e(this).css(a,s(this,t,!0,n)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e("").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.fn.extend({focus:function(t){return function(i,s){return"number"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),s&&s.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),disableSelection:function(){var e="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.bind(e+".ui-disableSelection",function(e){e.preventDefault()})}}(),enableSelection:function(){return this.unbind(".ui-disableSelection")},zIndex:function(t){if(void 0!==t)return this.css("zIndex",t);if(this.length)for(var i,s,n=e(this[0]);n.length&&n[0]!==document;){if(i=n.css("position"),("absolute"===i||"relative"===i||"fixed"===i)&&(s=parseInt(n.css("zIndex"),10),!isNaN(s)&&0!==s))return s;n=n.parent()}return 0}}),e.ui.plugin={add:function(t,i,s){var n,a=e.ui[t].prototype;for(n in s)a.plugins[n]=a.plugins[n]||[],a.plugins[n].push([i,s[n]])},call:function(e,t,i,s){var n,a=e.plugins[t];if(a&&(s||e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType))for(n=0;a.length>n;n++)e.options[a[n][0]]&&a[n][1].apply(e.element,i)}};var l=0,u=Array.prototype.slice;e.cleanData=function(t){return function(i){var s,n,a;for(a=0;null!=(n=i[a]);a++)try{s=e._data(n,"events"),s&&s.remove&&e(n).triggerHandler("remove")}catch(o){}t(i)}}(e.cleanData),e.widget=function(t,i,s){var n,a,o,r,h={},l=t.split(".")[0];return t=t.split(".")[1],n=l+"-"+t,s||(s=i,i=e.Widget),e.expr[":"][n.toLowerCase()]=function(t){return!!e.data(t,n)},e[l]=e[l]||{},a=e[l][t],o=e[l][t]=function(e,t){return this._createWidget?(arguments.length&&this._createWidget(e,t),void 0):new o(e,t)},e.extend(o,a,{version:s.version,_proto:e.extend({},s),_childConstructors:[]}),r=new i,r.options=e.widget.extend({},r.options),e.each(s,function(t,s){return e.isFunction(s)?(h[t]=function(){var e=function(){return i.prototype[t].apply(this,arguments)},n=function(e){return i.prototype[t].apply(this,e)};return function(){var t,i=this._super,a=this._superApply;return this._super=e,this._superApply=n,t=s.apply(this,arguments),this._super=i,this._superApply=a,t}}(),void 0):(h[t]=s,void 0)}),o.prototype=e.widget.extend(r,{widgetEventPrefix:a?r.widgetEventPrefix||t:t},h,{constructor:o,namespace:l,widgetName:t,widgetFullName:n}),a?(e.each(a._childConstructors,function(t,i){var s=i.prototype;e.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete a._childConstructors):i._childConstructors.push(o),e.widget.bridge(t,o),o},e.widget.extend=function(t){for(var i,s,n=u.call(arguments,1),a=0,o=n.length;o>a;a++)for(i in n[a])s=n[a][i],n[a].hasOwnProperty(i)&&void 0!==s&&(t[i]=e.isPlainObject(s)?e.isPlainObject(t[i])?e.widget.extend({},t[i],s):e.widget.extend({},s):s);return t},e.widget.bridge=function(t,i){var s=i.prototype.widgetFullName||t;e.fn[t]=function(n){var a="string"==typeof n,o=u.call(arguments,1),r=this;return a?this.each(function(){var i,a=e.data(this,s);return"instance"===n?(r=a,!1):a?e.isFunction(a[n])&&"_"!==n.charAt(0)?(i=a[n].apply(a,o),i!==a&&void 0!==i?(r=i&&i.jquery?r.pushStack(i.get()):i,!1):void 0):e.error("no such method '"+n+"' for "+t+" widget instance"):e.error("cannot call methods on "+t+" prior to initialization; "+"attempted to call method '"+n+"'")}):(o.length&&(n=e.widget.extend.apply(null,[n].concat(o))),this.each(function(){var t=e.data(this,s);t?(t.option(n||{}),t._init&&t._init()):e.data(this,s,new i(n,this))})),r}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
                ",options:{disabled:!1,create:null},_createWidget:function(t,i){i=e(i||this.defaultElement||this)[0],this.element=e(i),this.uuid=l++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=e(),this.hoverable=e(),this.focusable=e(),i!==this&&(e.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===i&&this.destroy()}}),this.document=e(i.style?i.ownerDocument:i.document||i),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(t,i){var s,n,a,o=t;if(0===arguments.length)return e.widget.extend({},this.options);if("string"==typeof t)if(o={},s=t.split("."),t=s.shift(),s.length){for(n=o[t]=e.widget.extend({},this.options[t]),a=0;s.length-1>a;a++)n[s[a]]=n[s[a]]||{},n=n[s[a]];if(t=s.pop(),1===arguments.length)return void 0===n[t]?null:n[t];n[t]=i}else{if(1===arguments.length)return void 0===this.options[t]?null:this.options[t];o[t]=i}return this._setOptions(o),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,"disabled"===e&&(this.widget().toggleClass(this.widgetFullName+"-disabled",!!t),t&&(this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus"))),this},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_on:function(t,i,s){var n,a=this;"boolean"!=typeof t&&(s=i,i=t,t=!1),s?(i=n=e(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),e.each(s,function(s,o){function r(){return t||a.options.disabled!==!0&&!e(this).hasClass("ui-state-disabled")?("string"==typeof o?a[o]:o).apply(a,arguments):void 0}"string"!=typeof o&&(r.guid=o.guid=o.guid||r.guid||e.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+a.eventNamespace,u=h[2];u?n.delegate(u,l,r):i.bind(l,r)})},_off:function(t,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,t.unbind(i).undelegate(i),this.bindings=e(this.bindings.not(t).get()),this.focusable=e(this.focusable.not(t).get()),this.hoverable=e(this.hoverable.not(t).get())},_delay:function(e,t){function i(){return("string"==typeof e?s[e]:e).apply(s,arguments)}var s=this;return setTimeout(i,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){e(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){e(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,i,s){var n,a,o=this.options[t];if(s=s||{},i=e.Event(i),i.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),i.target=this.element[0],a=i.originalEvent)for(n in a)n in i||(i[n]=a[n]);return this.element.trigger(i,s),!(e.isFunction(o)&&o.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,i){e.Widget.prototype["_"+t]=function(s,n,a){"string"==typeof n&&(n={effect:n});var o,r=n?n===!0||"number"==typeof n?i:n.effect||i:t;n=n||{},"number"==typeof n&&(n={duration:n}),o=!e.isEmptyObject(n),n.complete=a,n.delay&&s.delay(n.delay),o&&e.effects&&e.effects.effect[r]?s[t](n):r!==t&&s[r]?s[r](n.duration,n.easing,a):s.queue(function(i){e(this)[t](),a&&a.call(s[0]),i()})}}),e.widget;var d=!1;e(document).mouseup(function(){d=!1}),e.widget("ui.mouse",{version:"1.11.4",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var t=this;this.element.bind("mousedown."+this.widgetName,function(e){return t._mouseDown(e)}).bind("click."+this.widgetName,function(i){return!0===e.data(i.target,t.widgetName+".preventClickEvent")?(e.removeData(i.target,t.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&this.document.unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(t){if(!d){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(t),this._mouseDownEvent=t;var i=this,s=1===t.which,n="string"==typeof this.options.cancel&&t.target.nodeName?e(t.target).closest(this.options.cancel).length:!1;return s&&!n&&this._mouseCapture(t)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(t)!==!1,!this._mouseStarted)?(t.preventDefault(),!0):(!0===e.data(t.target,this.widgetName+".preventClickEvent")&&e.removeData(t.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(e){return i._mouseMove(e)},this._mouseUpDelegate=function(e){return i._mouseUp(e)},this.document.bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),t.preventDefault(),d=!0,!0)):!0}},_mouseMove:function(t){if(this._mouseMoved){if(e.ui.ie&&(!document.documentMode||9>document.documentMode)&&!t.button)return this._mouseUp(t);if(!t.which)return this._mouseUp(t)}return(t.which||t.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,t)!==!1,this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){return this.document.unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&e.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),d=!1,!1},_mouseDistanceMet:function(e){return Math.max(Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),function(){function t(e,t,i){return[parseFloat(e[0])*(p.test(e[0])?t/100:1),parseFloat(e[1])*(p.test(e[1])?i/100:1)]}function i(t,i){return parseInt(e.css(t,i),10)||0}function s(t){var i=t[0];return 9===i.nodeType?{width:t.width(),height:t.height(),offset:{top:0,left:0}}:e.isWindow(i)?{width:t.width(),height:t.height(),offset:{top:t.scrollTop(),left:t.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:t.outerWidth(),height:t.outerHeight(),offset:t.offset()}}e.ui=e.ui||{};var n,a,o=Math.max,r=Math.abs,h=Math.round,l=/left|center|right/,u=/top|center|bottom/,d=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,p=/%$/,f=e.fn.position;e.position={scrollbarWidth:function(){if(void 0!==n)return n;var t,i,s=e("
                "),a=s.children()[0];return e("body").append(s),t=a.offsetWidth,s.css("overflow","scroll"),i=a.offsetWidth,t===i&&(i=s[0].clientWidth),s.remove(),n=t-i},getScrollInfo:function(t){var i=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),s=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),n="scroll"===i||"auto"===i&&t.widthi?"left":t>0?"right":"center",vertical:0>a?"top":s>0?"bottom":"middle"};d>m&&m>r(t+i)&&(h.horizontal="center"),c>g&&g>r(s+a)&&(h.vertical="middle"),h.important=o(r(t),r(i))>o(r(s),r(a))?"horizontal":"vertical",n.using.call(this,e,h)}),u.offset(e.extend(M,{using:l}))})},e.ui.position={fit:{left:function(e,t){var i,s=t.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=e.left-t.collisionPosition.marginLeft,h=n-r,l=r+t.collisionWidth-a-n;t.collisionWidth>a?h>0&&0>=l?(i=e.left+h+t.collisionWidth-a-n,e.left+=h-i):e.left=l>0&&0>=h?n:h>l?n+a-t.collisionWidth:n:h>0?e.left+=h:l>0?e.left-=l:e.left=o(e.left-r,e.left)},top:function(e,t){var i,s=t.within,n=s.isWindow?s.scrollTop:s.offset.top,a=t.within.height,r=e.top-t.collisionPosition.marginTop,h=n-r,l=r+t.collisionHeight-a-n;t.collisionHeight>a?h>0&&0>=l?(i=e.top+h+t.collisionHeight-a-n,e.top+=h-i):e.top=l>0&&0>=h?n:h>l?n+a-t.collisionHeight:n:h>0?e.top+=h:l>0?e.top-=l:e.top=o(e.top-r,e.top)}},flip:{left:function(e,t){var i,s,n=t.within,a=n.offset.left+n.scrollLeft,o=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=e.left-t.collisionPosition.marginLeft,u=l-h,d=l+t.collisionWidth-o-h,c="left"===t.my[0]?-t.elemWidth:"right"===t.my[0]?t.elemWidth:0,p="left"===t.at[0]?t.targetWidth:"right"===t.at[0]?-t.targetWidth:0,f=-2*t.offset[0];0>u?(i=e.left+c+p+f+t.collisionWidth-o-a,(0>i||r(u)>i)&&(e.left+=c+p+f)):d>0&&(s=e.left-t.collisionPosition.marginLeft+c+p+f-h,(s>0||d>r(s))&&(e.left+=c+p+f))},top:function(e,t){var i,s,n=t.within,a=n.offset.top+n.scrollTop,o=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=e.top-t.collisionPosition.marginTop,u=l-h,d=l+t.collisionHeight-o-h,c="top"===t.my[1],p=c?-t.elemHeight:"bottom"===t.my[1]?t.elemHeight:0,f="top"===t.at[1]?t.targetHeight:"bottom"===t.at[1]?-t.targetHeight:0,m=-2*t.offset[1];0>u?(s=e.top+p+f+m+t.collisionHeight-o-a,(0>s||r(u)>s)&&(e.top+=p+f+m)):d>0&&(i=e.top-t.collisionPosition.marginTop+p+f+m-h,(i>0||d>r(i))&&(e.top+=p+f+m))}},flipfit:{left:function(){e.ui.position.flip.left.apply(this,arguments),e.ui.position.fit.left.apply(this,arguments)},top:function(){e.ui.position.flip.top.apply(this,arguments),e.ui.position.fit.top.apply(this,arguments)}}},function(){var t,i,s,n,o,r=document.getElementsByTagName("body")[0],h=document.createElement("div");t=document.createElement(r?"div":"body"),s={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},r&&e.extend(s,{position:"absolute",left:"-1000px",top:"-1000px"});for(o in s)t.style[o]=s[o];t.appendChild(h),i=r||document.documentElement,i.insertBefore(t,i.firstChild),h.style.cssText="position: absolute; left: 10.7432222px;",n=e(h).offset().left,a=n>10&&11>n,t.innerHTML="",i.removeChild(t)}()}(),e.ui.position,e.widget("ui.accordion",{version:"1.11.4",options:{active:0,animate:{},collapsible:!1,event:"click",header:"> li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var t=this.options;this.prevShow=this.prevHide=e(),this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role","tablist"),t.collapsible||t.active!==!1&&null!=t.active||(t.active=0),this._processPanels(),0>t.active&&(t.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():e()}},_createIcons:function(){var t=this.options.icons;t&&(e("").addClass("ui-accordion-header-icon ui-icon "+t.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(t.header).addClass(t.activeHeader),this.headers.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var e;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").removeUniqueId(),this._destroyIcons(),e=this.headers.next().removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").css("display","").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&e.css("height","")},_setOption:function(e,t){return"active"===e?(this._activate(t),void 0):("event"===e&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(t)),this._super(e,t),"collapsible"!==e||t||this.options.active!==!1||this._activate(0),"icons"===e&&(this._destroyIcons(),t&&this._createIcons()),"disabled"===e&&(this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!t)),void 0)},_keydown:function(t){if(!t.altKey&&!t.ctrlKey){var i=e.ui.keyCode,s=this.headers.length,n=this.headers.index(t.target),a=!1;switch(t.keyCode){case i.RIGHT:case i.DOWN:a=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:a=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(t);break;case i.HOME:a=this.headers[0];break;case i.END:a=this.headers[s-1]}a&&(e(t.target).attr("tabIndex",-1),e(a).attr("tabIndex",0),a.focus(),t.preventDefault())}},_panelKeyDown:function(t){t.keyCode===e.ui.keyCode.UP&&t.ctrlKey&&e(t.currentTarget).prev().focus()},refresh:function(){var t=this.options;this._processPanels(),t.active===!1&&t.collapsible===!0||!this.headers.length?(t.active=!1,this.active=e()):t.active===!1?this._activate(0):this.active.length&&!e.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(t.active=!1,this.active=e()):this._activate(Math.max(0,t.active-1)):t.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var e=this.headers,t=this.panels;this.headers=this.element.find(this.options.header).addClass("ui-accordion-header ui-state-default ui-corner-all"),this.panels=this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").filter(":not(.ui-accordion-content-active)").hide(),t&&(this._off(e.not(this.headers)),this._off(t.not(this.panels)))},_refresh:function(){var t,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.active).addClass("ui-accordion-header-active ui-state-active ui-corner-top").removeClass("ui-corner-all"),this.active.next().addClass("ui-accordion-content-active").show(),this.headers.attr("role","tab").each(function(){var t=e(this),i=t.uniqueId().attr("id"),s=t.next(),n=s.uniqueId().attr("id");t.attr("aria-controls",n),s.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(i.event),"fill"===s?(t=n.height(),this.element.siblings(":visible").each(function(){var i=e(this),s=i.css("position");"absolute"!==s&&"fixed"!==s&&(t-=i.outerHeight(!0))}),this.headers.each(function(){t-=e(this).outerHeight(!0)}),this.headers.next().each(function(){e(this).height(Math.max(0,t-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):"auto"===s&&(t=0,this.headers.next().each(function(){t=Math.max(t,e(this).css("height","").height())}).height(t))},_activate:function(t){var i=this._findActive(t)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return"number"==typeof t?this.headers.eq(t):e()},_setupEvents:function(t){var i={keydown:"_keydown"};t&&e.each(t.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(t){var i=this.options,s=this.active,n=e(t.currentTarget),a=n[0]===s[0],o=a&&i.collapsible,r=o?e():n.next(),h=s.next(),l={oldHeader:s,oldPanel:h,newHeader:o?e():n,newPanel:r};t.preventDefault(),a&&!i.collapsible||this._trigger("beforeActivate",t,l)===!1||(i.active=o?!1:this.headers.index(n),this.active=a?e():n,this._toggle(l),s.removeClass("ui-accordion-header-active ui-state-active"),i.icons&&s.children(".ui-accordion-header-icon").removeClass(i.icons.activeHeader).addClass(i.icons.header),a||(n.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),i.icons&&n.children(".ui-accordion-header-icon").removeClass(i.icons.header).addClass(i.icons.activeHeader),n.next().addClass("ui-accordion-content-active")))},_toggle:function(t){var i=t.newPanel,s=this.prevShow.length?this.prevShow:t.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,t):(s.hide(),i.show(),this._toggleComplete(t)),s.attr({"aria-hidden":"true"}),s.prev().attr({"aria-selected":"false","aria-expanded":"false"}),i.length&&s.length?s.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===parseInt(e(this).attr("tabIndex"),10)}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(e,t,i){var s,n,a,o=this,r=0,h=e.css("box-sizing"),l=e.length&&(!t.length||e.index()",delay:300,options:{icons:{submenu:"ui-icon-carat-1-e"},items:"> *",menus:"ul",position:{my:"left-1 top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content").toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length).attr({role:this.options.role,tabIndex:0}),this.options.disabled&&this.element.addClass("ui-state-disabled").attr("aria-disabled","true"),this._on({"mousedown .ui-menu-item":function(e){e.preventDefault()},"click .ui-menu-item":function(t){var i=e(t.target);!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(t),t.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(t):!this.element.is(":focus")&&e(this.document[0].activeElement).closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(t){if(!this.previousFilter){var i=e(t.currentTarget); +i.siblings(".ui-state-active").removeClass("ui-state-active"),this.focus(t,i)}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(e,t){var i=this.active||this.element.find(this.options.items).eq(0);t||this.focus(e,i)},blur:function(t){this._delay(function(){e.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(e){this._closeOnDocumentClick(e)&&this.collapseAll(e),this.mouseHandled=!1}})},_destroy:function(){this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeClass("ui-menu ui-widget ui-widget-content ui-menu-icons ui-front").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(),this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").removeUniqueId().removeClass("ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function(){var t=e(this);t.data("ui-menu-submenu-carat")&&t.remove()}),this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")},_keydown:function(t){var i,s,n,a,o=!0;switch(t.keyCode){case e.ui.keyCode.PAGE_UP:this.previousPage(t);break;case e.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case e.ui.keyCode.HOME:this._move("first","first",t);break;case e.ui.keyCode.END:this._move("last","last",t);break;case e.ui.keyCode.UP:this.previous(t);break;case e.ui.keyCode.DOWN:this.next(t);break;case e.ui.keyCode.LEFT:this.collapse(t);break;case e.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case e.ui.keyCode.ENTER:case e.ui.keyCode.SPACE:this._activate(t);break;case e.ui.keyCode.ESCAPE:this.collapse(t);break;default:o=!1,s=this.previousFilter||"",n=String.fromCharCode(t.keyCode),a=!1,clearTimeout(this.filterTimer),n===s?a=!0:n=s+n,i=this._filterMenuItems(n),i=a&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i,i.length||(n=String.fromCharCode(t.keyCode),i=this._filterMenuItems(n)),i.length?(this.focus(t,i),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}o&&t.preventDefault()},_activate:function(e){this.active.is(".ui-state-disabled")||(this.active.is("[aria-haspopup='true']")?this.expand(e):this.select(e))},refresh:function(){var t,i,s=this,n=this.options.icons.submenu,a=this.element.find(this.options.menus);this.element.toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length),a.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-front").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=e(this),i=t.parent(),s=e("").addClass("ui-menu-icon ui-icon "+n).data("ui-menu-submenu-carat",!0);i.attr("aria-haspopup","true").prepend(s),t.attr("aria-labelledby",i.attr("id"))}),t=a.add(this.element),i=t.find(this.options.items),i.not(".ui-menu-item").each(function(){var t=e(this);s._isDivider(t)&&t.addClass("ui-widget-content ui-menu-divider")}),i.not(".ui-menu-item, .ui-menu-divider").addClass("ui-menu-item").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),i.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!e.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(e,t){"icons"===e&&this.element.find(".ui-menu-icon").removeClass(this.options.icons.submenu).addClass(t.submenu),"disabled"===e&&this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this._super(e,t)},focus:function(e,t){var i,s;this.blur(e,e&&"focus"===e.type),this._scrollIntoView(t),this.active=t.first(),s=this.active.addClass("ui-state-focus").removeClass("ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),this.active.parent().closest(".ui-menu-item").addClass("ui-state-active"),e&&"keydown"===e.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=t.children(".ui-menu"),i.length&&e&&/^mouse/.test(e.type)&&this._startOpening(i),this.activeMenu=t.parent(),this._trigger("focus",e,{item:t})},_scrollIntoView:function(t){var i,s,n,a,o,r;this._hasScroll()&&(i=parseFloat(e.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(e.css(this.activeMenu[0],"paddingTop"))||0,n=t.offset().top-this.activeMenu.offset().top-i-s,a=this.activeMenu.scrollTop(),o=this.activeMenu.height(),r=t.outerHeight(),0>n?this.activeMenu.scrollTop(a+n):n+r>o&&this.activeMenu.scrollTop(a+n-o+r))},blur:function(e,t){t||clearTimeout(this.timer),this.active&&(this.active.removeClass("ui-state-focus"),this.active=null,this._trigger("blur",e,{item:this.active}))},_startOpening:function(e){clearTimeout(this.timer),"true"===e.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(e)},this.delay))},_open:function(t){var i=e.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(t.parents(".ui-menu")).hide().attr("aria-hidden","true"),t.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(t,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:e(t&&t.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(t),this.activeMenu=s},this.delay)},_close:function(e){e||(e=this.active?this.active.parent():this.element),e.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false").end().find(".ui-state-active").not(".ui-state-focus").removeClass("ui-state-active")},_closeOnDocumentClick:function(t){return!e(t.target).closest(".ui-menu").length},_isDivider:function(e){return!/[^\-\u2014\u2013\s]/.test(e.text())},collapse:function(e){var t=this.active&&this.active.parent().closest(".ui-menu-item",this.element);t&&t.length&&(this._close(),this.focus(e,t))},expand:function(e){var t=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();t&&t.length&&(this._open(t.parent()),this._delay(function(){this.focus(e,t)}))},next:function(e){this._move("next","first",e)},previous:function(e){this._move("prev","last",e)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(e,t,i){var s;this.active&&(s="first"===e||"last"===e?this.active["first"===e?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[e+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[t]()),this.focus(i,s)},nextPage:function(t){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=e(this),0>i.offset().top-s-n}),this.focus(t,i)):this.focus(t,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())),void 0):(this.next(t),void 0)},previousPage:function(t){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=e(this),i.offset().top-s+n>0}),this.focus(t,i)):this.focus(t,this.activeMenu.find(this.options.items).first())),void 0):(this.next(t),void 0)},_hasScroll:function(){return this.element.outerHeight()",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var t,i,s,n=this.element[0].nodeName.toLowerCase(),a="textarea"===n,o="input"===n;this.isMultiLine=a?!0:o?!1:this.element.prop("isContentEditable"),this.valueMethod=this.element[a||o?"val":"text"],this.isNewMenu=!0,this.element.addClass("ui-autocomplete-input").attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return t=!0,s=!0,i=!0,void 0;t=!1,s=!1,i=!1;var a=e.ui.keyCode;switch(n.keyCode){case a.PAGE_UP:t=!0,this._move("previousPage",n);break;case a.PAGE_DOWN:t=!0,this._move("nextPage",n);break;case a.UP:t=!0,this._keyEvent("previous",n);break;case a.DOWN:t=!0,this._keyEvent("next",n);break;case a.ENTER:this.menu.active&&(t=!0,n.preventDefault(),this.menu.select(n));break;case a.TAB:this.menu.active&&this.menu.select(n);break;case a.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(t)return t=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),void 0;if(!i){var n=e.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(e){return s?(s=!1,e.preventDefault(),void 0):(this._searchTimeout(e),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(e),this._change(e),void 0)}}),this._initSource(),this.menu=e("
                  ").addClass("ui-autocomplete ui-front").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._on(this.menu.element,{mousedown:function(t){t.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur});var i=this.menu.element[0];e(t.target).closest(".ui-menu-item").length||this._delay(function(){var t=this;this.document.one("mousedown",function(s){s.target===t.element[0]||s.target===i||e.contains(i,s.target)||t.close()})})},menufocus:function(t,i){var s,n;return this.isNewMenu&&(this.isNewMenu=!1,t.originalEvent&&/^mouse/.test(t.originalEvent.type))?(this.menu.blur(),this.document.one("mousemove",function(){e(t.target).trigger(t.originalEvent)}),void 0):(n=i.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",t,{item:n})&&t.originalEvent&&/^key/.test(t.originalEvent.type)&&this._value(n.value),s=i.item.attr("aria-label")||n.value,s&&e.trim(s).length&&(this.liveRegion.children().hide(),e("
                  ").text(s).appendTo(this.liveRegion)),void 0)},menuselect:function(e,t){var i=t.item.data("ui-autocomplete-item"),s=this.previous;this.element[0]!==this.document[0].activeElement&&(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=i})),!1!==this._trigger("select",e,{item:i})&&this._value(i.value),this.term=this._value(),this.close(e),this.selectedItem=i}}),this.liveRegion=e("",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).addClass("ui-helper-hidden-accessible").appendTo(this.document[0].body),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(e,t){this._super(e,t),"source"===e&&this._initSource(),"appendTo"===e&&this.menu.element.appendTo(this._appendTo()),"disabled"===e&&t&&this.xhr&&this.xhr.abort()},_appendTo:function(){var t=this.options.appendTo;return t&&(t=t.jquery||t.nodeType?e(t):this.document.find(t).eq(0)),t&&t[0]||(t=this.element.closest(".ui-front")),t.length||(t=this.document[0].body),t},_initSource:function(){var t,i,s=this;e.isArray(this.options.source)?(t=this.options.source,this.source=function(i,s){s(e.ui.autocomplete.filter(t,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(t,n){s.xhr&&s.xhr.abort(),s.xhr=e.ajax({url:i,data:t,dataType:"json",success:function(e){n(e)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(e){clearTimeout(this.searching),this.searching=this._delay(function(){var t=this.term===this._value(),i=this.menu.element.is(":visible"),s=e.altKey||e.ctrlKey||e.metaKey||e.shiftKey;(!t||t&&!i&&!s)&&(this.selectedItem=null,this.search(null,e))},this.options.delay)},search:function(e,t){return e=null!=e?e:this._value(),this.term=this._value(),e.length").text(i.label).appendTo(t)},_move:function(e,t){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(e)||this.menu.isLastItem()&&/^next/.test(e)?(this.isMultiLine||this._value(this.term),this.menu.blur(),void 0):(this.menu[e](t),void 0):(this.search(null,t),void 0)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(e,t){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(e,t),t.preventDefault())}}),e.extend(e.ui.autocomplete,{escapeRegex:function(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(t,i){var s=RegExp(e.ui.autocomplete.escapeRegex(i),"i");return e.grep(t,function(e){return s.test(e.label||e.value||e)})}}),e.widget("ui.autocomplete",e.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(e){return e+(e>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(t){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=t&&t.length?this.options.messages.results(t.length):this.options.messages.noResults,this.liveRegion.children().hide(),e("
                  ").text(i).appendTo(this.liveRegion))}}),e.ui.autocomplete;var c,p="ui-button ui-widget ui-state-default ui-corner-all",f="ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",m=function(){var t=e(this);setTimeout(function(){t.find(":ui-button").button("refresh")},1)},g=function(t){var i=t.name,s=t.form,n=e([]);return i&&(i=i.replace(/'/g,"\\'"),n=s?e(s).find("[name='"+i+"'][type=radio]"):e("[name='"+i+"'][type=radio]",t.ownerDocument).filter(function(){return!this.form})),n};e.widget("ui.button",{version:"1.11.4",defaultElement:"").addClass(this._triggerClass).html(a?e("").attr({src:a,alt:n,title:n}):n)),t[r?"before":"after"](i.trigger),i.trigger.click(function(){return e.datepicker._datepickerShowing&&e.datepicker._lastInput===t[0]?e.datepicker._hideDatepicker():e.datepicker._datepickerShowing&&e.datepicker._lastInput!==t[0]?(e.datepicker._hideDatepicker(),e.datepicker._showDatepicker(t[0])):e.datepicker._showDatepicker(t[0]),!1}))},_autoSize:function(e){if(this._get(e,"autoSize")&&!e.inline){var t,i,s,n,a=new Date(2009,11,20),o=this._get(e,"dateFormat");o.match(/[DM]/)&&(t=function(e){for(i=0,s=0,n=0;e.length>n;n++)e[n].length>i&&(i=e[n].length,s=n);return s},a.setMonth(t(this._get(e,o.match(/MM/)?"monthNames":"monthNamesShort"))),a.setDate(t(this._get(e,o.match(/DD/)?"dayNames":"dayNamesShort"))+20-a.getDay())),e.input.attr("size",this._formatDate(e,a).length)}},_inlineDatepicker:function(t,i){var s=e(t);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),e.data(t,"datepicker",i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(t),i.dpDiv.css("display","block"))},_dialogDatepicker:function(t,i,s,n,a){var o,h,l,u,d,c=this._dialogInst;return c||(this.uuid+=1,o="dp"+this.uuid,this._dialogInput=e(""),this._dialogInput.keydown(this._doKeyDown),e("body").append(this._dialogInput),c=this._dialogInst=this._newInst(this._dialogInput,!1),c.settings={},e.data(this._dialogInput[0],"datepicker",c)),r(c.settings,n||{}),i=i&&i.constructor===Date?this._formatDate(c,i):i,this._dialogInput.val(i),this._pos=a?a.length?a:[a.pageX,a.pageY]:null,this._pos||(h=document.documentElement.clientWidth,l=document.documentElement.clientHeight,u=document.documentElement.scrollLeft||document.body.scrollLeft,d=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[h/2-100+u,l/2-150+d]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),c.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),e.blockUI&&e.blockUI(this.dpDiv),e.data(this._dialogInput[0],"datepicker",c),this},_destroyDatepicker:function(t){var i,s=e(t),n=e.data(t,"datepicker");s.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),e.removeData(t,"datepicker"),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty(),v===n&&(v=null))},_enableDatepicker:function(t){var i,s,n=e(t),a=e.data(t,"datepicker");n.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),"input"===i?(t.disabled=!1,a.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=e.map(this._disabledInputs,function(e){return e===t?null:e}))},_disableDatepicker:function(t){var i,s,n=e(t),a=e.data(t,"datepicker");n.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),"input"===i?(t.disabled=!0,a.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=e.map(this._disabledInputs,function(e){return e===t?null:e}),this._disabledInputs[this._disabledInputs.length]=t)},_isDisabledDatepicker:function(e){if(!e)return!1;for(var t=0;this._disabledInputs.length>t;t++)if(this._disabledInputs[t]===e)return!0;return!1},_getInst:function(t){try{return e.data(t,"datepicker")}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(t,i,s){var n,a,o,h,l=this._getInst(t);return 2===arguments.length&&"string"==typeof i?"defaults"===i?e.extend({},e.datepicker._defaults):l?"all"===i?e.extend({},l.settings):this._get(l,i):null:(n=i||{},"string"==typeof i&&(n={},n[i]=s),l&&(this._curInst===l&&this._hideDatepicker(),a=this._getDateDatepicker(t,!0),o=this._getMinMaxDate(l,"min"),h=this._getMinMaxDate(l,"max"),r(l.settings,n),null!==o&&void 0!==n.dateFormat&&void 0===n.minDate&&(l.settings.minDate=this._formatDate(l,o)),null!==h&&void 0!==n.dateFormat&&void 0===n.maxDate&&(l.settings.maxDate=this._formatDate(l,h)),"disabled"in n&&(n.disabled?this._disableDatepicker(t):this._enableDatepicker(t)),this._attachments(e(t),l),this._autoSize(l),this._setDate(l,a),this._updateAlternate(l),this._updateDatepicker(l)),void 0)},_changeDatepicker:function(e,t,i){this._optionDatepicker(e,t,i)},_refreshDatepicker:function(e){var t=this._getInst(e);t&&this._updateDatepicker(t)},_setDateDatepicker:function(e,t){var i=this._getInst(e);i&&(this._setDate(i,t),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(e,t){var i=this._getInst(e);return i&&!i.inline&&this._setDateFromField(i,t),i?this._getDate(i):null},_doKeyDown:function(t){var i,s,n,a=e.datepicker._getInst(t.target),o=!0,r=a.dpDiv.is(".ui-datepicker-rtl");if(a._keyEvent=!0,e.datepicker._datepickerShowing)switch(t.keyCode){case 9:e.datepicker._hideDatepicker(),o=!1;break;case 13:return n=e("td."+e.datepicker._dayOverClass+":not(."+e.datepicker._currentClass+")",a.dpDiv),n[0]&&e.datepicker._selectDay(t.target,a.selectedMonth,a.selectedYear,n[0]),i=e.datepicker._get(a,"onSelect"),i?(s=e.datepicker._formatDate(a),i.apply(a.input?a.input[0]:null,[s,a])):e.datepicker._hideDatepicker(),!1;case 27:e.datepicker._hideDatepicker();break;case 33:e.datepicker._adjustDate(t.target,t.ctrlKey?-e.datepicker._get(a,"stepBigMonths"):-e.datepicker._get(a,"stepMonths"),"M");break;case 34:e.datepicker._adjustDate(t.target,t.ctrlKey?+e.datepicker._get(a,"stepBigMonths"):+e.datepicker._get(a,"stepMonths"),"M");break;case 35:(t.ctrlKey||t.metaKey)&&e.datepicker._clearDate(t.target),o=t.ctrlKey||t.metaKey;break;case 36:(t.ctrlKey||t.metaKey)&&e.datepicker._gotoToday(t.target),o=t.ctrlKey||t.metaKey;break;case 37:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,r?1:-1,"D"),o=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&e.datepicker._adjustDate(t.target,t.ctrlKey?-e.datepicker._get(a,"stepBigMonths"):-e.datepicker._get(a,"stepMonths"),"M");break;case 38:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,-7,"D"),o=t.ctrlKey||t.metaKey;break;case 39:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,r?-1:1,"D"),o=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&e.datepicker._adjustDate(t.target,t.ctrlKey?+e.datepicker._get(a,"stepBigMonths"):+e.datepicker._get(a,"stepMonths"),"M");break;case 40:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,7,"D"),o=t.ctrlKey||t.metaKey;break;default:o=!1}else 36===t.keyCode&&t.ctrlKey?e.datepicker._showDatepicker(this):o=!1;o&&(t.preventDefault(),t.stopPropagation())},_doKeyPress:function(t){var i,s,n=e.datepicker._getInst(t.target); +return e.datepicker._get(n,"constrainInput")?(i=e.datepicker._possibleChars(e.datepicker._get(n,"dateFormat")),s=String.fromCharCode(null==t.charCode?t.keyCode:t.charCode),t.ctrlKey||t.metaKey||" ">s||!i||i.indexOf(s)>-1):void 0},_doKeyUp:function(t){var i,s=e.datepicker._getInst(t.target);if(s.input.val()!==s.lastVal)try{i=e.datepicker.parseDate(e.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,e.datepicker._getFormatConfig(s)),i&&(e.datepicker._setDateFromField(s),e.datepicker._updateAlternate(s),e.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(t){if(t=t.target||t,"input"!==t.nodeName.toLowerCase()&&(t=e("input",t.parentNode)[0]),!e.datepicker._isDisabledDatepicker(t)&&e.datepicker._lastInput!==t){var i,n,a,o,h,l,u;i=e.datepicker._getInst(t),e.datepicker._curInst&&e.datepicker._curInst!==i&&(e.datepicker._curInst.dpDiv.stop(!0,!0),i&&e.datepicker._datepickerShowing&&e.datepicker._hideDatepicker(e.datepicker._curInst.input[0])),n=e.datepicker._get(i,"beforeShow"),a=n?n.apply(t,[t,i]):{},a!==!1&&(r(i.settings,a),i.lastVal=null,e.datepicker._lastInput=t,e.datepicker._setDateFromField(i),e.datepicker._inDialog&&(t.value=""),e.datepicker._pos||(e.datepicker._pos=e.datepicker._findPos(t),e.datepicker._pos[1]+=t.offsetHeight),o=!1,e(t).parents().each(function(){return o|="fixed"===e(this).css("position"),!o}),h={left:e.datepicker._pos[0],top:e.datepicker._pos[1]},e.datepicker._pos=null,i.dpDiv.empty(),i.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),e.datepicker._updateDatepicker(i),h=e.datepicker._checkOffset(i,h,o),i.dpDiv.css({position:e.datepicker._inDialog&&e.blockUI?"static":o?"fixed":"absolute",display:"none",left:h.left+"px",top:h.top+"px"}),i.inline||(l=e.datepicker._get(i,"showAnim"),u=e.datepicker._get(i,"duration"),i.dpDiv.css("z-index",s(e(t))+1),e.datepicker._datepickerShowing=!0,e.effects&&e.effects.effect[l]?i.dpDiv.show(l,e.datepicker._get(i,"showOptions"),u):i.dpDiv[l||"show"](l?u:null),e.datepicker._shouldFocusInput(i)&&i.input.focus(),e.datepicker._curInst=i))}},_updateDatepicker:function(t){this.maxRows=4,v=t,t.dpDiv.empty().append(this._generateHTML(t)),this._attachHandlers(t);var i,s=this._getNumberOfMonths(t),n=s[1],a=17,r=t.dpDiv.find("."+this._dayOverClass+" a");r.length>0&&o.apply(r.get(0)),t.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&t.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",a*n+"em"),t.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),t.dpDiv[(this._get(t,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),t===e.datepicker._curInst&&e.datepicker._datepickerShowing&&e.datepicker._shouldFocusInput(t)&&t.input.focus(),t.yearshtml&&(i=t.yearshtml,setTimeout(function(){i===t.yearshtml&&t.yearshtml&&t.dpDiv.find("select.ui-datepicker-year:first").replaceWith(t.yearshtml),i=t.yearshtml=null},0))},_shouldFocusInput:function(e){return e.input&&e.input.is(":visible")&&!e.input.is(":disabled")&&!e.input.is(":focus")},_checkOffset:function(t,i,s){var n=t.dpDiv.outerWidth(),a=t.dpDiv.outerHeight(),o=t.input?t.input.outerWidth():0,r=t.input?t.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:e(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:e(document).scrollTop());return i.left-=this._get(t,"isRTL")?n-o:0,i.left-=s&&i.left===t.input.offset().left?e(document).scrollLeft():0,i.top-=s&&i.top===t.input.offset().top+r?e(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+a>l&&l>a?Math.abs(a+r):0),i},_findPos:function(t){for(var i,s=this._getInst(t),n=this._get(s,"isRTL");t&&("hidden"===t.type||1!==t.nodeType||e.expr.filters.hidden(t));)t=t[n?"previousSibling":"nextSibling"];return i=e(t).offset(),[i.left,i.top]},_hideDatepicker:function(t){var i,s,n,a,o=this._curInst;!o||t&&o!==e.data(t,"datepicker")||this._datepickerShowing&&(i=this._get(o,"showAnim"),s=this._get(o,"duration"),n=function(){e.datepicker._tidyDialog(o)},e.effects&&(e.effects.effect[i]||e.effects[i])?o.dpDiv.hide(i,e.datepicker._get(o,"showOptions"),s,n):o.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,a=this._get(o,"onClose"),a&&a.apply(o.input?o.input[0]:null,[o.input?o.input.val():"",o]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),e.blockUI&&(e.unblockUI(),e("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(e){e.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(t){if(e.datepicker._curInst){var i=e(t.target),s=e.datepicker._getInst(i[0]);(i[0].id!==e.datepicker._mainDivId&&0===i.parents("#"+e.datepicker._mainDivId).length&&!i.hasClass(e.datepicker.markerClassName)&&!i.closest("."+e.datepicker._triggerClass).length&&e.datepicker._datepickerShowing&&(!e.datepicker._inDialog||!e.blockUI)||i.hasClass(e.datepicker.markerClassName)&&e.datepicker._curInst!==s)&&e.datepicker._hideDatepicker()}},_adjustDate:function(t,i,s){var n=e(t),a=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(a,i+("M"===s?this._get(a,"showCurrentAtPos"):0),s),this._updateDatepicker(a))},_gotoToday:function(t){var i,s=e(t),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(t,i,s){var n=e(t),a=this._getInst(n[0]);a["selected"+("M"===s?"Month":"Year")]=a["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(a),this._adjustDate(n)},_selectDay:function(t,i,s,n){var a,o=e(t);e(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(o[0])||(a=this._getInst(o[0]),a.selectedDay=a.currentDay=e("a",n).html(),a.selectedMonth=a.currentMonth=i,a.selectedYear=a.currentYear=s,this._selectDate(t,this._formatDate(a,a.currentDay,a.currentMonth,a.currentYear)))},_clearDate:function(t){var i=e(t);this._selectDate(i,"")},_selectDate:function(t,i){var s,n=e(t),a=this._getInst(n[0]);i=null!=i?i:this._formatDate(a),a.input&&a.input.val(i),this._updateAlternate(a),s=this._get(a,"onSelect"),s?s.apply(a.input?a.input[0]:null,[i,a]):a.input&&a.input.trigger("change"),a.inline?this._updateDatepicker(a):(this._hideDatepicker(),this._lastInput=a.input[0],"object"!=typeof a.input[0]&&a.input.focus(),this._lastInput=null)},_updateAlternate:function(t){var i,s,n,a=this._get(t,"altField");a&&(i=this._get(t,"altFormat")||this._get(t,"dateFormat"),s=this._getDate(t),n=this.formatDate(i,s,this._getFormatConfig(t)),e(a).each(function(){e(this).val(n)}))},noWeekends:function(e){var t=e.getDay();return[t>0&&6>t,""]},iso8601Week:function(e){var t,i=new Date(e.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),t=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((t-i)/864e5)/7)+1},parseDate:function(t,i,s){if(null==t||null==i)throw"Invalid arguments";if(i="object"==typeof i?""+i:i+"",""===i)return null;var n,a,o,r,h=0,l=(s?s.shortYearCutoff:null)||this._defaults.shortYearCutoff,u="string"!=typeof l?l:(new Date).getFullYear()%100+parseInt(l,10),d=(s?s.dayNamesShort:null)||this._defaults.dayNamesShort,c=(s?s.dayNames:null)||this._defaults.dayNames,p=(s?s.monthNamesShort:null)||this._defaults.monthNamesShort,f=(s?s.monthNames:null)||this._defaults.monthNames,m=-1,g=-1,v=-1,y=-1,b=!1,_=function(e){var i=t.length>n+1&&t.charAt(n+1)===e;return i&&n++,i},x=function(e){var t=_(e),s="@"===e?14:"!"===e?20:"y"===e&&t?4:"o"===e?3:2,n="y"===e?s:1,a=RegExp("^\\d{"+n+","+s+"}"),o=i.substring(h).match(a);if(!o)throw"Missing number at position "+h;return h+=o[0].length,parseInt(o[0],10)},w=function(t,s,n){var a=-1,o=e.map(_(t)?n:s,function(e,t){return[[t,e]]}).sort(function(e,t){return-(e[1].length-t[1].length)});if(e.each(o,function(e,t){var s=t[1];return i.substr(h,s.length).toLowerCase()===s.toLowerCase()?(a=t[0],h+=s.length,!1):void 0}),-1!==a)return a+1;throw"Unknown name at position "+h},k=function(){if(i.charAt(h)!==t.charAt(n))throw"Unexpected literal at position "+h;h++};for(n=0;t.length>n;n++)if(b)"'"!==t.charAt(n)||_("'")?k():b=!1;else switch(t.charAt(n)){case"d":v=x("d");break;case"D":w("D",d,c);break;case"o":y=x("o");break;case"m":g=x("m");break;case"M":g=w("M",p,f);break;case"y":m=x("y");break;case"@":r=new Date(x("@")),m=r.getFullYear(),g=r.getMonth()+1,v=r.getDate();break;case"!":r=new Date((x("!")-this._ticksTo1970)/1e4),m=r.getFullYear(),g=r.getMonth()+1,v=r.getDate();break;case"'":_("'")?k():b=!0;break;default:k()}if(i.length>h&&(o=i.substr(h),!/^\s+/.test(o)))throw"Extra/unparsed characters found in date: "+o;if(-1===m?m=(new Date).getFullYear():100>m&&(m+=(new Date).getFullYear()-(new Date).getFullYear()%100+(u>=m?0:-100)),y>-1)for(g=1,v=y;;){if(a=this._getDaysInMonth(m,g-1),a>=v)break;g++,v-=a}if(r=this._daylightSavingAdjust(new Date(m,g-1,v)),r.getFullYear()!==m||r.getMonth()+1!==g||r.getDate()!==v)throw"Invalid date";return r},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(e,t,i){if(!t)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,a=(i?i.dayNames:null)||this._defaults.dayNames,o=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,r=(i?i.monthNames:null)||this._defaults.monthNames,h=function(t){var i=e.length>s+1&&e.charAt(s+1)===t;return i&&s++,i},l=function(e,t,i){var s=""+t;if(h(e))for(;i>s.length;)s="0"+s;return s},u=function(e,t,i,s){return h(e)?s[t]:i[t]},d="",c=!1;if(t)for(s=0;e.length>s;s++)if(c)"'"!==e.charAt(s)||h("'")?d+=e.charAt(s):c=!1;else switch(e.charAt(s)){case"d":d+=l("d",t.getDate(),2);break;case"D":d+=u("D",t.getDay(),n,a);break;case"o":d+=l("o",Math.round((new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime()-new Date(t.getFullYear(),0,0).getTime())/864e5),3);break;case"m":d+=l("m",t.getMonth()+1,2);break;case"M":d+=u("M",t.getMonth(),o,r);break;case"y":d+=h("y")?t.getFullYear():(10>t.getYear()%100?"0":"")+t.getYear()%100;break;case"@":d+=t.getTime();break;case"!":d+=1e4*t.getTime()+this._ticksTo1970;break;case"'":h("'")?d+="'":c=!0;break;default:d+=e.charAt(s)}return d},_possibleChars:function(e){var t,i="",s=!1,n=function(i){var s=e.length>t+1&&e.charAt(t+1)===i;return s&&t++,s};for(t=0;e.length>t;t++)if(s)"'"!==e.charAt(t)||n("'")?i+=e.charAt(t):s=!1;else switch(e.charAt(t)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=e.charAt(t)}return i},_get:function(e,t){return void 0!==e.settings[t]?e.settings[t]:this._defaults[t]},_setDateFromField:function(e,t){if(e.input.val()!==e.lastVal){var i=this._get(e,"dateFormat"),s=e.lastVal=e.input?e.input.val():null,n=this._getDefaultDate(e),a=n,o=this._getFormatConfig(e);try{a=this.parseDate(i,s,o)||n}catch(r){s=t?"":s}e.selectedDay=a.getDate(),e.drawMonth=e.selectedMonth=a.getMonth(),e.drawYear=e.selectedYear=a.getFullYear(),e.currentDay=s?a.getDate():0,e.currentMonth=s?a.getMonth():0,e.currentYear=s?a.getFullYear():0,this._adjustInstDate(e)}},_getDefaultDate:function(e){return this._restrictMinMax(e,this._determineDate(e,this._get(e,"defaultDate"),new Date))},_determineDate:function(t,i,s){var n=function(e){var t=new Date;return t.setDate(t.getDate()+e),t},a=function(i){try{return e.datepicker.parseDate(e.datepicker._get(t,"dateFormat"),i,e.datepicker._getFormatConfig(t))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?e.datepicker._getDate(t):null)||new Date,a=n.getFullYear(),o=n.getMonth(),r=n.getDate(),h=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||"d"){case"d":case"D":r+=parseInt(l[1],10);break;case"w":case"W":r+=7*parseInt(l[1],10);break;case"m":case"M":o+=parseInt(l[1],10),r=Math.min(r,e.datepicker._getDaysInMonth(a,o));break;case"y":case"Y":a+=parseInt(l[1],10),r=Math.min(r,e.datepicker._getDaysInMonth(a,o))}l=h.exec(i)}return new Date(a,o,r)},o=null==i||""===i?s:"string"==typeof i?a(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return o=o&&"Invalid Date"==""+o?s:o,o&&(o.setHours(0),o.setMinutes(0),o.setSeconds(0),o.setMilliseconds(0)),this._daylightSavingAdjust(o)},_daylightSavingAdjust:function(e){return e?(e.setHours(e.getHours()>12?e.getHours()+2:0),e):null},_setDate:function(e,t,i){var s=!t,n=e.selectedMonth,a=e.selectedYear,o=this._restrictMinMax(e,this._determineDate(e,t,new Date));e.selectedDay=e.currentDay=o.getDate(),e.drawMonth=e.selectedMonth=e.currentMonth=o.getMonth(),e.drawYear=e.selectedYear=e.currentYear=o.getFullYear(),n===e.selectedMonth&&a===e.selectedYear||i||this._notifyChange(e),this._adjustInstDate(e),e.input&&e.input.val(s?"":this._formatDate(e))},_getDate:function(e){var t=!e.currentYear||e.input&&""===e.input.val()?null:this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return t},_attachHandlers:function(t){var i=this._get(t,"stepMonths"),s="#"+t.id.replace(/\\\\/g,"\\");t.dpDiv.find("[data-handler]").map(function(){var t={prev:function(){e.datepicker._adjustDate(s,-i,"M")},next:function(){e.datepicker._adjustDate(s,+i,"M")},hide:function(){e.datepicker._hideDatepicker()},today:function(){e.datepicker._gotoToday(s)},selectDay:function(){return e.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return e.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return e.datepicker._selectMonthYear(s,this,"Y"),!1}};e(this).bind(this.getAttribute("data-event"),t[this.getAttribute("data-handler")])})},_generateHTML:function(e){var t,i,s,n,a,o,r,h,l,u,d,c,p,f,m,g,v,y,b,_,x,w,k,T,D,S,M,C,N,A,P,I,H,z,F,E,O,j,W,L=new Date,R=this._daylightSavingAdjust(new Date(L.getFullYear(),L.getMonth(),L.getDate())),Y=this._get(e,"isRTL"),B=this._get(e,"showButtonPanel"),J=this._get(e,"hideIfNoPrevNext"),q=this._get(e,"navigationAsDateFormat"),K=this._getNumberOfMonths(e),V=this._get(e,"showCurrentAtPos"),U=this._get(e,"stepMonths"),Q=1!==K[0]||1!==K[1],G=this._daylightSavingAdjust(e.currentDay?new Date(e.currentYear,e.currentMonth,e.currentDay):new Date(9999,9,9)),X=this._getMinMaxDate(e,"min"),$=this._getMinMaxDate(e,"max"),Z=e.drawMonth-V,et=e.drawYear;if(0>Z&&(Z+=12,et--),$)for(t=this._daylightSavingAdjust(new Date($.getFullYear(),$.getMonth()-K[0]*K[1]+1,$.getDate())),t=X&&X>t?X:t;this._daylightSavingAdjust(new Date(et,Z,1))>t;)Z--,0>Z&&(Z=11,et--);for(e.drawMonth=Z,e.drawYear=et,i=this._get(e,"prevText"),i=q?this.formatDate(i,this._daylightSavingAdjust(new Date(et,Z-U,1)),this._getFormatConfig(e)):i,s=this._canAdjustMonth(e,-1,et,Z)?""+i+"":J?"":""+i+"",n=this._get(e,"nextText"),n=q?this.formatDate(n,this._daylightSavingAdjust(new Date(et,Z+U,1)),this._getFormatConfig(e)):n,a=this._canAdjustMonth(e,1,et,Z)?""+n+"":J?"":""+n+"",o=this._get(e,"currentText"),r=this._get(e,"gotoCurrent")&&e.currentDay?G:R,o=q?this.formatDate(o,r,this._getFormatConfig(e)):o,h=e.inline?"":"",l=B?"
                  "+(Y?h:"")+(this._isInRange(e,r)?"":"")+(Y?"":h)+"
                  ":"",u=parseInt(this._get(e,"firstDay"),10),u=isNaN(u)?0:u,d=this._get(e,"showWeek"),c=this._get(e,"dayNames"),p=this._get(e,"dayNamesMin"),f=this._get(e,"monthNames"),m=this._get(e,"monthNamesShort"),g=this._get(e,"beforeShowDay"),v=this._get(e,"showOtherMonths"),y=this._get(e,"selectOtherMonths"),b=this._getDefaultDate(e),_="",w=0;K[0]>w;w++){for(k="",this.maxRows=4,T=0;K[1]>T;T++){if(D=this._daylightSavingAdjust(new Date(et,Z,e.selectedDay)),S=" ui-corner-all",M="",Q){if(M+="
                  "}for(M+="
                  "+(/all|left/.test(S)&&0===w?Y?a:s:"")+(/all|right/.test(S)&&0===w?Y?s:a:"")+this._generateMonthYearHeader(e,Z,et,X,$,w>0||T>0,f,m)+"
                  "+"",C=d?"":"",x=0;7>x;x++)N=(x+u)%7,C+="";for(M+=C+"",A=this._getDaysInMonth(et,Z),et===e.selectedYear&&Z===e.selectedMonth&&(e.selectedDay=Math.min(e.selectedDay,A)),P=(this._getFirstDayOfMonth(et,Z)-u+7)%7,I=Math.ceil((P+A)/7),H=Q?this.maxRows>I?this.maxRows:I:I,this.maxRows=H,z=this._daylightSavingAdjust(new Date(et,Z,1-P)),F=0;H>F;F++){for(M+="",E=d?"":"",x=0;7>x;x++)O=g?g.apply(e.input?e.input[0]:null,[z]):[!0,""],j=z.getMonth()!==Z,W=j&&!y||!O[0]||X&&X>z||$&&z>$,E+="",z.setDate(z.getDate()+1),z=this._daylightSavingAdjust(z);M+=E+""}Z++,Z>11&&(Z=0,et++),M+="
                  "+this._get(e,"weekHeader")+"=5?" class='ui-datepicker-week-end'":"")+">"+""+p[N]+"
                  "+this._get(e,"calculateWeek")(z)+""+(j&&!v?" ":W?""+z.getDate()+"":""+z.getDate()+"")+"
                  "+(Q?"
                  "+(K[0]>0&&T===K[1]-1?"
                  ":""):""),k+=M}_+=k}return _+=l,e._keyEvent=!1,_},_generateMonthYearHeader:function(e,t,i,s,n,a,o,r){var h,l,u,d,c,p,f,m,g=this._get(e,"changeMonth"),v=this._get(e,"changeYear"),y=this._get(e,"showMonthAfterYear"),b="
                  ",_="";if(a||!g)_+=""+o[t]+"";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,_+=""}if(y||(b+=_+(!a&&g&&v?"":" ")),!e.yearshtml)if(e.yearshtml="",a||!v)b+=""+i+"";else{for(d=this._get(e,"yearRange").split(":"),c=(new Date).getFullYear(),p=function(e){var t=e.match(/c[+\-].*/)?i+parseInt(e.substring(1),10):e.match(/[+\-].*/)?c+parseInt(e,10):parseInt(e,10);return isNaN(t)?c:t},f=p(d[0]),m=Math.max(f,p(d[1]||"")),f=s?Math.max(f,s.getFullYear()):f,m=n?Math.min(m,n.getFullYear()):m,e.yearshtml+="",b+=e.yearshtml,e.yearshtml=null}return b+=this._get(e,"yearSuffix"),y&&(b+=(!a&&g&&v?"":" ")+_),b+="
                  "},_adjustInstDate:function(e,t,i){var s=e.drawYear+("Y"===i?t:0),n=e.drawMonth+("M"===i?t:0),a=Math.min(e.selectedDay,this._getDaysInMonth(s,n))+("D"===i?t:0),o=this._restrictMinMax(e,this._daylightSavingAdjust(new Date(s,n,a)));e.selectedDay=o.getDate(),e.drawMonth=e.selectedMonth=o.getMonth(),e.drawYear=e.selectedYear=o.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(e)},_restrictMinMax:function(e,t){var i=this._getMinMaxDate(e,"min"),s=this._getMinMaxDate(e,"max"),n=i&&i>t?i:t;return s&&n>s?s:n},_notifyChange:function(e){var t=this._get(e,"onChangeMonthYear");t&&t.apply(e.input?e.input[0]:null,[e.selectedYear,e.selectedMonth+1,e])},_getNumberOfMonths:function(e){var t=this._get(e,"numberOfMonths");return null==t?[1,1]:"number"==typeof t?[1,t]:t},_getMinMaxDate:function(e,t){return this._determineDate(e,this._get(e,t+"Date"),null)},_getDaysInMonth:function(e,t){return 32-this._daylightSavingAdjust(new Date(e,t,32)).getDate()},_getFirstDayOfMonth:function(e,t){return new Date(e,t,1).getDay()},_canAdjustMonth:function(e,t,i,s){var n=this._getNumberOfMonths(e),a=this._daylightSavingAdjust(new Date(i,s+(0>t?t:n[0]*n[1]),1));return 0>t&&a.setDate(this._getDaysInMonth(a.getFullYear(),a.getMonth())),this._isInRange(e,a)},_isInRange:function(e,t){var i,s,n=this._getMinMaxDate(e,"min"),a=this._getMinMaxDate(e,"max"),o=null,r=null,h=this._get(e,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),o=parseInt(i[0],10),r=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(o+=s),i[1].match(/[+\-].*/)&&(r+=s)),(!n||t.getTime()>=n.getTime())&&(!a||t.getTime()<=a.getTime())&&(!o||t.getFullYear()>=o)&&(!r||r>=t.getFullYear())},_getFormatConfig:function(e){var t=this._get(e,"shortYearCutoff");return t="string"!=typeof t?t:(new Date).getFullYear()%100+parseInt(t,10),{shortYearCutoff:t,dayNamesShort:this._get(e,"dayNamesShort"),dayNames:this._get(e,"dayNames"),monthNamesShort:this._get(e,"monthNamesShort"),monthNames:this._get(e,"monthNames")}},_formatDate:function(e,t,i,s){t||(e.currentDay=e.selectedDay,e.currentMonth=e.selectedMonth,e.currentYear=e.selectedYear);var n=t?"object"==typeof t?t:this._daylightSavingAdjust(new Date(s,i,t)):this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return this.formatDate(this._get(e,"dateFormat"),n,this._getFormatConfig(e))}}),e.fn.datepicker=function(t){if(!this.length)return this;e.datepicker.initialized||(e(document).mousedown(e.datepicker._checkExternalClick),e.datepicker.initialized=!0),0===e("#"+e.datepicker._mainDivId).length&&e("body").append(e.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof t||"isDisabled"!==t&&"getDate"!==t&&"widget"!==t?"option"===t&&2===arguments.length&&"string"==typeof arguments[1]?e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof t?e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this].concat(i)):e.datepicker._attachDatepicker(this,t)}):e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this[0]].concat(i))},e.datepicker=new n,e.datepicker.initialized=!1,e.datepicker.uuid=(new Date).getTime(),e.datepicker.version="1.11.4",e.datepicker,e.widget("ui.draggable",e.ui.mouse,{version:"1.11.4",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._setHandleClassName(),this._mouseInit()},_setOption:function(e,t){this._super(e,t),"handle"===e&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){return(this.helper||this.element).is(".ui-draggable-dragging")?(this.destroyOnClear=!0,void 0):(this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._removeHandleClassName(),this._mouseDestroy(),void 0)},_mouseCapture:function(t){var i=this.options;return this._blurActiveElement(t),this.helper||i.disabled||e(t.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(t),this.handle?(this._blockFrames(i.iframeFix===!0?"iframe":i.iframeFix),!0):!1)},_blockFrames:function(t){this.iframeBlocks=this.document.find(t).map(function(){var t=e(this);return e("
                  ").css("position","absolute").appendTo(t.parent()).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(t){var i=this.document[0];if(this.handleElement.is(t.target))try{i.activeElement&&"body"!==i.activeElement.nodeName.toLowerCase()&&e(i.activeElement).blur()}catch(s){}},_mouseStart:function(t){var i=this.options;return this.helper=this._createHelper(t),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),e.ui.ddmanager&&(e.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=this.helper.parents().filter(function(){return"fixed"===e(this).css("position")}).length>0,this.positionAbs=this.element.offset(),this._refreshOffsets(t),this.originalPosition=this.position=this._generatePosition(t,!1),this.originalPageX=t.pageX,this.originalPageY=t.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",t)===!1?(this._clear(),!1):(this._cacheHelperProportions(),e.ui.ddmanager&&!i.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this._normalizeRightBottom(),this._mouseDrag(t,!0),e.ui.ddmanager&&e.ui.ddmanager.dragStart(this,t),!0)},_refreshOffsets:function(e){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:e.pageX-this.offset.left,top:e.pageY-this.offset.top}},_mouseDrag:function(t,i){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(t,!0),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",t,s)===!1)return this._mouseUp({}),!1;this.position=s.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),!1},_mouseStop:function(t){var i=this,s=!1;return e.ui.ddmanager&&!this.options.dropBehaviour&&(s=e.ui.ddmanager.drop(this,t)),this.dropped&&(s=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||e.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?e(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",t)!==!1&&i._clear()}):this._trigger("stop",t)!==!1&&this._clear(),!1},_mouseUp:function(t){return this._unblockFrames(),e.ui.ddmanager&&e.ui.ddmanager.dragStop(this,t),this.handleElement.is(t.target)&&this.element.focus(),e.ui.mouse.prototype._mouseUp.call(this,t)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear(),this},_getHandle:function(t){return this.options.handle?!!e(t.target).closest(this.element.find(this.options.handle)).length:!0},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this.handleElement.addClass("ui-draggable-handle")},_removeHandleClassName:function(){this.handleElement.removeClass("ui-draggable-handle")},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper),n=s?e(i.helper.apply(this.element[0],[t])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return n.parents("body").length||n.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s&&n[0]===this.element[0]&&this._setPositionRelative(),n[0]===this.element[0]||/(fixed|absolute)/.test(n.css("position"))||n.css("position","absolute"),n},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_isRootNode:function(e){return/(html|body)/i.test(e.tagName)||e===this.document[0]},_getParentOffset:function(){var t=this.offsetParent.offset(),i=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==i&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var e=this.element.position(),t=this._isRootNode(this.scrollParent[0]);return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+(t?0:this.scrollParent.scrollTop()),left:e.left-(parseInt(this.helper.css("left"),10)||0)+(t?0:this.scrollParent.scrollLeft())}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,n=this.options,a=this.document[0];return this.relativeContainer=null,n.containment?"window"===n.containment?(this.containment=[e(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,e(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,e(window).scrollLeft()+e(window).width()-this.helperProportions.width-this.margins.left,e(window).scrollTop()+(e(window).height()||a.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):"document"===n.containment?(this.containment=[0,0,e(a).width()-this.helperProportions.width-this.margins.left,(e(a).height()||a.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):n.containment.constructor===Array?(this.containment=n.containment,void 0):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=e(n.containment),s=i[0],s&&(t=/(scroll|auto)/.test(i.css("overflow")),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(t?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(t?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=i),void 0):(this.containment=null,void 0) +},_convertPositionTo:function(e,t){t||(t=this.position);var i="absolute"===e?1:-1,s=this._isRootNode(this.scrollParent[0]);return{top:t.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:s?0:this.offset.scroll.top)*i,left:t.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:s?0:this.offset.scroll.left)*i}},_generatePosition:function(e,t){var i,s,n,a,o=this.options,r=this._isRootNode(this.scrollParent[0]),h=e.pageX,l=e.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),t&&(this.containment&&(this.relativeContainer?(s=this.relativeContainer.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,e.pageX-this.offset.click.lefti[2]&&(h=i[2]+this.offset.click.left),e.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),o.grid&&(n=o.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/o.grid[1])*o.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-o.grid[1]:n+o.grid[1]:n,a=o.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/o.grid[0])*o.grid[0]:this.originalPageX,h=i?a-this.offset.click.left>=i[0]||a-this.offset.click.left>i[2]?a:a-this.offset.click.left>=i[0]?a-o.grid[0]:a+o.grid[0]:a),"y"===o.axis&&(h=this.originalPageX),"x"===o.axis&&(l=this.originalPageY)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_normalizeRightBottom:function(){"y"!==this.options.axis&&"auto"!==this.helper.css("right")&&(this.helper.width(this.helper.width()),this.helper.css("right","auto")),"x"!==this.options.axis&&"auto"!==this.helper.css("bottom")&&(this.helper.height(this.helper.height()),this.helper.css("bottom","auto"))},_trigger:function(t,i,s){return s=s||this._uiHash(),e.ui.plugin.call(this,t,[i,s,this],!0),/^(drag|start|stop)/.test(t)&&(this.positionAbs=this._convertPositionTo("absolute"),s.offset=this.positionAbs),e.Widget.prototype._trigger.call(this,t,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),e.ui.plugin.add("draggable","connectToSortable",{start:function(t,i,s){var n=e.extend({},i,{item:s.element});s.sortables=[],e(s.options.connectToSortable).each(function(){var i=e(this).sortable("instance");i&&!i.options.disabled&&(s.sortables.push(i),i.refreshPositions(),i._trigger("activate",t,n))})},stop:function(t,i,s){var n=e.extend({},i,{item:s.element});s.cancelHelperRemoval=!1,e.each(s.sortables,function(){var e=this;e.isOver?(e.isOver=0,s.cancelHelperRemoval=!0,e.cancelHelperRemoval=!1,e._storedCSS={position:e.placeholder.css("position"),top:e.placeholder.css("top"),left:e.placeholder.css("left")},e._mouseStop(t),e.options.helper=e.options._helper):(e.cancelHelperRemoval=!0,e._trigger("deactivate",t,n))})},drag:function(t,i,s){e.each(s.sortables,function(){var n=!1,a=this;a.positionAbs=s.positionAbs,a.helperProportions=s.helperProportions,a.offset.click=s.offset.click,a._intersectsWith(a.containerCache)&&(n=!0,e.each(s.sortables,function(){return this.positionAbs=s.positionAbs,this.helperProportions=s.helperProportions,this.offset.click=s.offset.click,this!==a&&this._intersectsWith(this.containerCache)&&e.contains(a.element[0],this.element[0])&&(n=!1),n})),n?(a.isOver||(a.isOver=1,s._parent=i.helper.parent(),a.currentItem=i.helper.appendTo(a.element).data("ui-sortable-item",!0),a.options._helper=a.options.helper,a.options.helper=function(){return i.helper[0]},t.target=a.currentItem[0],a._mouseCapture(t,!0),a._mouseStart(t,!0,!0),a.offset.click.top=s.offset.click.top,a.offset.click.left=s.offset.click.left,a.offset.parent.left-=s.offset.parent.left-a.offset.parent.left,a.offset.parent.top-=s.offset.parent.top-a.offset.parent.top,s._trigger("toSortable",t),s.dropped=a.element,e.each(s.sortables,function(){this.refreshPositions()}),s.currentItem=s.element,a.fromOutside=s),a.currentItem&&(a._mouseDrag(t),i.position=a.position)):a.isOver&&(a.isOver=0,a.cancelHelperRemoval=!0,a.options._revert=a.options.revert,a.options.revert=!1,a._trigger("out",t,a._uiHash(a)),a._mouseStop(t,!0),a.options.revert=a.options._revert,a.options.helper=a.options._helper,a.placeholder&&a.placeholder.remove(),i.helper.appendTo(s._parent),s._refreshOffsets(t),i.position=s._generatePosition(t,!0),s._trigger("fromSortable",t),s.dropped=!1,e.each(s.sortables,function(){this.refreshPositions()}))})}}),e.ui.plugin.add("draggable","cursor",{start:function(t,i,s){var n=e("body"),a=s.options;n.css("cursor")&&(a._cursor=n.css("cursor")),n.css("cursor",a.cursor)},stop:function(t,i,s){var n=s.options;n._cursor&&e("body").css("cursor",n._cursor)}}),e.ui.plugin.add("draggable","opacity",{start:function(t,i,s){var n=e(i.helper),a=s.options;n.css("opacity")&&(a._opacity=n.css("opacity")),n.css("opacity",a.opacity)},stop:function(t,i,s){var n=s.options;n._opacity&&e(i.helper).css("opacity",n._opacity)}}),e.ui.plugin.add("draggable","scroll",{start:function(e,t,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(t,i,s){var n=s.options,a=!1,o=s.scrollParentNotHidden[0],r=s.document[0];o!==r&&"HTML"!==o.tagName?(n.axis&&"x"===n.axis||(s.overflowOffset.top+o.offsetHeight-t.pageY=0;c--)h=s.snapElements[c].left-s.margins.left,l=h+s.snapElements[c].width,u=s.snapElements[c].top-s.margins.top,d=u+s.snapElements[c].height,h-m>v||g>l+m||u-m>b||y>d+m||!e.contains(s.snapElements[c].item.ownerDocument,s.snapElements[c].item)?(s.snapElements[c].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,t,e.extend(s._uiHash(),{snapItem:s.snapElements[c].item})),s.snapElements[c].snapping=!1):("inner"!==f.snapMode&&(n=m>=Math.abs(u-b),a=m>=Math.abs(d-y),o=m>=Math.abs(h-v),r=m>=Math.abs(l-g),n&&(i.position.top=s._convertPositionTo("relative",{top:u-s.helperProportions.height,left:0}).top),a&&(i.position.top=s._convertPositionTo("relative",{top:d,left:0}).top),o&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h-s.helperProportions.width}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l}).left)),p=n||a||o||r,"outer"!==f.snapMode&&(n=m>=Math.abs(u-y),a=m>=Math.abs(d-b),o=m>=Math.abs(h-g),r=m>=Math.abs(l-v),n&&(i.position.top=s._convertPositionTo("relative",{top:u,left:0}).top),a&&(i.position.top=s._convertPositionTo("relative",{top:d-s.helperProportions.height,left:0}).top),o&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l-s.helperProportions.width}).left)),!s.snapElements[c].snapping&&(n||a||o||r||p)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,t,e.extend(s._uiHash(),{snapItem:s.snapElements[c].item})),s.snapElements[c].snapping=n||a||o||r||p)}}),e.ui.plugin.add("draggable","stack",{start:function(t,i,s){var n,a=s.options,o=e.makeArray(e(a.stack)).sort(function(t,i){return(parseInt(e(t).css("zIndex"),10)||0)-(parseInt(e(i).css("zIndex"),10)||0)});o.length&&(n=parseInt(e(o[0]).css("zIndex"),10)||0,e(o).each(function(t){e(this).css("zIndex",n+t)}),this.css("zIndex",n+o.length))}}),e.ui.plugin.add("draggable","zIndex",{start:function(t,i,s){var n=e(i.helper),a=s.options;n.css("zIndex")&&(a._zIndex=n.css("zIndex")),n.css("zIndex",a.zIndex)},stop:function(t,i,s){var n=s.options;n._zIndex&&e(i.helper).css("zIndex",n._zIndex)}}),e.ui.draggable,e.widget("ui.resizable",e.ui.mouse,{version:"1.11.4",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(e){return parseInt(e,10)||0},_isNumber:function(e){return!isNaN(parseInt(e,10))},_hasScroll:function(t,i){if("hidden"===e(t).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return t[s]>0?!0:(t[s]=1,n=t[s]>0,t[s]=0,n)},_create:function(){var t,i,s,n,a,o=this,r=this.options;if(this.element.addClass("ui-resizable"),e.extend(this,{_aspectRatio:!!r.aspectRatio,aspectRatio:r.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:r.helper||r.ghost||r.animate?r.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(e("
                  ").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=r.handles||(e(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=e(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),t=this.handles.split(","),this.handles={},i=0;t.length>i;i++)s=e.trim(t[i]),a="ui-resizable-"+s,n=e("
                  "),n.css({zIndex:r.zIndex}),"se"===s&&n.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[s]=".ui-resizable-"+s,this.element.append(n);this._renderAxis=function(t){var i,s,n,a;t=t||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=e(this.handles[i]),this._on(this.handles[i],{mousedown:o._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=e(this.handles[i],this.element),a=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),t.css(n,a),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.mouseover(function(){o.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),o.axis=n&&n[1]?n[1]:"se")}),r.autoHide&&(this._handles.hide(),e(this.element).addClass("ui-resizable-autohide").mouseenter(function(){r.disabled||(e(this).removeClass("ui-resizable-autohide"),o._handles.show())}).mouseleave(function(){r.disabled||o.resizing||(e(this).addClass("ui-resizable-autohide"),o._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var t,i=function(t){e(t).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),t=this.element,this.originalElement.css({position:t.css("position"),width:t.outerWidth(),height:t.outerHeight(),top:t.css("top"),left:t.css("left")}).insertAfter(t),t.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_mouseCapture:function(t){var i,s,n=!1;for(i in this.handles)s=e(this.handles[i])[0],(s===t.target||e.contains(s,t.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(t){var i,s,n,a=this.options,o=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),a.containment&&(i+=e(a.containment).scrollLeft()||0,s+=e(a.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:o.width(),height:o.height()},this.originalSize=this._helper?{width:o.outerWidth(),height:o.outerHeight()}:{width:o.width(),height:o.height()},this.sizeDiff={width:o.outerWidth()-o.width(),height:o.outerHeight()-o.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof a.aspectRatio?a.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=e(".ui-resizable-"+this.axis).css("cursor"),e("body").css("cursor","auto"===n?this.axis+"-resize":n),o.addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var i,s,n=this.originalMousePosition,a=this.axis,o=t.pageX-n.left||0,r=t.pageY-n.top||0,h=this._change[a];return this._updatePrevProperties(),h?(i=h.apply(this,[t,o,r]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(i=this._updateRatio(i,t)),i=this._respectSize(i,t),this._updateCache(i),this._propagate("resize",t),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),e.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(t){this.resizing=!1;var i,s,n,a,o,r,h,l=this.options,u=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:u.sizeDiff.height,a=s?0:u.sizeDiff.width,o={width:u.helper.width()-a,height:u.helper.height()-n},r=parseInt(u.element.css("left"),10)+(u.position.left-u.originalPosition.left)||null,h=parseInt(u.element.css("top"),10)+(u.position.top-u.originalPosition.top)||null,l.animate||this.element.css(e.extend(o,{top:h,left:r})),u.helper.height(u.size.height),u.helper.width(u.size.width),this._helper&&!l.animate&&this._proportionallyResize()),e("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var e={};return this.position.top!==this.prevPosition.top&&(e.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(e.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(e.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(e.height=this.size.height+"px"),this.helper.css(e),e},_updateVirtualBoundaries:function(e){var t,i,s,n,a,o=this.options;a={minWidth:this._isNumber(o.minWidth)?o.minWidth:0,maxWidth:this._isNumber(o.maxWidth)?o.maxWidth:1/0,minHeight:this._isNumber(o.minHeight)?o.minHeight:0,maxHeight:this._isNumber(o.maxHeight)?o.maxHeight:1/0},(this._aspectRatio||e)&&(t=a.minHeight*this.aspectRatio,s=a.minWidth/this.aspectRatio,i=a.maxHeight*this.aspectRatio,n=a.maxWidth/this.aspectRatio,t>a.minWidth&&(a.minWidth=t),s>a.minHeight&&(a.minHeight=s),a.maxWidth>i&&(a.maxWidth=i),a.maxHeight>n&&(a.maxHeight=n)),this._vBoundaries=a},_updateCache:function(e){this.offset=this.helper.offset(),this._isNumber(e.left)&&(this.position.left=e.left),this._isNumber(e.top)&&(this.position.top=e.top),this._isNumber(e.height)&&(this.size.height=e.height),this._isNumber(e.width)&&(this.size.width=e.width)},_updateRatio:function(e){var t=this.position,i=this.size,s=this.axis;return this._isNumber(e.height)?e.width=e.height*this.aspectRatio:this._isNumber(e.width)&&(e.height=e.width/this.aspectRatio),"sw"===s&&(e.left=t.left+(i.width-e.width),e.top=null),"nw"===s&&(e.top=t.top+(i.height-e.height),e.left=t.left+(i.width-e.width)),e},_respectSize:function(e){var t=this._vBoundaries,i=this.axis,s=this._isNumber(e.width)&&t.maxWidth&&t.maxWidthe.width,o=this._isNumber(e.height)&&t.minHeight&&t.minHeight>e.height,r=this.originalPosition.left+this.originalSize.width,h=this.position.top+this.size.height,l=/sw|nw|w/.test(i),u=/nw|ne|n/.test(i);return a&&(e.width=t.minWidth),o&&(e.height=t.minHeight),s&&(e.width=t.maxWidth),n&&(e.height=t.maxHeight),a&&l&&(e.left=r-t.minWidth),s&&l&&(e.left=r-t.maxWidth),o&&u&&(e.top=h-t.minHeight),n&&u&&(e.top=h-t.maxHeight),e.width||e.height||e.left||!e.top?e.width||e.height||e.top||!e.left||(e.left=null):e.top=null,e},_getPaddingPlusBorderDimensions:function(e){for(var t=0,i=[],s=[e.css("borderTopWidth"),e.css("borderRightWidth"),e.css("borderBottomWidth"),e.css("borderLeftWidth")],n=[e.css("paddingTop"),e.css("paddingRight"),e.css("paddingBottom"),e.css("paddingLeft")];4>t;t++)i[t]=parseInt(s[t],10)||0,i[t]+=parseInt(n[t],10)||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var e,t=0,i=this.helper||this.element;this._proportionallyResizeElements.length>t;t++)e=this._proportionallyResizeElements[t],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(e)),e.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var t=this.element,i=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||e("
                  "),this.helper.addClass(this._helper).css({width:this.element.outerWidth()-1,height:this.element.outerHeight()-1,position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(e,t){return{width:this.originalSize.width+t}},w:function(e,t){var i=this.originalSize,s=this.originalPosition;return{left:s.left+t,width:i.width-t}},n:function(e,t,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(e,t,i){return{height:this.originalSize.height+i}},se:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},sw:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,i,s]))},ne:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},nw:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,i,s]))}},_propagate:function(t,i){e.ui.plugin.call(this,t,[i,this.ui()]),"resize"!==t&&this._trigger(t,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),e.ui.plugin.add("resizable","animate",{stop:function(t){var i=e(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,a=n.length&&/textarea/i.test(n[0].nodeName),o=a&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=a?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-o},l=parseInt(i.element.css("left"),10)+(i.position.left-i.originalPosition.left)||null,u=parseInt(i.element.css("top"),10)+(i.position.top-i.originalPosition.top)||null;i.element.animate(e.extend(h,u&&l?{top:u,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseInt(i.element.css("width"),10),height:parseInt(i.element.css("height"),10),top:parseInt(i.element.css("top"),10),left:parseInt(i.element.css("left"),10)};n&&n.length&&e(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",t)}})}}),e.ui.plugin.add("resizable","containment",{start:function(){var t,i,s,n,a,o,r,h=e(this).resizable("instance"),l=h.options,u=h.element,d=l.containment,c=d instanceof e?d.get(0):/parent/.test(d)?u.parent().get(0):d;c&&(h.containerElement=e(c),/document/.test(d)||d===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}):(t=e(c),i=[],e(["Top","Right","Left","Bottom"]).each(function(e,s){i[e]=h._num(t.css("padding"+s))}),h.containerOffset=t.offset(),h.containerPosition=t.position(),h.containerSize={height:t.innerHeight()-i[3],width:t.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,a=h.containerSize.width,o=h._hasScroll(c,"left")?c.scrollWidth:a,r=h._hasScroll(c)?c.scrollHeight:n,h.parentData={element:c,left:s.left,top:s.top,width:o,height:r}))},resize:function(t){var i,s,n,a,o=e(this).resizable("instance"),r=o.options,h=o.containerOffset,l=o.position,u=o._aspectRatio||t.shiftKey,d={top:0,left:0},c=o.containerElement,p=!0;c[0]!==document&&/static/.test(c.css("position"))&&(d=h),l.left<(o._helper?h.left:0)&&(o.size.width=o.size.width+(o._helper?o.position.left-h.left:o.position.left-d.left),u&&(o.size.height=o.size.width/o.aspectRatio,p=!1),o.position.left=r.helper?h.left:0),l.top<(o._helper?h.top:0)&&(o.size.height=o.size.height+(o._helper?o.position.top-h.top:o.position.top),u&&(o.size.width=o.size.height*o.aspectRatio,p=!1),o.position.top=o._helper?h.top:0),n=o.containerElement.get(0)===o.element.parent().get(0),a=/relative|absolute/.test(o.containerElement.css("position")),n&&a?(o.offset.left=o.parentData.left+o.position.left,o.offset.top=o.parentData.top+o.position.top):(o.offset.left=o.element.offset().left,o.offset.top=o.element.offset().top),i=Math.abs(o.sizeDiff.width+(o._helper?o.offset.left-d.left:o.offset.left-h.left)),s=Math.abs(o.sizeDiff.height+(o._helper?o.offset.top-d.top:o.offset.top-h.top)),i+o.size.width>=o.parentData.width&&(o.size.width=o.parentData.width-i,u&&(o.size.height=o.size.width/o.aspectRatio,p=!1)),s+o.size.height>=o.parentData.height&&(o.size.height=o.parentData.height-s,u&&(o.size.width=o.size.height*o.aspectRatio,p=!1)),p||(o.position.left=o.prevPosition.left,o.position.top=o.prevPosition.top,o.size.width=o.prevSize.width,o.size.height=o.prevSize.height)},stop:function(){var t=e(this).resizable("instance"),i=t.options,s=t.containerOffset,n=t.containerPosition,a=t.containerElement,o=e(t.helper),r=o.offset(),h=o.outerWidth()-t.sizeDiff.width,l=o.outerHeight()-t.sizeDiff.height;t._helper&&!i.animate&&/relative/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l}),t._helper&&!i.animate&&/static/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),e.ui.plugin.add("resizable","alsoResize",{start:function(){var t=e(this).resizable("instance"),i=t.options;e(i.alsoResize).each(function(){var t=e(this);t.data("ui-resizable-alsoresize",{width:parseInt(t.width(),10),height:parseInt(t.height(),10),left:parseInt(t.css("left"),10),top:parseInt(t.css("top"),10)})})},resize:function(t,i){var s=e(this).resizable("instance"),n=s.options,a=s.originalSize,o=s.originalPosition,r={height:s.size.height-a.height||0,width:s.size.width-a.width||0,top:s.position.top-o.top||0,left:s.position.left-o.left||0};e(n.alsoResize).each(function(){var t=e(this),s=e(this).data("ui-resizable-alsoresize"),n={},a=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(a,function(e,t){var i=(s[t]||0)+(r[t]||0);i&&i>=0&&(n[t]=i||null)}),t.css(n)})},stop:function(){e(this).removeData("resizable-alsoresize")}}),e.ui.plugin.add("resizable","ghost",{start:function(){var t=e(this).resizable("instance"),i=t.options,s=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:s.height,width:s.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass("string"==typeof i.ghost?i.ghost:""),t.ghost.appendTo(t.helper)},resize:function(){var t=e(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=e(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),e.ui.plugin.add("resizable","grid",{resize:function(){var t,i=e(this).resizable("instance"),s=i.options,n=i.size,a=i.originalSize,o=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,u=h[1]||1,d=Math.round((n.width-a.width)/l)*l,c=Math.round((n.height-a.height)/u)*u,p=a.width+d,f=a.height+c,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,v=s.minWidth&&s.minWidth>p,y=s.minHeight&&s.minHeight>f;s.grid=h,v&&(p+=l),y&&(f+=u),m&&(p-=l),g&&(f-=u),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=o.top-c):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=o.left-d):((0>=f-u||0>=p-l)&&(t=i._getPaddingPlusBorderDimensions(this)),f-u>0?(i.size.height=f,i.position.top=o.top-c):(f=u-t.height,i.size.height=f,i.position.top=o.top+a.height-f),p-l>0?(i.size.width=p,i.position.left=o.left-d):(p=l-t.width,i.size.width=p,i.position.left=o.left+a.width-p))}}),e.ui.resizable,e.widget("ui.dialog",{version:"1.11.4",options:{appendTo:"body",autoOpen:!0,buttons:[],closeOnEscape:!0,closeText:"Close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(t){var i=e(this).css(t).offset().top;0>i&&e(this).css("top",t.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),this.options.title=this.options.title||this.originalTitle,this._createWrapper(),this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(this.uiDialog),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&e.fn.draggable&&this._makeDraggable(),this.options.resizable&&e.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var t=this.options.appendTo;return t&&(t.jquery||t.nodeType)?e(t):this.document.find(t||"body").eq(0)},_destroy:function(){var e,t=this.originalPosition;this._untrackInstance(),this._destroyOverlay(),this.element.removeUniqueId().removeClass("ui-dialog-content ui-widget-content").css(this.originalCss).detach(),this.uiDialog.stop(!0,!0).remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),e=t.parent.children().eq(t.index),e.length&&e[0]!==this.element[0]?e.before(this.element):t.parent.append(this.element)},widget:function(){return this.uiDialog},disable:e.noop,enable:e.noop,close:function(t){var i,s=this;if(this._isOpen&&this._trigger("beforeClose",t)!==!1){if(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),!this.opener.filter(":focusable").focus().length)try{i=this.document[0].activeElement,i&&"body"!==i.nodeName.toLowerCase()&&e(i).blur()}catch(n){}this._hide(this.uiDialog,this.options.hide,function(){s._trigger("close",t)})}},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(t,i){var s=!1,n=this.uiDialog.siblings(".ui-front:visible").map(function(){return+e(this).css("z-index")}).get(),a=Math.max.apply(null,n);return a>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",a+1),s=!0),s&&!i&&this._trigger("focus",t),s},open:function(){var t=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),void 0):(this._isOpen=!0,this.opener=e(this.document[0].activeElement),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){t._focusTabbable(),t._trigger("focus")}),this._makeFocusTarget(),this._trigger("open"),void 0)},_focusTabbable:function(){var e=this._focusedElement;e||(e=this.element.find("[autofocus]")),e.length||(e=this.element.find(":tabbable")),e.length||(e=this.uiDialogButtonPane.find(":tabbable")),e.length||(e=this.uiDialogTitlebarClose.filter(":tabbable")),e.length||(e=this.uiDialog),e.eq(0).focus()},_keepFocus:function(t){function i(){var t=this.document[0].activeElement,i=this.uiDialog[0]===t||e.contains(this.uiDialog[0],t);i||this._focusTabbable()}t.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=e("
                  ").addClass("ui-dialog ui-widget ui-widget-content ui-corner-all ui-front "+this.options.dialogClass).hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._on(this.uiDialog,{keydown:function(t){if(this.options.closeOnEscape&&!t.isDefaultPrevented()&&t.keyCode&&t.keyCode===e.ui.keyCode.ESCAPE)return t.preventDefault(),this.close(t),void 0; +if(t.keyCode===e.ui.keyCode.TAB&&!t.isDefaultPrevented()){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");t.target!==n[0]&&t.target!==this.uiDialog[0]||t.shiftKey?t.target!==s[0]&&t.target!==this.uiDialog[0]||!t.shiftKey||(this._delay(function(){n.focus()}),t.preventDefault()):(this._delay(function(){s.focus()}),t.preventDefault())}},mousedown:function(e){this._moveToTop(e)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var t;this.uiDialogTitlebar=e("
                  ").addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(this.uiDialog),this._on(this.uiDialogTitlebar,{mousedown:function(t){e(t.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.focus()}}),this.uiDialogTitlebarClose=e("").button({label:this.options.closeText,icons:{primary:"ui-icon-closethick"},text:!1}).addClass("ui-dialog-titlebar-close").appendTo(this.uiDialogTitlebar),this._on(this.uiDialogTitlebarClose,{click:function(e){e.preventDefault(),this.close(e)}}),t=e("").uniqueId().addClass("ui-dialog-title").prependTo(this.uiDialogTitlebar),this._title(t),this.uiDialog.attr({"aria-labelledby":t.attr("id")})},_title:function(e){this.options.title||e.html(" "),e.text(this.options.title)},_createButtonPane:function(){this.uiDialogButtonPane=e("
                  ").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),this.uiButtonSet=e("
                  ").addClass("ui-dialog-buttonset").appendTo(this.uiDialogButtonPane),this._createButtons()},_createButtons:function(){var t=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),e.isEmptyObject(i)||e.isArray(i)&&!i.length?(this.uiDialog.removeClass("ui-dialog-buttons"),void 0):(e.each(i,function(i,s){var n,a;s=e.isFunction(s)?{click:s,text:i}:s,s=e.extend({type:"button"},s),n=s.click,s.click=function(){n.apply(t.element[0],arguments)},a={icons:s.icons,text:s.showText},delete s.icons,delete s.showText,e("",s).button(a).appendTo(t.uiButtonSet)}),this.uiDialog.addClass("ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),void 0)},_makeDraggable:function(){function t(e){return{position:e.position,offset:e.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){e(this).addClass("ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,t(n))},drag:function(e,s){i._trigger("drag",e,t(s))},stop:function(n,a){var o=a.offset.left-i.document.scrollLeft(),r=a.offset.top-i.document.scrollTop();s.position={my:"left top",at:"left"+(o>=0?"+":"")+o+" "+"top"+(r>=0?"+":"")+r,of:i.window},e(this).removeClass("ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,t(a))}})},_makeResizable:function(){function t(e){return{originalPosition:e.originalPosition,originalSize:e.originalSize,position:e.position,size:e.size}}var i=this,s=this.options,n=s.resizable,a=this.uiDialog.css("position"),o="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:o,start:function(s,n){e(this).addClass("ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,t(n))},resize:function(e,s){i._trigger("resize",e,t(s))},stop:function(n,a){var o=i.uiDialog.offset(),r=o.left-i.document.scrollLeft(),h=o.top-i.document.scrollTop();s.height=i.uiDialog.height(),s.width=i.uiDialog.width(),s.position={my:"left top",at:"left"+(r>=0?"+":"")+r+" "+"top"+(h>=0?"+":"")+h,of:i.window},e(this).removeClass("ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,t(a))}}).css("position",a)},_trackFocus:function(){this._on(this.widget(),{focusin:function(t){this._makeFocusTarget(),this._focusedElement=e(t.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var t=this._trackingInstances(),i=e.inArray(this,t);-1!==i&&t.splice(i,1)},_trackingInstances:function(){var e=this.document.data("ui-dialog-instances");return e||(e=[],this.document.data("ui-dialog-instances",e)),e},_minHeight:function(){var e=this.options;return"auto"===e.height?e.minHeight:Math.min(e.minHeight,e.height)},_position:function(){var e=this.uiDialog.is(":visible");e||this.uiDialog.show(),this.uiDialog.position(this.options.position),e||this.uiDialog.hide()},_setOptions:function(t){var i=this,s=!1,n={};e.each(t,function(e,t){i._setOption(e,t),e in i.sizeRelatedOptions&&(s=!0),e in i.resizableRelatedOptions&&(n[e]=t)}),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",n)},_setOption:function(e,t){var i,s,n=this.uiDialog;"dialogClass"===e&&n.removeClass(this.options.dialogClass).addClass(t),"disabled"!==e&&(this._super(e,t),"appendTo"===e&&this.uiDialog.appendTo(this._appendTo()),"buttons"===e&&this._createButtons(),"closeText"===e&&this.uiDialogTitlebarClose.button({label:""+t}),"draggable"===e&&(i=n.is(":data(ui-draggable)"),i&&!t&&n.draggable("destroy"),!i&&t&&this._makeDraggable()),"position"===e&&this._position(),"resizable"===e&&(s=n.is(":data(ui-resizable)"),s&&!t&&n.resizable("destroy"),s&&"string"==typeof t&&n.resizable("option","handles",t),s||t===!1||this._makeResizable()),"title"===e&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var e,t,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),e=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),t=Math.max(0,s.minHeight-e),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-e):"none","auto"===s.height?this.element.css({minHeight:t,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-e)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var t=e(this);return e("
                  ").css({position:"absolute",width:t.outerWidth(),height:t.outerHeight()}).appendTo(t.parent()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(t){return e(t.target).closest(".ui-dialog").length?!0:!!e(t.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var t=!0;this._delay(function(){t=!1}),this.document.data("ui-dialog-overlays")||this._on(this.document,{focusin:function(e){t||this._allowInteraction(e)||(e.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=e("
                  ").addClass("ui-widget-overlay ui-front").appendTo(this._appendTo()),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1)}},_destroyOverlay:function(){if(this.options.modal&&this.overlay){var e=this.document.data("ui-dialog-overlays")-1;e?this.document.data("ui-dialog-overlays",e):this.document.unbind("focusin").removeData("ui-dialog-overlays"),this.overlay.remove(),this.overlay=null}}}),e.widget("ui.droppable",{version:"1.11.4",widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var t,i=this.options,s=i.accept;this.isover=!1,this.isout=!0,this.accept=e.isFunction(s)?s:function(e){return e.is(s)},this.proportions=function(){return arguments.length?(t=arguments[0],void 0):t?t:t={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}},this._addToManager(i.scope),i.addClasses&&this.element.addClass("ui-droppable")},_addToManager:function(t){e.ui.ddmanager.droppables[t]=e.ui.ddmanager.droppables[t]||[],e.ui.ddmanager.droppables[t].push(this)},_splice:function(e){for(var t=0;e.length>t;t++)e[t]===this&&e.splice(t,1)},_destroy:function(){var t=e.ui.ddmanager.droppables[this.options.scope];this._splice(t),this.element.removeClass("ui-droppable ui-droppable-disabled")},_setOption:function(t,i){if("accept"===t)this.accept=e.isFunction(i)?i:function(e){return e.is(i)};else if("scope"===t){var s=e.ui.ddmanager.droppables[this.options.scope];this._splice(s),this._addToManager(i)}this._super(t,i)},_activate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),i&&this._trigger("activate",t,this.ui(i))},_deactivate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),i&&this._trigger("deactivate",t,this.ui(i))},_over:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",t,this.ui(i)))},_out:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",t,this.ui(i)))},_drop:function(t,i){var s=i||e.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var i=e(this).droppable("instance");return i.options.greedy&&!i.options.disabled&&i.options.scope===s.options.scope&&i.accept.call(i.element[0],s.currentItem||s.element)&&e.ui.intersect(s,e.extend(i,{offset:i.element.offset()}),i.options.tolerance,t)?(n=!0,!1):void 0}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",t,this.ui(s)),this.element):!1):!1},ui:function(e){return{draggable:e.currentItem||e.element,helper:e.helper,position:e.position,offset:e.positionAbs}}}),e.ui.intersect=function(){function e(e,t,i){return e>=t&&t+i>e}return function(t,i,s,n){if(!i.offset)return!1;var a=(t.positionAbs||t.position.absolute).left+t.margins.left,o=(t.positionAbs||t.position.absolute).top+t.margins.top,r=a+t.helperProportions.width,h=o+t.helperProportions.height,l=i.offset.left,u=i.offset.top,d=l+i.proportions().width,c=u+i.proportions().height;switch(s){case"fit":return a>=l&&d>=r&&o>=u&&c>=h;case"intersect":return a+t.helperProportions.width/2>l&&d>r-t.helperProportions.width/2&&o+t.helperProportions.height/2>u&&c>h-t.helperProportions.height/2;case"pointer":return e(n.pageY,u,i.proportions().height)&&e(n.pageX,l,i.proportions().width);case"touch":return(o>=u&&c>=o||h>=u&&c>=h||u>o&&h>c)&&(a>=l&&d>=a||r>=l&&d>=r||l>a&&r>d);default:return!1}}}(),e.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(t,i){var s,n,a=e.ui.ddmanager.droppables[t.options.scope]||[],o=i?i.type:null,r=(t.currentItem||t.element).find(":data(ui-droppable)").addBack();e:for(s=0;a.length>s;s++)if(!(a[s].options.disabled||t&&!a[s].accept.call(a[s].element[0],t.currentItem||t.element))){for(n=0;r.length>n;n++)if(r[n]===a[s].element[0]){a[s].proportions().height=0;continue e}a[s].visible="none"!==a[s].element.css("display"),a[s].visible&&("mousedown"===o&&a[s]._activate.call(a[s],i),a[s].offset=a[s].element.offset(),a[s].proportions({width:a[s].element[0].offsetWidth,height:a[s].element[0].offsetHeight}))}},drop:function(t,i){var s=!1;return e.each((e.ui.ddmanager.droppables[t.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&e.ui.intersect(t,this,this.options.tolerance,i)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],t.currentItem||t.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(t,i){t.element.parentsUntil("body").bind("scroll.droppable",function(){t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)})},drag:function(t,i){t.options.refreshPositions&&e.ui.ddmanager.prepareOffsets(t,i),e.each(e.ui.ddmanager.droppables[t.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,a,o=e.ui.intersect(t,this,this.options.tolerance,i),r=!o&&this.isover?"isout":o&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,a=this.element.parents(":data(ui-droppable)").filter(function(){return e(this).droppable("instance").options.scope===n}),a.length&&(s=e(a[0]).droppable("instance"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(t,i){t.element.parentsUntil("body").unbind("scroll.droppable"),t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)}},e.ui.droppable;var y="ui-effects-",b=e;e.effects={effect:{}},function(e,t){function i(e,t,i){var s=d[t.type]||{};return null==e?i||!t.def?null:t.def:(e=s.floor?~~e:parseFloat(e),isNaN(e)?t.def:s.mod?(e+s.mod)%s.mod:0>e?0:e>s.max?s.max:e)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(e,a){var o,r=a.re.exec(i),h=r&&a.parse(r),l=a.space||"rgba";return h?(o=s[l](h),s[u[l].cache]=o[u[l].cache],n=s._rgba=o._rgba,!1):t}),n.length?("0,0,0,0"===n.join()&&e.extend(n,a.transparent),s):a[i]}function n(e,t,i){return i=(i+1)%1,1>6*i?e+6*(t-e)*i:1>2*i?t:2>3*i?e+6*(t-e)*(2/3-i):e}var a,o="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(e){return[e[1],e[2],e[3],e[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(e){return[2.55*e[1],2.55*e[2],2.55*e[3],e[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(e){return[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(e){return[parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(e){return[e[1],e[2]/100,e[3]/100,e[4]]}}],l=e.Color=function(t,i,s,n){return new e.Color.fn.parse(t,i,s,n)},u={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},d={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},c=l.support={},p=e("

                  ")[0],f=e.each;p.style.cssText="background-color:rgba(1,1,1,.5)",c.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(u,function(e,t){t.cache="_"+e,t.props.alpha={idx:3,type:"percent",def:1}}),l.fn=e.extend(l.prototype,{parse:function(n,o,r,h){if(n===t)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=e(n).css(o),o=t);var d=this,c=e.type(n),p=this._rgba=[];return o!==t&&(n=[n,o,r,h],c="array"),"string"===c?this.parse(s(n)||a._default):"array"===c?(f(u.rgba.props,function(e,t){p[t.idx]=i(n[t.idx],t)}),this):"object"===c?(n instanceof l?f(u,function(e,t){n[t.cache]&&(d[t.cache]=n[t.cache].slice())}):f(u,function(t,s){var a=s.cache;f(s.props,function(e,t){if(!d[a]&&s.to){if("alpha"===e||null==n[e])return;d[a]=s.to(d._rgba)}d[a][t.idx]=i(n[e],t,!0)}),d[a]&&0>e.inArray(null,d[a].slice(0,3))&&(d[a][3]=1,s.from&&(d._rgba=s.from(d[a])))}),this):t},is:function(e){var i=l(e),s=!0,n=this;return f(u,function(e,a){var o,r=i[a.cache];return r&&(o=n[a.cache]||a.to&&a.to(n._rgba)||[],f(a.props,function(e,i){return null!=r[i.idx]?s=r[i.idx]===o[i.idx]:t})),s}),s},_space:function(){var e=[],t=this;return f(u,function(i,s){t[s.cache]&&e.push(i)}),e.pop()},transition:function(e,t){var s=l(e),n=s._space(),a=u[n],o=0===this.alpha()?l("transparent"):this,r=o[a.cache]||a.to(o._rgba),h=r.slice();return s=s[a.cache],f(a.props,function(e,n){var a=n.idx,o=r[a],l=s[a],u=d[n.type]||{};null!==l&&(null===o?h[a]=l:(u.mod&&(l-o>u.mod/2?o+=u.mod:o-l>u.mod/2&&(o-=u.mod)),h[a]=i((l-o)*t+o,n)))}),this[n](h)},blend:function(t){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(t)._rgba;return l(e.map(i,function(e,t){return(1-s)*n[t]+s*e}))},toRgbaString:function(){var t="rgba(",i=e.map(this._rgba,function(e,t){return null==e?t>2?1:0:e});return 1===i[3]&&(i.pop(),t="rgb("),t+i.join()+")"},toHslaString:function(){var t="hsla(",i=e.map(this.hsla(),function(e,t){return null==e&&(e=t>2?1:0),t&&3>t&&(e=Math.round(100*e)+"%"),e});return 1===i[3]&&(i.pop(),t="hsl("),t+i.join()+")"},toHexString:function(t){var i=this._rgba.slice(),s=i.pop();return t&&i.push(~~(255*s)),"#"+e.map(i,function(e){return e=(e||0).toString(16),1===e.length?"0"+e:e}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,u.hsla.to=function(e){if(null==e[0]||null==e[1]||null==e[2])return[null,null,null,e[3]];var t,i,s=e[0]/255,n=e[1]/255,a=e[2]/255,o=e[3],r=Math.max(s,n,a),h=Math.min(s,n,a),l=r-h,u=r+h,d=.5*u;return t=h===r?0:s===r?60*(n-a)/l+360:n===r?60*(a-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=d?l/u:l/(2-u),[Math.round(t)%360,i,d,null==o?1:o]},u.hsla.from=function(e){if(null==e[0]||null==e[1]||null==e[2])return[null,null,null,e[3]];var t=e[0]/360,i=e[1],s=e[2],a=e[3],o=.5>=s?s*(1+i):s+i-s*i,r=2*s-o;return[Math.round(255*n(r,o,t+1/3)),Math.round(255*n(r,o,t)),Math.round(255*n(r,o,t-1/3)),a]},f(u,function(s,n){var a=n.props,o=n.cache,h=n.to,u=n.from;l.fn[s]=function(s){if(h&&!this[o]&&(this[o]=h(this._rgba)),s===t)return this[o].slice();var n,r=e.type(s),d="array"===r||"object"===r?s:arguments,c=this[o].slice();return f(a,function(e,t){var s=d["object"===r?e:t.idx];null==s&&(s=c[t.idx]),c[t.idx]=i(s,t)}),u?(n=l(u(c)),n[o]=c,n):l(c)},f(a,function(t,i){l.fn[t]||(l.fn[t]=function(n){var a,o=e.type(n),h="alpha"===t?this._hsla?"hsla":"rgba":s,l=this[h](),u=l[i.idx];return"undefined"===o?u:("function"===o&&(n=n.call(this,u),o=e.type(n)),null==n&&i.empty?this:("string"===o&&(a=r.exec(n),a&&(n=u+parseFloat(a[2])*("+"===a[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(t){var i=t.split(" ");f(i,function(t,i){e.cssHooks[i]={set:function(t,n){var a,o,r="";if("transparent"!==n&&("string"!==e.type(n)||(a=s(n)))){if(n=l(a||n),!c.rgba&&1!==n._rgba[3]){for(o="backgroundColor"===i?t.parentNode:t;(""===r||"transparent"===r)&&o&&o.style;)try{r=e.css(o,"backgroundColor"),o=o.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{t.style[i]=n}catch(h){}}},e.fx.step[i]=function(t){t.colorInit||(t.start=l(t.elem,i),t.end=l(t.end),t.colorInit=!0),e.cssHooks[i].set(t.elem,t.start.transition(t.end,t.pos))}})},l.hook(o),e.cssHooks.borderColor={expand:function(e){var t={};return f(["Top","Right","Bottom","Left"],function(i,s){t["border"+s+"Color"]=e}),t}},a=e.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(b),function(){function t(t){var i,s,n=t.ownerDocument.defaultView?t.ownerDocument.defaultView.getComputedStyle(t,null):t.currentStyle,a={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(a[e.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(a[i]=n[i]);return a}function i(t,i){var s,a,o={};for(s in i)a=i[s],t[s]!==a&&(n[s]||(e.fx.step[s]||!isNaN(parseFloat(a)))&&(o[s]=a));return o}var s=["add","remove","toggle"],n={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};e.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(t,i){e.fx.step[i]=function(e){("none"!==e.end&&!e.setAttr||1===e.pos&&!e.setAttr)&&(b.style(e.elem,i,e.end),e.setAttr=!0)}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e.effects.animateClass=function(n,a,o,r){var h=e.speed(a,o,r);return this.queue(function(){var a,o=e(this),r=o.attr("class")||"",l=h.children?o.find("*").addBack():o;l=l.map(function(){var i=e(this);return{el:i,start:t(this)}}),a=function(){e.each(s,function(e,t){n[t]&&o[t+"Class"](n[t])})},a(),l=l.map(function(){return this.end=t(this.el[0]),this.diff=i(this.start,this.end),this}),o.attr("class",r),l=l.map(function(){var t=this,i=e.Deferred(),s=e.extend({},h,{queue:!1,complete:function(){i.resolve(t)}});return this.el.animate(this.diff,s),i.promise()}),e.when.apply(e,l.get()).done(function(){a(),e.each(arguments,function(){var t=this.el;e.each(this.diff,function(e){t.css(e,"")})}),h.complete.call(o[0])})})},e.fn.extend({addClass:function(t){return function(i,s,n,a){return s?e.effects.animateClass.call(this,{add:i},s,n,a):t.apply(this,arguments)}}(e.fn.addClass),removeClass:function(t){return function(i,s,n,a){return arguments.length>1?e.effects.animateClass.call(this,{remove:i},s,n,a):t.apply(this,arguments)}}(e.fn.removeClass),toggleClass:function(t){return function(i,s,n,a,o){return"boolean"==typeof s||void 0===s?n?e.effects.animateClass.call(this,s?{add:i}:{remove:i},n,a,o):t.apply(this,arguments):e.effects.animateClass.call(this,{toggle:i},s,n,a)}}(e.fn.toggleClass),switchClass:function(t,i,s,n,a){return e.effects.animateClass.call(this,{add:i,remove:t},s,n,a)}})}(),function(){function t(t,i,s,n){return e.isPlainObject(t)&&(i=t,t=t.effect),t={effect:t},null==i&&(i={}),e.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||e.fx.speeds[i])&&(n=s,s=i,i={}),e.isFunction(s)&&(n=s,s=null),i&&e.extend(t,i),s=s||i.duration,t.duration=e.fx.off?0:"number"==typeof s?s:s in e.fx.speeds?e.fx.speeds[s]:e.fx.speeds._default,t.complete=n||i.complete,t}function i(t){return!t||"number"==typeof t||e.fx.speeds[t]?!0:"string"!=typeof t||e.effects.effect[t]?e.isFunction(t)?!0:"object"!=typeof t||t.effect?!1:!0:!0}e.extend(e.effects,{version:"1.11.4",save:function(e,t){for(var i=0;t.length>i;i++)null!==t[i]&&e.data(y+t[i],e[0].style[t[i]])},restore:function(e,t){var i,s;for(s=0;t.length>s;s++)null!==t[s]&&(i=e.data(y+t[s]),void 0===i&&(i=""),e.css(t[s],i))},setMode:function(e,t){return"toggle"===t&&(t=e.is(":hidden")?"show":"hide"),t},getBaseline:function(e,t){var i,s;switch(e[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=e[0]/t.height}switch(e[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=e[1]/t.width}return{x:s,y:i}},createWrapper:function(t){if(t.parent().is(".ui-effects-wrapper"))return t.parent();var i={width:t.outerWidth(!0),height:t.outerHeight(!0),"float":t.css("float")},s=e("

                  ").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:t.width(),height:t.height()},a=document.activeElement;try{a.id}catch(o){a=document.body}return t.wrap(s),(t[0]===a||e.contains(t[0],a))&&e(a).focus(),s=t.parent(),"static"===t.css("position")?(s.css({position:"relative"}),t.css({position:"relative"})):(e.extend(i,{position:t.css("position"),zIndex:t.css("z-index")}),e.each(["top","left","bottom","right"],function(e,s){i[s]=t.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),t.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),t.css(n),s.css(i).show()},removeWrapper:function(t){var i=document.activeElement;return t.parent().is(".ui-effects-wrapper")&&(t.parent().replaceWith(t),(t[0]===i||e.contains(t[0],i))&&e(i).focus()),t},setTransition:function(t,i,s,n){return n=n||{},e.each(i,function(e,i){var a=t.cssUnit(i);a[0]>0&&(n[i]=a[0]*s+a[1])}),n}}),e.fn.extend({effect:function(){function i(t){function i(){e.isFunction(a)&&a.call(n[0]),e.isFunction(t)&&t()}var n=e(this),a=s.complete,r=s.mode;(n.is(":hidden")?"hide"===r:"show"===r)?(n[r](),i()):o.call(n[0],s,i)}var s=t.apply(this,arguments),n=s.mode,a=s.queue,o=e.effects.effect[s.effect];return e.fx.off||!o?n?this[n](s.duration,s.complete):this.each(function(){s.complete&&s.complete.call(this)}):a===!1?this.each(i):this.queue(a||"fx",i)},show:function(e){return function(s){if(i(s))return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="show",this.effect.call(this,n)}}(e.fn.show),hide:function(e){return function(s){if(i(s))return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="hide",this.effect.call(this,n)}}(e.fn.hide),toggle:function(e){return function(s){if(i(s)||"boolean"==typeof s)return e.apply(this,arguments);var n=t.apply(this,arguments);return n.mode="toggle",this.effect.call(this,n)}}(e.fn.toggle),cssUnit:function(t){var i=this.css(t),s=[];return e.each(["em","px","%","pt"],function(e,t){i.indexOf(t)>0&&(s=[parseFloat(i),t])}),s}})}(),function(){var t={};e.each(["Quad","Cubic","Quart","Quint","Expo"],function(e,i){t[i]=function(t){return Math.pow(t,e+2)}}),e.extend(t,{Sine:function(e){return 1-Math.cos(e*Math.PI/2)},Circ:function(e){return 1-Math.sqrt(1-e*e)},Elastic:function(e){return 0===e||1===e?e:-Math.pow(2,8*(e-1))*Math.sin((80*(e-1)-7.5)*Math.PI/15)},Back:function(e){return e*e*(3*e-2)},Bounce:function(e){for(var t,i=4;((t=Math.pow(2,--i))-1)/11>e;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*t-2)/22-e,2)}}),e.each(t,function(t,i){e.easing["easeIn"+t]=i,e.easing["easeOut"+t]=function(e){return 1-i(1-e)},e.easing["easeInOut"+t]=function(e){return.5>e?i(2*e)/2:1-i(-2*e+2)/2}})}(),e.effects,e.effects.effect.blind=function(t,i){var s,n,a,o=e(this),r=/up|down|vertical/,h=/up|left|vertical|horizontal/,l=["position","top","bottom","left","right","height","width"],u=e.effects.setMode(o,t.mode||"hide"),d=t.direction||"up",c=r.test(d),p=c?"height":"width",f=c?"top":"left",m=h.test(d),g={},v="show"===u;o.parent().is(".ui-effects-wrapper")?e.effects.save(o.parent(),l):e.effects.save(o,l),o.show(),s=e.effects.createWrapper(o).css({overflow:"hidden"}),n=s[p](),a=parseFloat(s.css(f))||0,g[p]=v?n:0,m||(o.css(c?"bottom":"right",0).css(c?"top":"left","auto").css({position:"absolute"}),g[f]=v?a:n+a),v&&(s.css(p,0),m||s.css(f,a+n)),s.animate(g,{duration:t.duration,easing:t.easing,queue:!1,complete:function(){"hide"===u&&o.hide(),e.effects.restore(o,l),e.effects.removeWrapper(o),i()}})},e.effects.effect.bounce=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","height","width"],h=e.effects.setMode(o,t.mode||"effect"),l="hide"===h,u="show"===h,d=t.direction||"up",c=t.distance,p=t.times||5,f=2*p+(u||l?1:0),m=t.duration/f,g=t.easing,v="up"===d||"down"===d?"top":"left",y="up"===d||"left"===d,b=o.queue(),_=b.length;for((u||l)&&r.push("opacity"),e.effects.save(o,r),o.show(),e.effects.createWrapper(o),c||(c=o["top"===v?"outerHeight":"outerWidth"]()/3),u&&(a={opacity:1},a[v]=0,o.css("opacity",0).css(v,y?2*-c:2*c).animate(a,m,g)),l&&(c/=Math.pow(2,p-1)),a={},a[v]=0,s=0;p>s;s++)n={},n[v]=(y?"-=":"+=")+c,o.animate(n,m,g).animate(a,m,g),c=l?2*c:c/2;l&&(n={opacity:0},n[v]=(y?"-=":"+=")+c,o.animate(n,m,g)),o.queue(function(){l&&o.hide(),e.effects.restore(o,r),e.effects.removeWrapper(o),i()}),_>1&&b.splice.apply(b,[1,0].concat(b.splice(_,f+1))),o.dequeue()},e.effects.effect.clip=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","height","width"],h=e.effects.setMode(o,t.mode||"hide"),l="show"===h,u=t.direction||"vertical",d="vertical"===u,c=d?"height":"width",p=d?"top":"left",f={};e.effects.save(o,r),o.show(),s=e.effects.createWrapper(o).css({overflow:"hidden"}),n="IMG"===o[0].tagName?s:o,a=n[c](),l&&(n.css(c,0),n.css(p,a/2)),f[c]=l?a:0,f[p]=l?0:a/2,n.animate(f,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){l||o.hide(),e.effects.restore(o,r),e.effects.removeWrapper(o),i()}})},e.effects.effect.drop=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","opacity","height","width"],o=e.effects.setMode(n,t.mode||"hide"),r="show"===o,h=t.direction||"left",l="up"===h||"down"===h?"top":"left",u="up"===h||"left"===h?"pos":"neg",d={opacity:r?1:0};e.effects.save(n,a),n.show(),e.effects.createWrapper(n),s=t.distance||n["top"===l?"outerHeight":"outerWidth"](!0)/2,r&&n.css("opacity",0).css(l,"pos"===u?-s:s),d[l]=(r?"pos"===u?"+=":"-=":"pos"===u?"-=":"+=")+s,n.animate(d,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}})},e.effects.effect.explode=function(t,i){function s(){b.push(this),b.length===d*c&&n()}function n(){p.css({visibility:"visible"}),e(b).remove(),m||p.hide(),i()}var a,o,r,h,l,u,d=t.pieces?Math.round(Math.sqrt(t.pieces)):3,c=d,p=e(this),f=e.effects.setMode(p,t.mode||"hide"),m="show"===f,g=p.show().css("visibility","hidden").offset(),v=Math.ceil(p.outerWidth()/c),y=Math.ceil(p.outerHeight()/d),b=[];for(a=0;d>a;a++)for(h=g.top+a*y,u=a-(d-1)/2,o=0;c>o;o++)r=g.left+o*v,l=o-(c-1)/2,p.clone().appendTo("body").wrap("
                  ").css({position:"absolute",visibility:"visible",left:-o*v,top:-a*y}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:v,height:y,left:r+(m?l*v:0),top:h+(m?u*y:0),opacity:m?0:1}).animate({left:r+(m?0:l*v),top:h+(m?0:u*y),opacity:m?1:0},t.duration||500,t.easing,s)},e.effects.effect.fade=function(t,i){var s=e(this),n=e.effects.setMode(s,t.mode||"toggle");s.animate({opacity:n},{queue:!1,duration:t.duration,easing:t.easing,complete:i})},e.effects.effect.fold=function(t,i){var s,n,a=e(this),o=["position","top","bottom","left","right","height","width"],r=e.effects.setMode(a,t.mode||"hide"),h="show"===r,l="hide"===r,u=t.size||15,d=/([0-9]+)%/.exec(u),c=!!t.horizFirst,p=h!==c,f=p?["width","height"]:["height","width"],m=t.duration/2,g={},v={};e.effects.save(a,o),a.show(),s=e.effects.createWrapper(a).css({overflow:"hidden"}),n=p?[s.width(),s.height()]:[s.height(),s.width()],d&&(u=parseInt(d[1],10)/100*n[l?0:1]),h&&s.css(c?{height:0,width:u}:{height:u,width:0}),g[f[0]]=h?n[0]:u,v[f[1]]=h?n[1]:0,s.animate(g,m,t.easing).animate(v,m,t.easing,function(){l&&a.hide(),e.effects.restore(a,o),e.effects.removeWrapper(a),i()})},e.effects.effect.highlight=function(t,i){var s=e(this),n=["backgroundImage","backgroundColor","opacity"],a=e.effects.setMode(s,t.mode||"show"),o={backgroundColor:s.css("backgroundColor")};"hide"===a&&(o.opacity=0),e.effects.save(s,n),s.show().css({backgroundImage:"none",backgroundColor:t.color||"#ffff99"}).animate(o,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===a&&s.hide(),e.effects.restore(s,n),i()}})},e.effects.effect.size=function(t,i){var s,n,a,o=e(this),r=["position","top","bottom","left","right","width","height","overflow","opacity"],h=["position","top","bottom","left","right","overflow","opacity"],l=["width","height","overflow"],u=["fontSize"],d=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],c=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],p=e.effects.setMode(o,t.mode||"effect"),f=t.restore||"effect"!==p,m=t.scale||"both",g=t.origin||["middle","center"],v=o.css("position"),y=f?r:h,b={height:0,width:0,outerHeight:0,outerWidth:0};"show"===p&&o.show(),s={height:o.height(),width:o.width(),outerHeight:o.outerHeight(),outerWidth:o.outerWidth()},"toggle"===t.mode&&"show"===p?(o.from=t.to||b,o.to=t.from||s):(o.from=t.from||("show"===p?b:s),o.to=t.to||("hide"===p?b:s)),a={from:{y:o.from.height/s.height,x:o.from.width/s.width},to:{y:o.to.height/s.height,x:o.to.width/s.width}},("box"===m||"both"===m)&&(a.from.y!==a.to.y&&(y=y.concat(d),o.from=e.effects.setTransition(o,d,a.from.y,o.from),o.to=e.effects.setTransition(o,d,a.to.y,o.to)),a.from.x!==a.to.x&&(y=y.concat(c),o.from=e.effects.setTransition(o,c,a.from.x,o.from),o.to=e.effects.setTransition(o,c,a.to.x,o.to))),("content"===m||"both"===m)&&a.from.y!==a.to.y&&(y=y.concat(u).concat(l),o.from=e.effects.setTransition(o,u,a.from.y,o.from),o.to=e.effects.setTransition(o,u,a.to.y,o.to)),e.effects.save(o,y),o.show(),e.effects.createWrapper(o),o.css("overflow","hidden").css(o.from),g&&(n=e.effects.getBaseline(g,s),o.from.top=(s.outerHeight-o.outerHeight())*n.y,o.from.left=(s.outerWidth-o.outerWidth())*n.x,o.to.top=(s.outerHeight-o.to.outerHeight)*n.y,o.to.left=(s.outerWidth-o.to.outerWidth)*n.x),o.css(o.from),("content"===m||"both"===m)&&(d=d.concat(["marginTop","marginBottom"]).concat(u),c=c.concat(["marginLeft","marginRight"]),l=r.concat(d).concat(c),o.find("*[width]").each(function(){var i=e(this),s={height:i.height(),width:i.width(),outerHeight:i.outerHeight(),outerWidth:i.outerWidth()}; +f&&e.effects.save(i,l),i.from={height:s.height*a.from.y,width:s.width*a.from.x,outerHeight:s.outerHeight*a.from.y,outerWidth:s.outerWidth*a.from.x},i.to={height:s.height*a.to.y,width:s.width*a.to.x,outerHeight:s.height*a.to.y,outerWidth:s.width*a.to.x},a.from.y!==a.to.y&&(i.from=e.effects.setTransition(i,d,a.from.y,i.from),i.to=e.effects.setTransition(i,d,a.to.y,i.to)),a.from.x!==a.to.x&&(i.from=e.effects.setTransition(i,c,a.from.x,i.from),i.to=e.effects.setTransition(i,c,a.to.x,i.to)),i.css(i.from),i.animate(i.to,t.duration,t.easing,function(){f&&e.effects.restore(i,l)})})),o.animate(o.to,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){0===o.to.opacity&&o.css("opacity",o.from.opacity),"hide"===p&&o.hide(),e.effects.restore(o,y),f||("static"===v?o.css({position:"relative",top:o.to.top,left:o.to.left}):e.each(["top","left"],function(e,t){o.css(t,function(t,i){var s=parseInt(i,10),n=e?o.to.left:o.to.top;return"auto"===i?n+"px":s+n+"px"})})),e.effects.removeWrapper(o),i()}})},e.effects.effect.scale=function(t,i){var s=e(this),n=e.extend(!0,{},t),a=e.effects.setMode(s,t.mode||"effect"),o=parseInt(t.percent,10)||(0===parseInt(t.percent,10)?0:"hide"===a?0:100),r=t.direction||"both",h=t.origin,l={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()},u={y:"horizontal"!==r?o/100:1,x:"vertical"!==r?o/100:1};n.effect="size",n.queue=!1,n.complete=i,"effect"!==a&&(n.origin=h||["middle","center"],n.restore=!0),n.from=t.from||("show"===a?{height:0,width:0,outerHeight:0,outerWidth:0}:l),n.to={height:l.height*u.y,width:l.width*u.x,outerHeight:l.outerHeight*u.y,outerWidth:l.outerWidth*u.x},n.fade&&("show"===a&&(n.from.opacity=0,n.to.opacity=1),"hide"===a&&(n.from.opacity=1,n.to.opacity=0)),s.effect(n)},e.effects.effect.puff=function(t,i){var s=e(this),n=e.effects.setMode(s,t.mode||"hide"),a="hide"===n,o=parseInt(t.percent,10)||150,r=o/100,h={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()};e.extend(t,{effect:"scale",queue:!1,fade:!0,mode:n,complete:i,percent:a?o:100,from:a?h:{height:h.height*r,width:h.width*r,outerHeight:h.outerHeight*r,outerWidth:h.outerWidth*r}}),s.effect(t)},e.effects.effect.pulsate=function(t,i){var s,n=e(this),a=e.effects.setMode(n,t.mode||"show"),o="show"===a,r="hide"===a,h=o||"hide"===a,l=2*(t.times||5)+(h?1:0),u=t.duration/l,d=0,c=n.queue(),p=c.length;for((o||!n.is(":visible"))&&(n.css("opacity",0).show(),d=1),s=1;l>s;s++)n.animate({opacity:d},u,t.easing),d=1-d;n.animate({opacity:d},u,t.easing),n.queue(function(){r&&n.hide(),i()}),p>1&&c.splice.apply(c,[1,0].concat(c.splice(p,l+1))),n.dequeue()},e.effects.effect.shake=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","height","width"],o=e.effects.setMode(n,t.mode||"effect"),r=t.direction||"left",h=t.distance||20,l=t.times||3,u=2*l+1,d=Math.round(t.duration/u),c="up"===r||"down"===r?"top":"left",p="up"===r||"left"===r,f={},m={},g={},v=n.queue(),y=v.length;for(e.effects.save(n,a),n.show(),e.effects.createWrapper(n),f[c]=(p?"-=":"+=")+h,m[c]=(p?"+=":"-=")+2*h,g[c]=(p?"-=":"+=")+2*h,n.animate(f,d,t.easing),s=1;l>s;s++)n.animate(m,d,t.easing).animate(g,d,t.easing);n.animate(m,d,t.easing).animate(f,d/2,t.easing).queue(function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}),y>1&&v.splice.apply(v,[1,0].concat(v.splice(y,u+1))),n.dequeue()},e.effects.effect.slide=function(t,i){var s,n=e(this),a=["position","top","bottom","left","right","width","height"],o=e.effects.setMode(n,t.mode||"show"),r="show"===o,h=t.direction||"left",l="up"===h||"down"===h?"top":"left",u="up"===h||"left"===h,d={};e.effects.save(n,a),n.show(),s=t.distance||n["top"===l?"outerHeight":"outerWidth"](!0),e.effects.createWrapper(n).css({overflow:"hidden"}),r&&n.css(l,u?isNaN(s)?"-"+s:-s:s),d[l]=(r?u?"+=":"-=":u?"-=":"+=")+s,n.animate(d,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===o&&n.hide(),e.effects.restore(n,a),e.effects.removeWrapper(n),i()}})},e.effects.effect.transfer=function(t,i){var s=e(this),n=e(t.to),a="fixed"===n.css("position"),o=e("body"),r=a?o.scrollTop():0,h=a?o.scrollLeft():0,l=n.offset(),u={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},d=s.offset(),c=e("
                  ").appendTo(document.body).addClass(t.className).css({top:d.top-r,left:d.left-h,height:s.innerHeight(),width:s.innerWidth(),position:a?"fixed":"absolute"}).animate(u,t.duration,t.easing,function(){c.remove(),i()})},e.widget("ui.progressbar",{version:"1.11.4",options:{max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min}),this.valueDiv=e("
                  ").appendTo(this.element),this._refreshValue()},_destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove()},value:function(e){return void 0===e?this.options.value:(this.options.value=this._constrainedValue(e),this._refreshValue(),void 0)},_constrainedValue:function(e){return void 0===e&&(e=this.options.value),this.indeterminate=e===!1,"number"!=typeof e&&(e=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,e))},_setOptions:function(e){var t=e.value;delete e.value,this._super(e),this.options.value=this._constrainedValue(t),this._refreshValue()},_setOption:function(e,t){"max"===e&&(t=Math.max(this.min,t)),"disabled"===e&&this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this._super(e,t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var t=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||t>this.min).toggleClass("ui-corner-right",t===this.options.max).width(i.toFixed(0)+"%"),this.element.toggleClass("ui-progressbar-indeterminate",this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=e("
                  ").appendTo(this.valueDiv))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":t}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==t&&(this.oldValue=t,this._trigger("change")),t===this.options.max&&this._trigger("complete")}}),e.widget("ui.selectable",e.ui.mouse,{version:"1.11.4",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var t,i=this;this.element.addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){t=e(i.options.filter,i.element[0]),t.addClass("ui-selectee"),t.each(function(){var t=e(this),i=t.offset();e.data(this,"selectable-item",{element:this,$element:t,left:i.left,top:i.top,right:i.left+t.outerWidth(),bottom:i.top+t.outerHeight(),startselected:!1,selected:t.hasClass("ui-selected"),selecting:t.hasClass("ui-selecting"),unselecting:t.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=t.addClass("ui-selectee"),this._mouseInit(),this.helper=e("
                  ")},_destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled"),this._mouseDestroy()},_mouseStart:function(t){var i=this,s=this.options;this.opos=[t.pageX,t.pageY],this.options.disabled||(this.selectees=e(s.filter,this.element[0]),this._trigger("start",t),e(s.appendTo).append(this.helper),this.helper.css({left:t.pageX,top:t.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=e.data(this,"selectable-item");s.startselected=!0,t.metaKey||t.ctrlKey||(s.$element.removeClass("ui-selected"),s.selected=!1,s.$element.addClass("ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",t,{unselecting:s.element}))}),e(t.target).parents().addBack().each(function(){var s,n=e.data(this,"selectable-item");return n?(s=!t.metaKey&&!t.ctrlKey||!n.$element.hasClass("ui-selected"),n.$element.removeClass(s?"ui-unselecting":"ui-selected").addClass(s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",t,{selecting:n.element}):i._trigger("unselecting",t,{unselecting:n.element}),!1):void 0}))},_mouseDrag:function(t){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,a=this.opos[0],o=this.opos[1],r=t.pageX,h=t.pageY;return a>r&&(i=r,r=a,a=i),o>h&&(i=h,h=o,o=i),this.helper.css({left:a,top:o,width:r-a,height:h-o}),this.selectees.each(function(){var i=e.data(this,"selectable-item"),l=!1;i&&i.element!==s.element[0]&&("touch"===n.tolerance?l=!(i.left>r||a>i.right||i.top>h||o>i.bottom):"fit"===n.tolerance&&(l=i.left>a&&r>i.right&&i.top>o&&h>i.bottom),l?(i.selected&&(i.$element.removeClass("ui-selected"),i.selected=!1),i.unselecting&&(i.$element.removeClass("ui-unselecting"),i.unselecting=!1),i.selecting||(i.$element.addClass("ui-selecting"),i.selecting=!0,s._trigger("selecting",t,{selecting:i.element}))):(i.selecting&&((t.metaKey||t.ctrlKey)&&i.startselected?(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.$element.addClass("ui-selected"),i.selected=!0):(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.startselected&&(i.$element.addClass("ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",t,{unselecting:i.element}))),i.selected&&(t.metaKey||t.ctrlKey||i.startselected||(i.$element.removeClass("ui-selected"),i.selected=!1,i.$element.addClass("ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",t,{unselecting:i.element})))))}),!1}},_mouseStop:function(t){var i=this;return this.dragged=!1,e(".ui-unselecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",t,{unselected:s.element})}),e(".ui-selecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-selecting").addClass("ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",t,{selected:s.element})}),this._trigger("stop",t),this.helper.remove(),!1}}),e.widget("ui.selectmenu",{version:"1.11.4",defaultElement:"",widgetEventPrefix:"spin",options:{culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var t={},i=this.element;return e.each(["min","max","step"],function(e,s){var n=i.attr(s);void 0!==n&&n.length&&(t[s]=n)}),t},_events:{keydown:function(e){this._start(e)&&this._keydown(e)&&e.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",e),void 0)},mousewheel:function(e,t){if(t){if(!this.spinning&&!this._start(e))return!1;this._spin((t>0?1:-1)*this.options.step,e),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(e)},100),e.preventDefault()}},"mousedown .ui-spinner-button":function(t){function i(){var e=this.element[0]===this.document[0].activeElement;e||(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===this.document[0].activeElement?this.previous:this.element.val(),t.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(t)!==!1&&this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(t){return e(t.currentTarget).hasClass("ui-state-active")?this._start(t)===!1?!1:(this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_draw:function(){var e=this.uiSpinner=this.element.addClass("ui-spinner-input").attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml());this.element.attr("role","spinbutton"),this.buttons=e.find(".ui-spinner-button").attr("tabIndex",-1).button().removeClass("ui-corner-all"),this.buttons.height()>Math.ceil(.5*e.height())&&e.height()>0&&e.height(e.height()),this.options.disabled&&this.disable()},_keydown:function(t){var i=this.options,s=e.ui.keyCode;switch(t.keyCode){case s.UP:return this._repeat(null,1,t),!0;case s.DOWN:return this._repeat(null,-1,t),!0;case s.PAGE_UP:return this._repeat(null,i.page,t),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,t),!0}return!1},_uiSpinnerHtml:function(){return""},_buttonHtml:function(){return"▲"+""+""+"▼"+""},_start:function(e){return this.spinning||this._trigger("start",e)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(e,t,i){e=e||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,t,i)},e),this._spin(t*this.options.step,i)},_spin:function(e,t){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+e*this._increment(this.counter)),this.spinning&&this._trigger("spin",t,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(t){var i=this.options.incremental;return i?e.isFunction(i)?i(t):Math.floor(t*t*t/5e4-t*t/500+17*t/200+1):1},_precision:function(){var e=this._precisionOf(this.options.step);return null!==this.options.min&&(e=Math.max(e,this._precisionOf(this.options.min))),e},_precisionOf:function(e){var t=""+e,i=t.indexOf(".");return-1===i?0:t.length-i-1},_adjustValue:function(e){var t,i,s=this.options;return t=null!==s.min?s.min:0,i=e-t,i=Math.round(i/s.step)*s.step,e=t+i,e=parseFloat(e.toFixed(this._precision())),null!==s.max&&e>s.max?s.max:null!==s.min&&s.min>e?s.min:e},_stop:function(e){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",e))},_setOption:function(e,t){if("culture"===e||"numberFormat"===e){var i=this._parse(this.element.val());return this.options[e]=t,this.element.val(this._format(i)),void 0}("max"===e||"min"===e||"step"===e)&&"string"==typeof t&&(t=this._parse(t)),"icons"===e&&(this.buttons.first().find(".ui-icon").removeClass(this.options.icons.up).addClass(t.up),this.buttons.last().find(".ui-icon").removeClass(this.options.icons.down).addClass(t.down)),this._super(e,t),"disabled"===e&&(this.widget().toggleClass("ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable"))},_setOptions:h(function(e){this._super(e)}),_parse:function(e){return"string"==typeof e&&""!==e&&(e=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(e,10,this.options.culture):+e),""===e||isNaN(e)?null:e},_format:function(e){return""===e?"":window.Globalize&&this.options.numberFormat?Globalize.format(e,this.options.numberFormat,this.options.culture):e},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var e=this.value();return null===e?!1:e===this._adjustValue(e)},_value:function(e,t){var i;""!==e&&(i=this._parse(e),null!==i&&(t||(i=this._adjustValue(i)),e=this._format(i))),this.element.val(e),this._refresh()},_destroy:function(){this.element.removeClass("ui-spinner-input").prop("disabled",!1).removeAttr("autocomplete").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:h(function(e){this._stepUp(e)}),_stepUp:function(e){this._start()&&(this._spin((e||1)*this.options.step),this._stop())},stepDown:h(function(e){this._stepDown(e)}),_stepDown:function(e){this._start()&&(this._spin((e||1)*-this.options.step),this._stop())},pageUp:h(function(e){this._stepUp((e||1)*this.options.page)}),pageDown:h(function(e){this._stepDown((e||1)*this.options.page)}),value:function(e){return arguments.length?(h(this._value).call(this,e),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}}),e.widget("ui.tabs",{version:"1.11.4",delay:300,options:{active:null,collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var e=/#.*$/;return function(t){var i,s;t=t.cloneNode(!1),i=t.href.replace(e,""),s=location.href.replace(e,"");try{i=decodeURIComponent(i)}catch(n){}try{s=decodeURIComponent(s)}catch(n){}return t.hash.length>1&&i===s}}(),_create:function(){var t=this,i=this.options;this.running=!1,this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible",i.collapsible),this._processTabs(),i.active=this._initialActive(),e.isArray(i.disabled)&&(i.disabled=e.unique(i.disabled.concat(e.map(this.tabs.filter(".ui-state-disabled"),function(e){return t.tabs.index(e)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):e(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var t=this.options.active,i=this.options.collapsible,s=location.hash.substring(1);return null===t&&(s&&this.tabs.each(function(i,n){return e(n).attr("aria-controls")===s?(t=i,!1):void 0}),null===t&&(t=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===t||-1===t)&&(t=this.tabs.length?0:!1)),t!==!1&&(t=this.tabs.index(this.tabs.eq(t)),-1===t&&(t=i?!1:0)),!i&&t===!1&&this.anchors.length&&(t=0),t},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):e()}},_tabKeydown:function(t){var i=e(this.document[0].activeElement).closest("li"),s=this.tabs.index(i),n=!0;if(!this._handlePageNav(t)){switch(t.keyCode){case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:s++;break;case e.ui.keyCode.UP:case e.ui.keyCode.LEFT:n=!1,s--;break;case e.ui.keyCode.END:s=this.anchors.length-1;break;case e.ui.keyCode.HOME:s=0;break;case e.ui.keyCode.SPACE:return t.preventDefault(),clearTimeout(this.activating),this._activate(s),void 0;case e.ui.keyCode.ENTER:return t.preventDefault(),clearTimeout(this.activating),this._activate(s===this.options.active?!1:s),void 0;default:return}t.preventDefault(),clearTimeout(this.activating),s=this._focusNextTab(s,n),t.ctrlKey||t.metaKey||(i.attr("aria-selected","false"),this.tabs.eq(s).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",s)},this.delay))}},_panelKeydown:function(t){this._handlePageNav(t)||t.ctrlKey&&t.keyCode===e.ui.keyCode.UP&&(t.preventDefault(),this.active.focus())},_handlePageNav:function(t){return t.altKey&&t.keyCode===e.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):t.altKey&&t.keyCode===e.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(t,i){function s(){return t>n&&(t=0),0>t&&(t=n),t}for(var n=this.tabs.length-1;-1!==e.inArray(s(),this.options.disabled);)t=i?t+1:t-1;return t},_focusNextTab:function(e,t){return e=this._findNextTab(e,t),this.tabs.eq(e).focus(),e},_setOption:function(e,t){return"active"===e?(this._activate(t),void 0):"disabled"===e?(this._setupDisabled(t),void 0):(this._super(e,t),"collapsible"===e&&(this.element.toggleClass("ui-tabs-collapsible",t),t||this.options.active!==!1||this._activate(0)),"event"===e&&this._setupEvents(t),"heightStyle"===e&&this._setupHeightStyle(t),void 0)},_sanitizeSelector:function(e){return e?e.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var t=this.options,i=this.tablist.children(":has(a[href])");t.disabled=e.map(i.filter(".ui-state-disabled"),function(e){return i.index(e)}),this._processTabs(),t.active!==!1&&this.anchors.length?this.active.length&&!e.contains(this.tablist[0],this.active[0])?this.tabs.length===t.disabled.length?(t.active=!1,this.active=e()):this._activate(this._findNextTab(Math.max(0,t.active-1),!1)):t.active=this.tabs.index(this.active):(t.active=!1,this.active=e()),this._refresh()},_refresh:function(){this._setupDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.addClass("ui-tabs-active ui-state-active").attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var t=this,i=this.tabs,s=this.anchors,n=this.panels; +this.tablist=this._getList().addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").attr("role","tablist").delegate("> li","mousedown"+this.eventNamespace,function(t){e(this).is(".ui-state-disabled")&&t.preventDefault()}).delegate(".ui-tabs-anchor","focus"+this.eventNamespace,function(){e(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").addClass("ui-state-default ui-corner-top").attr({role:"tab",tabIndex:-1}),this.anchors=this.tabs.map(function(){return e("a",this)[0]}).addClass("ui-tabs-anchor").attr({role:"presentation",tabIndex:-1}),this.panels=e(),this.anchors.each(function(i,s){var n,a,o,r=e(s).uniqueId().attr("id"),h=e(s).closest("li"),l=h.attr("aria-controls");t._isLocal(s)?(n=s.hash,o=n.substring(1),a=t.element.find(t._sanitizeSelector(n))):(o=h.attr("aria-controls")||e({}).uniqueId()[0].id,n="#"+o,a=t.element.find(n),a.length||(a=t._createPanel(o),a.insertAfter(t.panels[i-1]||t.tablist)),a.attr("aria-live","polite")),a.length&&(t.panels=t.panels.add(a)),l&&h.data("ui-tabs-aria-controls",l),h.attr({"aria-controls":o,"aria-labelledby":r}),a.attr("aria-labelledby",r)}),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").attr("role","tabpanel"),i&&(this._off(i.not(this.tabs)),this._off(s.not(this.anchors)),this._off(n.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol,ul").eq(0)},_createPanel:function(t){return e("
                  ").attr("id",t).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)},_setupDisabled:function(t){e.isArray(t)&&(t.length?t.length===this.anchors.length&&(t=!0):t=!1);for(var i,s=0;i=this.tabs[s];s++)t===!0||-1!==e.inArray(s,t)?e(i).addClass("ui-state-disabled").attr("aria-disabled","true"):e(i).removeClass("ui-state-disabled").removeAttr("aria-disabled");this.options.disabled=t},_setupEvents:function(t){var i={};t&&e.each(t.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(e){e.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(t){var i,s=this.element.parent();"fill"===t?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var t=e(this),s=t.css("position");"absolute"!==s&&"fixed"!==s&&(i-=t.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=e(this).outerHeight(!0)}),this.panels.each(function(){e(this).height(Math.max(0,i-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):"auto"===t&&(i=0,this.panels.each(function(){i=Math.max(i,e(this).height("").height())}).height(i))},_eventHandler:function(t){var i=this.options,s=this.active,n=e(t.currentTarget),a=n.closest("li"),o=a[0]===s[0],r=o&&i.collapsible,h=r?e():this._getPanelForTab(a),l=s.length?this._getPanelForTab(s):e(),u={oldTab:s,oldPanel:l,newTab:r?e():a,newPanel:h};t.preventDefault(),a.hasClass("ui-state-disabled")||a.hasClass("ui-tabs-loading")||this.running||o&&!i.collapsible||this._trigger("beforeActivate",t,u)===!1||(i.active=r?!1:this.tabs.index(a),this.active=o?e():a,this.xhr&&this.xhr.abort(),l.length||h.length||e.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(a),t),this._toggle(t,u))},_toggle:function(t,i){function s(){a.running=!1,a._trigger("activate",t,i)}function n(){i.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),o.length&&a.options.show?a._show(o,a.options.show,s):(o.show(),s())}var a=this,o=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),n()}):(i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),r.hide(),n()),r.attr("aria-hidden","true"),i.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),o.length&&r.length?i.oldTab.attr("tabIndex",-1):o.length&&this.tabs.filter(function(){return 0===e(this).attr("tabIndex")}).attr("tabIndex",-1),o.attr("aria-hidden","false"),i.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(t){var i,s=this._findActive(t);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return t===!1?e():this.tabs.eq(t)},_getIndex:function(e){return"string"==typeof e&&(e=this.anchors.index(this.anchors.filter("[href$='"+e+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"),this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"),this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeUniqueId(),this.tablist.unbind(this.eventNamespace),this.tabs.add(this.panels).each(function(){e.data(this,"ui-tabs-destroy")?e(this).remove():e(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")}),this.tabs.each(function(){var t=e(this),i=t.data("ui-tabs-aria-controls");i?t.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):t.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(t){var i=this.options.disabled;i!==!1&&(void 0===t?i=!1:(t=this._getIndex(t),i=e.isArray(i)?e.map(i,function(e){return e!==t?e:null}):e.map(this.tabs,function(e,i){return i!==t?i:null})),this._setupDisabled(i))},disable:function(t){var i=this.options.disabled;if(i!==!0){if(void 0===t)i=!0;else{if(t=this._getIndex(t),-1!==e.inArray(t,i))return;i=e.isArray(i)?e.merge([t],i).sort():[t]}this._setupDisabled(i)}},load:function(t,i){t=this._getIndex(t);var s=this,n=this.tabs.eq(t),a=n.find(".ui-tabs-anchor"),o=this._getPanelForTab(n),r={tab:n,panel:o},h=function(e,t){"abort"===t&&s.panels.stop(!1,!0),n.removeClass("ui-tabs-loading"),o.removeAttr("aria-busy"),e===s.xhr&&delete s.xhr};this._isLocal(a[0])||(this.xhr=e.ajax(this._ajaxSettings(a,i,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(n.addClass("ui-tabs-loading"),o.attr("aria-busy","true"),this.xhr.done(function(e,t,n){setTimeout(function(){o.html(e),s._trigger("load",i,r),h(n,t)},1)}).fail(function(e,t){setTimeout(function(){h(e,t)},1)})))},_ajaxSettings:function(t,i,s){var n=this;return{url:t.attr("href"),beforeSend:function(t,a){return n._trigger("beforeLoad",i,e.extend({jqXHR:t,ajaxSettings:a},s))}}},_getPanelForTab:function(t){var i=e(t).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}}),e.widget("ui.tooltip",{version:"1.11.4",options:{content:function(){var t=e(this).attr("title")||"";return e("").text(t).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,tooltipClass:null,track:!1,close:null,open:null},_addDescribedBy:function(t,i){var s=(t.attr("aria-describedby")||"").split(/\s+/);s.push(i),t.data("ui-tooltip-id",i).attr("aria-describedby",e.trim(s.join(" ")))},_removeDescribedBy:function(t){var i=t.data("ui-tooltip-id"),s=(t.attr("aria-describedby")||"").split(/\s+/),n=e.inArray(i,s);-1!==n&&s.splice(n,1),t.removeData("ui-tooltip-id"),s=e.trim(s.join(" ")),s?t.attr("aria-describedby",s):t.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.options.disabled&&this._disable(),this.liveRegion=e("
                  ").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).addClass("ui-helper-hidden-accessible").appendTo(this.document[0].body)},_setOption:function(t,i){var s=this;return"disabled"===t?(this[i?"_disable":"_enable"](),this.options[t]=i,void 0):(this._super(t,i),"content"===t&&e.each(this.tooltips,function(e,t){s._updateContent(t.element)}),void 0)},_disable:function(){var t=this;e.each(this.tooltips,function(i,s){var n=e.Event("blur");n.target=n.currentTarget=s.element[0],t.close(n,!0)}),this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.is("[title]")&&t.data("ui-tooltip-title",t.attr("title")).removeAttr("title")})},_enable:function(){this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.data("ui-tooltip-title")&&t.attr("title",t.data("ui-tooltip-title"))})},open:function(t){var i=this,s=e(t?t.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),t&&"mouseover"===t.type&&s.parents().each(function(){var t,s=e(this);s.data("ui-tooltip-open")&&(t=e.Event("blur"),t.target=t.currentTarget=this,i.close(t,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._registerCloseHandlers(t,s),this._updateContent(s,t))},_updateContent:function(e,t){var i,s=this.options.content,n=this,a=t?t.type:null;return"string"==typeof s?this._open(t,e,s):(i=s.call(e[0],function(i){n._delay(function(){e.data("ui-tooltip-open")&&(t&&(t.type=a),this._open(t,e,i))})}),i&&this._open(t,e,i),void 0)},_open:function(t,i,s){function n(e){l.of=e,o.is(":hidden")||o.position(l)}var a,o,r,h,l=e.extend({},this.options.position);if(s){if(a=this._find(i))return a.tooltip.find(".ui-tooltip-content").html(s),void 0;i.is("[title]")&&(t&&"mouseover"===t.type?i.attr("title",""):i.removeAttr("title")),a=this._tooltip(i),o=a.tooltip,this._addDescribedBy(i,o.attr("id")),o.find(".ui-tooltip-content").html(s),this.liveRegion.children().hide(),s.clone?(h=s.clone(),h.removeAttr("id").find("[id]").removeAttr("id")):h=s,e("
                  ").html(h).appendTo(this.liveRegion),this.options.track&&t&&/^mouse/.test(t.type)?(this._on(this.document,{mousemove:n}),n(t)):o.position(e.extend({of:i},this.options.position)),o.hide(),this._show(o,this.options.show),this.options.show&&this.options.show.delay&&(r=this.delayedShow=setInterval(function(){o.is(":visible")&&(n(l.of),clearInterval(r))},e.fx.interval)),this._trigger("open",t,{tooltip:o})}},_registerCloseHandlers:function(t,i){var s={keyup:function(t){if(t.keyCode===e.ui.keyCode.ESCAPE){var s=e.Event(t);s.currentTarget=i[0],this.close(s,!0)}}};i[0]!==this.element[0]&&(s.remove=function(){this._removeTooltip(this._find(i).tooltip)}),t&&"mouseover"!==t.type||(s.mouseleave="close"),t&&"focusin"!==t.type||(s.focusout="close"),this._on(!0,i,s)},close:function(t){var i,s=this,n=e(t?t.currentTarget:this.element),a=this._find(n);return a?(i=a.tooltip,a.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&!n.attr("title")&&n.attr("title",n.data("ui-tooltip-title")),this._removeDescribedBy(n),a.hiding=!0,i.stop(!0),this._hide(i,this.options.hide,function(){s._removeTooltip(e(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),t&&"mouseleave"===t.type&&e.each(this.parents,function(t,i){e(i.element).attr("title",i.title),delete s.parents[t]}),a.closing=!0,this._trigger("close",t,{tooltip:i}),a.hiding||(a.closing=!1)),void 0):(n.removeData("ui-tooltip-open"),void 0)},_tooltip:function(t){var i=e("
                  ").attr("role","tooltip").addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content "+(this.options.tooltipClass||"")),s=i.uniqueId().attr("id");return e("
                  ").addClass("ui-tooltip-content").appendTo(i),i.appendTo(this.document[0].body),this.tooltips[s]={element:t,tooltip:i}},_find:function(e){var t=e.data("ui-tooltip-id");return t?this.tooltips[t]:null},_removeTooltip:function(e){e.remove(),delete this.tooltips[e.attr("id")]},_destroy:function(){var t=this;e.each(this.tooltips,function(i,s){var n=e.Event("blur"),a=s.element;n.target=n.currentTarget=a[0],t.close(n,!0),e("#"+i).remove(),a.data("ui-tooltip-title")&&(a.attr("title")||a.attr("title",a.data("ui-tooltip-title")),a.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}})}); \ No newline at end of file diff --git a/docroot/sites/all/themes/libraryzurb_teen/js/scripts.js b/docroot/sites/all/themes/libraryzurb_teen/js/scripts.js new file mode 100644 index 00000000..29a9bd5c --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/js/scripts.js @@ -0,0 +1,421 @@ +(function ($, Drupal) { + + // This fuction adds a class to phone number links on small screens. We use + // this class to style phone number links as buttons on small screens. + Drupal.behaviors.libraryzurbPhoneNumberLinksOnMobile = { + attach: function(context, settings) { + + $(':checkbox').on('change',function(){ + var th = $(this), name = th.prop('class'); + if(th.is(':checked')){ + $(':checkbox[class="' + name + '"]').not($(this)).prop('checked',false); + } + }); + // Get width of browser viewport. **Note:** The value we check against + // should probably match the value set for `$topbar-breakpoint` in + // libraryzurb/scss/_variables.scss. + var windowWidth = $( window ).width(); + if ( windowWidth < 769 ) { + $( 'a[href^="tel"]' ).addClass( 'button' ); + } + if ( windowWidth >= 769 ) { + $( 'a[href^="tel"]' ).removeClass( 'button' ); + } + } + }; + +})(jQuery, Drupal); + + + + + +jQuery( document ).ready(function() { + /**interchanging the position of divs in progress page at mobile screen and tablet screen**/ + var windowWidth = jQuery( window ).width(); + if (windowWidth < 940) { + jQuery(".section-progress .main .block-auto-role-allocation").insertAfter(".section-progress .main .progress-calendar"); + jQuery(".section-progress .main .block-views").insertAfter(".section-progress .main .progress-calendar"); + } + /**jquery for hamburger button in mobile screen**/ + jQuery('.mobile-header button').click(function(){ + jQuery('.mobile-header .block-private-msg-custom').toggle(); + }); + + + /* jQuery for homepage book slider */ + jQuery(".blslider2.slide").hide(); + jQuery(".blslider3.slide").hide(); + jQuery(".blslider1").show(); + + jQuery('input[type="radio"]').click(function(){ + if(jQuery(this).attr("value")=="blslider1"){ + jQuery(".slide").not(".blslider1").hide(); + jQuery(".blslider1.slide").show(); + + } + if(jQuery(this).attr("value")=="blslider2"){ + jQuery(".slide").not(".blslider2").hide(); + jQuery(".blslider2.slide").show(); + } + if(jQuery(this).attr("value")=="blslider3"){ + jQuery(".slide").not(".blslider3").hide(); + jQuery(".blslider3.slide").show(); + } + + }); + + + /* Jquery for script for raffle entry checkbox */ + + jQuery( ".active_raffle" ).click(function() { + var location = window.location; + var baseUrl1 = location.protocol + "//" + location.host + '/raffle_pro'; + + jQuery.ajax({ + + //url: 'http://localhost/playatyourlibrary/docroot/raffle_pro', + url: baseUrl1, + success: function(res){ + //alert(res); + jQuery('.raffle-filter-form').html(res); + }, + error: function(jqXHR, data, error){ + // console.log(jqXHR); + // console.log(data); + // console.log(error); + } + }); + + + }); + + /**jquery for removing header and footer from lightbox**/ + jQuery('#lightbox .l-header').hide(); + jQuery('#lightbox .post-footer').hide(); + /**jquery for new msg**/ + jQuery('.msg:has(.new)').addClass('newclass'); + /**jquery for swap divs in register page***/ + div1 = jQuery('#edit-profile-main-field-receive-notifications .form-radios'); + div2 = jQuery('#edit-profile-main-field-receive-notifications .description'); + + tdiv1 = div1.clone(); + tdiv2 = div2.clone(); + +if(!div2.is(':empty')){ + div1.replaceWith(tdiv2); + div2.replaceWith(tdiv1); + + tdiv1.addClass("replaced"); +} + /* jquery for print calendar */ + + jQuery( "#print_button" ).click(function() { + var contant = jQuery(".main"); + var inner_content = contant.html(); + + var WinPrint = window.open('', '', 'letf=0,top=0,width=400,height=400,toolbar=0,scrollbars=0,status=0'); + WinPrint.document.write(inner_content); + WinPrint.focus(); + WinPrint.print(); + WinPrint.close(); + }); + + var proStart = Drupal.settings.private_msg_custom.proStart; + var start_string = proStart.split('-'); + var pro_start_date = parseInt(start_string[0] + start_string[1] + start_string[2]); + + var proEnd = Drupal.settings.private_msg_custom.proEnd; + var end_string = proEnd.split('-'); + var pro_end_date = parseInt(end_string[0] + end_string[1] + end_string[2]); + + var now = new Date(jQuery.now()); + var time_strings = now.toJSON().slice(0, 10); + time_strings = time_strings.split('-'); + var now_time_strings = parseInt(time_strings[0] + time_strings[1] + time_strings[2]); + + + + if((now_time_strings >= pro_start_date) && now_time_strings <= pro_end_date) { + //console.log("running"); + jQuery('.view-calendar-sticker .view-content .views-field-field-sticker-calendar-image .field-content').each(function () { + + // create an Event Object (http://arshaw.com/fullcalendar/docs/event_data/Event_Object/) + // it doesn't need to have a start or end + var eventObject = { + title: jQuery.trim(jQuery(this).html()) // use the element's text as the event title + }; + + // store the Event Object in the DOM element so we can get to it later + jQuery(this).data('eventObject', eventObject); + + // make the event draggable using jQuery UI + jQuery(this).draggable({ + zIndex: 999, + revert: true, // will cause the event to go back to its + revertDuration: 0 // original position after the drag + }); + + }); + + } + + + + + + jQuery('#calendar').fullCalendar({ + + editable: true, + droppable: true, // this allows things to be dropped onto the calendar !!! + + drop: function (date, allDay) { + var currentDate = new Date(jQuery.now()); + var time_string = currentDate.toJSON().slice(0, 10); + time_string = time_string.split('-'); + time_string = parseInt(time_string[0] + time_string[1] + time_string[2]); + //console.log(time_string); return false; + // this function is called when something is dropped + // var count = jQuery(".fc-event-container").children('div').length; + //alert(count); + // retrieve the dropped element's stored Event Object + var originalEventObject = jQuery(this).data(('eventObject')); + + // console.log("original"); + // console.log(originalEventObject); + + // we need to copy it, so that multiple events don't have a reference to the same object + var copiedEventObject = jQuery.extend({}, originalEventObject); + copiedEventObject.description = copiedEventObject.title; + var calender_img = copiedEventObject.title; + var expl_img = calender_img.split("src"); + var expl_img1 = expl_img[1].split("//"); + var expl_img2 = expl_img1[1].split("?"); + var expl_img3 = expl_img2[0].split("/"); + //var image_name = expl_img3[9]; + var image_name = expl_img3[7]; + + + console.log(copiedEventObject.title); + //console.log(copiedEventObject); + + // assign it the date that was reported + copiedEventObject.start = date; + var event_date = copiedEventObject.start; + event_date = event_date.toJSON().slice(0, 10); + event_date = event_date.split('-'); + event_date = parseInt(event_date[0] + event_date[1] + event_date[2]); + + //console.log(copiedEventObject.start); + copiedEventObject.allDay = allDay; + + // render the event on the calendar + // the last `true` argument determines if the event "sticks" (http://arshaw.com/fullcalendar/docs/event_rendering/renderEvent/) + jQuery('#calendar').fullCalendar('renderEvent', copiedEventObject, true); + + // is the "remove after drop" checkbox checked? + if (jQuery('#drop-remove').is(':checked')) { + // if so, remove the element from the "Draggable Events" list + jQuery(this).remove(); + } + + var loc = window.location; + var baseUrl = loc.protocol + "//" + loc.host + '/calendar'; + + var currentUser = Drupal.settings.auto_role_allocation.currentUser; + if(time_string > event_date) { + jQuery.ajax({ + + //url: 'http://localhost/playatyourlibrary/docroot/calendar', + url: baseUrl, + async: false, + type: 'post', + data: 'image='+image_name+'&date='+copiedEventObject.start+'&user_id='+currentUser, + success: function(res){ //alert(res); + if (res) { + window.location.reload(true); + } else { + alert ('test'); + } + }, + error: function(jqXHR, data, error){ + // console.log(jqXHR); + // console.log(data); + // console.log(error); + } + }); + } + + }, + + header: { + left: 'prev,next today', + center: 'title', + right: 'month,agendaWeek,agendaDay' + }, + // eventRender: function (event, element, view) { + // element.bind('click', function () { + // var day = (jQuery.fullCalendar.formatDate(event.start, 'dd')); + // var month = (jQuery.fullCalendar.formatDate(event.start, 'MM')); + // var year = (jQuery.fullCalendar.formatDate(event.start, 'yyyy')); + // alert(year + '-' + month + '-' + day); + // }); + // }, + editable: true, + eventRender: function(event, element) { + element.description = element[0].textContent; + // $('#mycalendar').fullCalendar('renderEvent', event); + // console.log('Element:'); + //console.log(element); + return element.description; + }, + eventDrop: function( event, dayDelta, minuteDelta, allDay, revertFunc, jsEvent, ui, view ) { + var currentDateInternal = new Date(jQuery.now()); + var time_string1 = currentDateInternal.toJSON().slice(0, 10); + time_string1 = time_string1.split('-'); + time_string1 = parseInt(time_string1[0] + time_string1[1] + time_string1[2]); + + + var event_date1 = event.start; + event_date1 = event_date1.toJSON().slice(0, 10); + event_date1 = event_date1.split('-'); + event_date1 = parseInt(event_date1[0] + event_date1[1] + event_date1[2]); + + var currentUser = Drupal.settings.auto_role_allocation.currentUser; + console.log(event.title); + var event_title = event.title; + var event_title1 = event_title.split('
                  '); + var event_title2 = event_title1[1].split('
                  '); + var event_title3 = event_title2[0].split('data-id'); + var event_title4 = event_title3[1].split('='); + var event_title5 = event_title4[1].split('"'); + var final_image_id = event_title5[1]; + + var event_tit = event.title; + var event_tit1 = event_tit.split('
                  '); + var event_tit2 = event_tit1[1].split('src'); + var event_tit3 = event_tit2[1].split('='); + var event_tit4 = event_tit3[1].split('"'); + var event_tit5 = event_tit4[1].split('/'); + var image_path = event_tit5[6]; + + var loc = window.location; + var baseUrl = loc.protocol + "//" + loc.host + '/calendar'; + if(time_string1 > event_date1) { + jQuery.ajax({ + //url: 'http://localhost/playatyourlibrary/docroot/calendar', + url: baseUrl, + type: 'post', + dataType: 'json', + data: { + id: final_image_id, + image: image_path, + date: event.start, + user_id: currentUser + }, + success: function(res){ + window.location.reload(true); + console.log("data:"); + console.log(res); + //alert("data"); + }, + error: function(jqXHR, data, error){ + //console.log(jqXHR); + //console.log(data); + //console.log(error); + } + }); + } + + + }, + events: eventsList + +}); + +}); + + + + + +jQuery(document).on('click','#raffle_form_button',function() { + + + + var location = window.location; + var baseUrl1 = location.protocol + "//" + location.host + '/raffle_user_list'; + + var raffleId = jQuery("input[name='raffle']:checked").attr('raffle_id'); + + + var reward_id = jQuery("input[name='raffle']:checked").val(); + var school = jQuery('#edit-school').val(); + var organization = jQuery('#edit-organization').val(); + var library_branch = jQuery('#edit-library-branch').val(); + var grade = jQuery('#edit-grade').val(); + + jQuery.ajax({ + + //url: 'http://localhost/playatyourlibrary/docroot/raffle_user_list', + url: baseUrl1, + async: false, + type: 'post', + data: 'active_raffle_id='+raffleId+'&school='+school+'&organization='+organization+'&library_branch='+library_branch+'&grade='+grade+'&reward_id='+reward_id, + success: function(res){ + //alert(res); + jQuery('.raffle-entry-user-list').html(res); + }, + error: function(jqXHR, data, error){ + // console.log(jqXHR); + // console.log(data); + // console.log(error); + } + }); + + + + }); + +jQuery(document).on('click','#raffle-entry-list-btn',function() { + + var location = window.location; + var baseUrl1 = location.protocol + "//" + location.host + '/raffle_winner'; + var raffleUid = ''; + jQuery( "input:checkbox:checked" ).each(function() { + var uid = jQuery( this ).attr( "id" ); + var uid_exp = uid.split('_'); + if (raffleUid == '') { + raffleUid += uid_exp[1]; + } else { + raffleUid += ',' + uid_exp[1]; + } + }); + + if (raffleUid == '') { + alert('Please select user for Raffle Winner.'); + return false; + } + + var reward_id = jQuery('#raffle_reward_id').val(); + + jQuery.ajax({ + //url: 'http://localhost/playatyourlibrary/docroot/raffle_winner', + url: baseUrl1, + type: 'post', + data: 'active_raffle_uid='+raffleUid+'&reward_id='+reward_id, + success: function(res){ + url = "admin/content/dashboard?=true"; + //alert(res); + window.location.reload(true); + window.location.href = url; + alert("Thank you Raffle winner has been selected"); + }, + error: function(jqXHR, data, error){ + } + }); + + + +}); + diff --git a/docroot/sites/all/themes/libraryzurb_teen/js/vendor/custom.modernizr.js b/docroot/sites/all/themes/libraryzurb_teen/js/vendor/custom.modernizr.js new file mode 100644 index 00000000..4eb3d065 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/js/vendor/custom.modernizr.js @@ -0,0 +1,4 @@ +/* Modernizr 2.6.2 (Custom Build) | MIT & BSD + * Build: http://modernizr.com/download/#-inlinesvg-svg-svgclippaths-touch-shiv-mq-cssclasses-teststyles-prefixes-ie8compat-load + */ +;window.Modernizr=function(a,b,c){function y(a){j.cssText=a}function z(a,b){return y(m.join(a+";")+(b||""))}function A(a,b){return typeof a===b}function B(a,b){return!!~(""+a).indexOf(b)}function C(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:A(f,"function")?f.bind(d||b):f}return!1}var d="2.6.2",e={},f=!0,g=b.documentElement,h="modernizr",i=b.createElement(h),j=i.style,k,l={}.toString,m=" -webkit- -moz- -o- -ms- ".split(" "),n={svg:"http://www.w3.org/2000/svg"},o={},p={},q={},r=[],s=r.slice,t,u=function(a,c,d,e){var f,i,j,k,l=b.createElement("div"),m=b.body,n=m||b.createElement("body");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:h+(d+1),l.appendChild(j);return f=["­",'"].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},v=function(b){var c=a.matchMedia||a.msMatchMedia;if(c)return c(b).matches;var d;return u("@media "+b+" { #"+h+" { position: absolute; } }",function(b){d=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle)["position"]=="absolute"}),d},w={}.hasOwnProperty,x;!A(w,"undefined")&&!A(w.call,"undefined")?x=function(a,b){return w.call(a,b)}:x=function(a,b){return b in a&&A(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=s.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(s.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(s.call(arguments)))};return e}),o.touch=function(){var c;return"ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch?c=!0:u(["@media (",m.join("touch-enabled),("),h,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=a.offsetTop===9}),c},o.svg=function(){return!!b.createElementNS&&!!b.createElementNS(n.svg,"svg").createSVGRect},o.inlinesvg=function(){var a=b.createElement("div");return a.innerHTML="",(a.firstChild&&a.firstChild.namespaceURI)==n.svg},o.svgclippaths=function(){return!!b.createElementNS&&/SVGClipPath/.test(l.call(b.createElementNS(n.svg,"clipPath")))};for(var D in o)x(o,D)&&(t=D.toLowerCase(),e[t]=o[D](),r.push((e[t]?"":"no-")+t));return e.addTest=function(a,b){if(typeof a=="object")for(var d in a)x(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},y(""),i=k=null,function(a,b){function k(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function l(){var a=r.elements;return typeof a=="string"?a.split(" "):a}function m(a){var b=i[a[g]];return b||(b={},h++,a[g]=h,i[h]=b),b}function n(a,c,f){c||(c=b);if(j)return c.createElement(a);f||(f=m(c));var g;return f.cache[a]?g=f.cache[a].cloneNode():e.test(a)?g=(f.cache[a]=f.createElem(a)).cloneNode():g=f.createElem(a),g.canHaveChildren&&!d.test(a)?f.frag.appendChild(g):g}function o(a,c){a||(a=b);if(j)return a.createDocumentFragment();c=c||m(a);var d=c.frag.cloneNode(),e=0,f=l(),g=f.length;for(;e",f="hidden"in a,j=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){f=!0,j=!0}})();var r={elements:c.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivCSS:c.shivCSS!==!1,supportsUnknownElements:j,shivMethods:c.shivMethods!==!1,type:"default",shivDocument:q,createElement:n,createDocumentFragment:o};a.html5=r,q(b)}(this,b),e._version=d,e._prefixes=m,e.mq=v,e.testStyles=u,g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+r.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f + +regions[header] = Header +regions[help] = Help +regions[highlighted] = Highlighted +regions[featured] = Featured +regions[content] = Content +regions[sidebar_first] = Left Sidebar +regions[sidebar_second] = Right Sidebar +regions[triptych_first] = Callout one +regions[triptych_middle] = Callout two +regions[triptych_last] = Callout three +regions[footer_firstcolumn] = Footer one +regions[footer_secondcolumn] = Footer two +regions[footer_thirdcolumn] = Footer three +regions[footer_fourthcolumn] = Footer four +regions[footer] = Footer +regions[accountlinks] = Account Links +regions[citylinks] = City Links +regions[login_form] = Login Form +regions[activity_sidebar] = Activity Sidebar +regions[mobile_menu] = Mobile Menu +regions[header-mobile] = Header Mobile + +; Various page elements output by the theme can be toggled on and off. The +; "features" control which of these check boxes display on the +; admin/appearance config page. This is useful for suppressing check boxes +; for elements not used by your sub-theme. To add a check box, uncomment the +; entry for it below. See the Drupal 7 Theme Guide for more info: +; http://drupal.org/node/171205#features + +; features[] = logo +; features[] = name +; features[] = slogan +; features[] = node_user_picture +; features[] = comment_user_picture +; features[] = favicon +; features[] = main_menu +; features[] = secondary_menu + +; Theme settings. + +; Top Bar. +settings[zurb_foundation_top_bar_enable] = 1 +settings[zurb_foundation_top_bar_grid] = 1 +settings[zurb_foundation_top_bar_sticky] = 0 +settings[zurb_foundation_top_bar_menu_text] = 'Menu' +settings[zurb_foundation_top_bar_custom_back_text] = 1 +settings[zurb_foundation_top_bar_back_text] = 'Back' +settings[zurb_foundation_top_bar_is_hover] = 1 +settings[zurb_foundation_top_bar_scrolltop] = 1 + +; Tooltips. +settings[zurb_foundation_tooltip_enable] = 1 +settings[zurb_foundation_tooltip_position] = 'top' +settings[zurb_foundation_tooltip_mode] = 'text' +settings[zurb_foundation_tooltip_text] = 'More information?' +settings[zurb_foundation_tooltip_touch] = 0 + +; Styles and Scripts. +settings[zurb_foundation_disable_core_css] = 0 + +; Misc. +settings[zurb_foundation_html_tags] = 1 +settings[zurb_foundation_messages_modal] = 0 +settings[zurb_foundation_pager_center] = 1 diff --git a/docroot/sites/all/themes/libraryzurb_teen/libraryzurb_teen.info~ b/docroot/sites/all/themes/libraryzurb_teen/libraryzurb_teen.info~ new file mode 100644 index 00000000..2ce5847e --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/libraryzurb_teen.info~ @@ -0,0 +1,150 @@ +name = LibrarySiteTeen Theme +description = The base LibrarySite theme. Use as the foundation for all variants. Based on Zurb Foundation using Foundation 4. +screenshot = images/screenshot.png + +core = 7.x +engine = phptemplate +base theme = zurb_foundation + +; This section controls the CSS files for your theme. There are 3 different +; things you can do with a "stylesheets" line: +; - Add a new stylesheet for your theme. +; - Override a module's stylesheet. If the stylesheet you are adding uses the +; same filename as a stylesheet from a Drupal core or contrib module, your CSS +; file will be used instead of the module's file. +; - Remove a module's stylesheet. If you specify the name of a Drupal core or +; contrib module's stylesheets, Drupal will remove that stylesheet if you do +; NOT include a file with that name with your theme. +; +; stylesheets[MEDIA][] = FILE +; +; The "FILE" is the name of the stylesheet to add/override/remove. +; The "MEDIA" in the first set of brackets is a media type or a media query. +; Typical CSS media types include "all", "screen", "print", and "handheld". A +; typical media query is "screen and (max-width: 320px)". +; +; CSS2.1 media types: http://www.w3.org/TR/CSS21/media.html#media-types +; CSS3 media queries: http://www.w3.org/TR/css3-mediaqueries/ + +; For CSS users, load the app.css file: +;stylesheets[all][] = css/app.css +; Comment the app.css file (above) if you're using sass to preprocess css: +stylesheets[all][] = css/custom.css +stylesheets[all][] = css/fullcalendar.print.css +stylesheets[all][] = css/fullcalendar.css + +; Block loading of foundation.min.css from the base theme. This file should either +; not exist or be blank in your subtheme. See https://drupal.org/node/263967 +stylesheets[all][] = css/foundation.min.css + +; Foundation JavaScript. + +; Modernizr acts as a shim for HTML5 elements for older browsers +; as well as detection for mobile devices. +scripts[] = js/vendor/custom.modernizr.js + +; Foundation framework scripts (minified). +; If you prefer to have more control over which components are included you +; can comment this line and uncomment the ones below you want. +scripts[] = js/foundation.min.js +scripts[] = js/fullcalendar.min.js +scripts[] = js/gcal.js +scripts[] = js/jquery-ui.min.js + +; Foundation framework scripts (uncompressed). +;scripts[] = js/foundation/foundation.js +;scripts[] = js/foundation/foundation.abide.js +;scripts[] = js/foundation/foundation.alerts.js +;scripts[] = js/foundation/foundation.clearing.js +;scripts[] = js/foundation/foundation.cookie.js +;scripts[] = js/foundation/foundation.dropdown.js +;scripts[] = js/foundation/foundation.forms.js +;scripts[] = js/foundation/foundation.interchange.js +;scripts[] = js/foundation/foundation.joyride.js +;scripts[] = js/foundation/foundation.magellan.js +;scripts[] = js/foundation/foundation.orbit.js +;scripts[] = js/foundation/foundation.placeholder.js +;scripts[] = js/foundation/foundation.reveal.js +;scripts[] = js/foundation/foundation.section.js +;scripts[] = js/foundation/foundation.tooltips.js +;scripts[] = js/foundation/foundation.topbar.js + +; Theme scripts. +; This file is empty, just uncomment this line and start editing! +scripts[] = js/scripts.js + +; This section lists the regions defined in the page.tpl.php. The name in +; brackets is the machine name of the region. The text after the equals sign is +; a descriptive text used on the admin/structure/blocks page. +; +; In the page.tpl.php, the contents of the region are output with a +; $page['MACHINE-NAME'] variable. For example, with this line in the .info +; file: +; regions[header] = Header +; You'll use this variable in page.tpl.php: +; + +regions[header] = Header +regions[help] = Help +regions[highlighted] = Highlighted +regions[featured] = Featured +regions[content] = Content +regions[sidebar_first] = Left Sidebar +regions[sidebar_second] = Right Sidebar +regions[triptych_first] = Callout one +regions[triptych_middle] = Callout two +regions[triptych_last] = Callout three +regions[footer_firstcolumn] = Footer one +regions[footer_secondcolumn] = Footer two +regions[footer_thirdcolumn] = Footer three +regions[footer_fourthcolumn] = Footer four +regions[footer] = Footer +regions[accountlinks] = Account Links +regions[citylinks] = City Links +regions[login_form] = Login Form +regions[activity_sidebar] = Activity Sidebar +regions[mobile_menu] = Mobile Menu +regions[header-mobile] = Header Mobile + +; Various page elements output by the theme can be toggled on and off. The +; "features" control which of these check boxes display on the +; admin/appearance config page. This is useful for suppressing check boxes +; for elements not used by your sub-theme. To add a check box, uncomment the +; entry for it below. See the Drupal 7 Theme Guide for more info: +; http://drupal.org/node/171205#features + +; features[] = logo +; features[] = name +; features[] = slogan +; features[] = node_user_picture +; features[] = comment_user_picture +; features[] = favicon +; features[] = main_menu +; features[] = secondary_menu + +; Theme settings. + +; Top Bar. +settings[zurb_foundation_top_bar_enable] = 1 +settings[zurb_foundation_top_bar_grid] = 1 +settings[zurb_foundation_top_bar_sticky] = 0 +settings[zurb_foundation_top_bar_menu_text] = 'Menu' +settings[zurb_foundation_top_bar_custom_back_text] = 1 +settings[zurb_foundation_top_bar_back_text] = 'Back' +settings[zurb_foundation_top_bar_is_hover] = 1 +settings[zurb_foundation_top_bar_scrolltop] = 1 + +; Tooltips. +settings[zurb_foundation_tooltip_enable] = 1 +settings[zurb_foundation_tooltip_position] = 'top' +settings[zurb_foundation_tooltip_mode] = 'text' +settings[zurb_foundation_tooltip_text] = 'More information?' +settings[zurb_foundation_tooltip_touch] = 0 + +; Styles and Scripts. +settings[zurb_foundation_disable_core_css] = 0 + +; Misc. +settings[zurb_foundation_html_tags] = 1 +settings[zurb_foundation_messages_modal] = 0 +settings[zurb_foundation_pager_center] = 1 diff --git a/docroot/sites/all/themes/libraryzurb_teen/logo.png b/docroot/sites/all/themes/libraryzurb_teen/logo.png new file mode 100644 index 00000000..2faf9c7f Binary files /dev/null and b/docroot/sites/all/themes/libraryzurb_teen/logo.png differ diff --git a/docroot/sites/all/themes/libraryzurb_teen/scss/_normalize.scss b/docroot/sites/all/themes/libraryzurb_teen/scss/_normalize.scss new file mode 100644 index 00000000..332bc569 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/scss/_normalize.scss @@ -0,0 +1,410 @@ +/*! normalize.css v2.1.2 | MIT License | git.io/normalize */ + +/* ========================================================================== + HTML5 display definitions + ========================================================================== */ + +/** + * Correct `block` display not defined in IE 8/9. + */ + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section, +summary { + display: block; +} + +/** + * Correct `inline-block` display not defined in IE 8/9. + */ + +audio, +canvas, +video { + display: inline-block; +} + +/** + * Prevent modern browsers from displaying `audio` without controls. + * Remove excess height in iOS 5 devices. + */ + +audio:not([controls]) { + display: none; + height: 0; +} + +/** + * Address `[hidden]` styling not present in IE 8/9. + * Hide the `template` element in IE, Safari, and Firefox < 22. + */ + +[hidden], +template { + display: none; +} + +script { + display: none !important; +} + +/* ========================================================================== + Base + ========================================================================== */ + +/** + * 1. Set default font family to sans-serif. + * 2. Prevent iOS text size adjust after orientation change, without disabling + * user zoom. + */ + +html { + font-family: sans-serif; /* 1 */ + -ms-text-size-adjust: 100%; /* 2 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/** + * Remove default margin. + */ + +body { + margin: 0; +} + +/* ========================================================================== + Links + ========================================================================== */ + +/** + * Remove the gray background color from active links in IE 10. + */ + +a { + background: transparent; +} + +/** + * Address `outline` inconsistency between Chrome and other browsers. + */ + +a:focus { + outline: thin dotted; +} + +/** + * Improve readability when focused and also mouse hovered in all browsers. + */ + +a:active, +a:hover { + outline: 0; +} + +/* ========================================================================== + Typography + ========================================================================== */ + +/** + * Address variable `h1` font-size and margin within `section` and `article` + * contexts in Firefox 4+, Safari 5, and Chrome. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/** + * Address styling not present in IE 8/9, Safari 5, and Chrome. + */ + +abbr[title] { + border-bottom: 1px dotted; +} + +/** + * Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. + */ + +b, +strong { + font-weight: bold; +} + +/** + * Address styling not present in Safari 5 and Chrome. + */ + +dfn { + font-style: italic; +} + +/** + * Address differences between Firefox and other browsers. + */ + +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} + +/** + * Address styling not present in IE 8/9. + */ + +mark { + background: #ff0; + color: #000; +} + +/** + * Correct font family set oddly in Safari 5 and Chrome. + */ + +code, +kbd, +pre, +samp { + font-family: monospace, serif; + font-size: 1em; +} + +/** + * Improve readability of pre-formatted text in all browsers. + */ + +pre { + white-space: pre-wrap; +} + +/** + * Set consistent quote types. + */ + +q { + quotes: "\201C" "\201D" "\2018" "\2019"; +} + +/** + * Address inconsistent and variable font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` affecting `line-height` in all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +/* ========================================================================== + Embedded content + ========================================================================== */ + +/** + * Remove border when inside `a` element in IE 8/9. + */ + +img { + border: 0; +} + +/** + * Correct overflow displayed oddly in IE 9. + */ + +svg:not(:root) { + overflow: hidden; +} + +/* ========================================================================== + Figures + ========================================================================== */ + +/** + * Address margin not present in IE 8/9 and Safari 5. + */ + +figure { + margin: 0; +} + +/* ========================================================================== + Forms + ========================================================================== */ + +/** + * Define consistent border, margin, and padding. + */ + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +/** + * 1. Correct `color` not being inherited in IE 8/9. + * 2. Remove padding so people aren't caught out if they zero out fieldsets. + */ + +legend { + border: 0; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * 1. Correct font family not being inherited in all browsers. + * 2. Correct font size not being inherited in all browsers. + * 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. + */ + +button, +input, +select, +textarea { + font-family: inherit; /* 1 */ + font-size: 100%; /* 2 */ + margin: 0; /* 3 */ +} + +/** + * Address Firefox 4+ setting `line-height` on `input` using `!important` in + * the UA stylesheet. + */ + +button, +input { + line-height: normal; +} + +/** + * Address inconsistent `text-transform` inheritance for `button` and `select`. + * All other form control elements do not inherit `text-transform` values. + * Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. + * Correct `select` style inheritance in Firefox 4+ and Opera. + */ + +button, +select { + text-transform: none; +} + +/** + * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` + * and `video` controls. + * 2. Correct inability to style clickable `input` types in iOS. + * 3. Improve usability and consistency of cursor style between image-type + * `input` and others. + */ + +button, +html input[type="button"], /* 1 */ +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; /* 2 */ + cursor: pointer; /* 3 */ +} + +/** + * Re-set default cursor for disabled elements. + */ + +button[disabled], +html input[disabled] { + cursor: default; +} + +/** + * 1. Address box sizing set to `content-box` in IE 8/9. + * 2. Remove excess padding in IE 8/9. + */ + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. + * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome + * (include `-moz` to future-proof). + */ + +input[type="search"] { + -webkit-appearance: textfield; /* 1 */ + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; /* 2 */ + box-sizing: content-box; +} + +/** + * Remove inner padding and search cancel button in Safari 5 and Chrome + * on OS X. + */ + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * Remove inner padding and border in Firefox 4+. + */ + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/** + * 1. Remove default vertical scrollbar in IE 8/9. + * 2. Improve readability and alignment in all browsers. + */ + +textarea { + overflow: auto; /* 1 */ + vertical-align: top; /* 2 */ +} + +/* ========================================================================== + Tables + ========================================================================== */ + +/** + * Remove most spacing between table cells. + */ + +table { + border-collapse: collapse; + border-spacing: 0; +} diff --git a/docroot/sites/all/themes/libraryzurb_teen/scss/_settings.scss b/docroot/sites/all/themes/libraryzurb_teen/scss/_settings.scss new file mode 100644 index 00000000..fb371d06 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/scss/_settings.scss @@ -0,0 +1,3 @@ +/* This file is only a placeholder. See the STARTER/README.txt file regarding + * "CHANGING FOUNDATION DEFAULT SETTINGS" for documentation + */ diff --git a/docroot/sites/all/themes/libraryzurb_teen/scss/_variables.scss b/docroot/sites/all/themes/libraryzurb_teen/scss/_variables.scss new file mode 100644 index 00000000..82ddf3ae --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/scss/_variables.scss @@ -0,0 +1,1450 @@ +/* + * Theme specific variables. This takes the place of the normal _settings.scss. + * See the STARTER/README.txt file regarding "CHANGING FOUNDATION DEFAULT + * SETTINGS" for documentation. + */ + +// Optionally, you can add your colors here. +// ****************************************************** +$color_gray_dark: hsl(0, 0%, 20%); // #333 // rgb(51, 51, 51) +$color_gray_medium: hsl(0, 0%, 50%); // #808080 // rgb(128, 128, 128) +$color_gray_light: hsl(0, 0%, 95%); // #f1f1f1 // rgb(241, 241, 241) +$color_white: hsl(0, 0%, 100%); // #ffffff // rgb(255, 255, 255) +$color_notice: hsl(47, 100%, 75%); // #ffe382 // rgb(255, 227, 130) + + +$primary-color: $color_gray_medium; +// $secondary-color: #c00; +$blue: #267fda; +$yellow: #fdeb52; +$white: #fff; +$black: #000; +$green: #7eb600; +$orange: #f6511d; +$blueshadow: #a39735; +$buttonshadow: #92a26b; +$gray: #7e7e7e; +$button-hover: #f7fc63; +$button-active: #f0f811; +$red: #cc0d25; +$light-gray: #cccccc; +$grey: #efefef; +$light-orange: #f98515; +$header: #73A603; + +// Font Families +// ------------------------------------------------------ +// $ff-arial: Arial, Helvetica, Sans-serif; +// $ff-georgia: Georgia, Times, Times New Roman, Sans-serif; + + +/* +* +* Font families will not be defined in Library Sites core theme and should be used in the admin interface +* of each libary site using the font-your-face module. +* +*/ + +// Global Variables +// ------------------------------------------------------ +// $global-font-family: $ff-arial; +// $global-alt-font-family: $ff-georgia; + + +// +// Foundation Variables +// +// Source: https://github.com/zurb/foundation/blob/v4.3.2/scss/foundation/_variables.scss +// + +// The default font-size is set to 100% of the browser style sheet (usually 16px) +// for compatibility with browser-based text zoom or user-set defaults. +$base-font-size: 100% !default; + +// $base-line-height is 24px while $base-font-size is 16px +// $base-line-height: 150%; + +// This is the default html and body font-size for the base em value. + +// Since the typical default browser font-size is 16px, that makes the calculation for grid size. +// If you want your base font-size to be a different size and not have it effect grid size too, +// set the value of $em-base to $base-font-size ($em-base: $base-font-size;) +$em-base: 16px !default; + +// It strips the unit of measure and returns it +@function strip-unit($num) { + @return $num / ($num * 0 + 1); +} + +// Converts "px" to "em" using the ($)em-base +@function convert-to-em($value, $base-value: $em-base) { + $value: strip-unit($value) / strip-unit($base-value) * 1em; + @if ($value == 0em) { $value: 0; } // Turn 0em into 0 + @return $value; +} + +// Working in ems is annoying. Think in pixels by using this handy function, em-calc(#) +// Just enter the number, no need to mention "px" +@function em-calc($values, $base-value: $em-base) { + $max: length($values); // Get the total number of parameters passed + + // If there is only 1 parameter, then return it as an integer. + // This is done because a list can't be multiplied or divided even if it contains a single value + @if $max == 1 { @return convert-to-em(nth($values, 1), $base-value); } + + $emValues: (); // This will eventually store the converted $values in a list + @for $i from 1 through $max { + $emValues: append($emValues, convert-to-em(nth($values, $i), $base-value)); + } + @return $emValues; +} + +//Retaining this for backward compatability + +@function emCalc($pxWidth) { + @return $pxWidth / $em-base * 1em; +} + +// Maybe you want to create rems with pixels +// $rem-base: 0.625 !default; //Set the value corresponding to body font size. In this case, you should set as: body {font-size: 62.5%;} +// @function rem-calc($pxWidth) { +// @return $pxWidth / $rem-base * 1rem; +// } + +// Change whether or not you include browser prefixes +// $experimental: true; + +// Various global styles + +$default-float: left; + +// $body-bg: #fff; +$body-font-color: $color_gray_dark; // LibrarySite Edit +// $body-font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; +// $body-font-weight: normal; +// $body-font-style: normal; + +// Font-smoothing + +// $font-smoothing: antialiased; + +// Text direction settings + +// $text-direction: ltr; + +// Colors + +// $primary-color: #ee3940; // LibrarySite Edit +// $secondary-color: #e9e9e9; +// $alert-color: #c60f13; +// $success-color: #5da423; + +// Make sure border radius matches unless we want it different. + +// $global-radius: 3px; +// $global-rounded: 1000px; + +// Inset shadow shiny edges and depressions. + +// $shiny-edge-size: 0 1px 0; +// $shiny-edge-color: rgba(#fff, .5); +// $shiny-edge-active-color: rgba(#000, .2); + +// Control whether or not CSS classes come through in the CSS files. + +// $include-html-classes: true; +// $include-print-styles: true; +// $include-html-global-classes: $include-html-classes; +// $include-html-inline-list-classes: $include-html-classes; +// $include-html-type-classes: $include-html-classes; +// $include-html-grid-classes: $include-html-classes; +// $include-html-visibility-classes: $include-html-classes; +// $include-html-button-classes: $include-html-classes; +// $include-html-form-classes: $include-html-classes; +// $include-html-custom-form-classes: $include-html-classes; +// $include-html-media-classes: $include-html-classes; +// $include-html-section-classes: $include-html-classes; +// $include-html-orbit-classes: $include-html-classes; +// $include-html-reveal-classes: $include-html-classes; +// $include-html-joyride-classes: $include-html-classes; +// $include-html-clearing-classes: $include-html-classes; +// $include-html-alert-classes: $include-html-classes; +// $include-html-nav-classes: $include-html-classes; +// $include-html-top-bar-classes: $include-html-classes; +// $include-html-label-classes: $include-html-classes; +// $include-html-panel-classes: $include-html-classes; +// $include-html-pricing-classes: $include-html-classes; +// $include-html-progress-classes: $include-html-classes; +// $include-html-magellan-classes: $include-html-classes; +// $include-html-tooltip-classes: $include-html-classes; + +// Media Queries + +// LibrarySite Edit +$innyminny-screen: 170px; +$ittybitty-screen: 250px; +$small-screen: 730px; +$smallmedium-screen: 830px; +$medium-screen: 960px; +$large-screen: 1440px; +$mobile-width: 767px; +$tablet-width: 768px; +$desktop-width: 1026px; +$medium-width: 940px; + + +// $small-screen: 768px; +// $medium-screen: 1280px; +// $large-screen: 1440px; + +// $screen: "only screen"; +// $small: "only screen and (min-width: #{$small-screen})"; +// $medium: "only screen and (min-width: #{$medium-screen})"; +// $large: "only screen and (min-width: #{$large-screen})"; +// $landscape: "only screen and (orientation: landscape)"; +// $portrait: "only screen and (orientation: portrait)"; + +//// Cursors + +//Custom use example -> $cursor-default-value: url(http://cursors-site.net/path/to/custom/cursor/default.cur),progress; + +// $cursor-crosshair-value: "crosshair"; +// $cursor-default-value: "default"; +// $cursor-pointer-value: "pointer"; +// $cursor-help-value: "help"; + +// +// Grid Variables +// + +// $row-width: em-calc(1000); +// $column-gutter: em-calc(30); +// $total-columns: 12; + +// +// Block Grid Variables +// + +// We use this to control the maximum number of block grid elements per row + +// $block-grid-elements: 12; +// $block-grid-default-spacing: em-calc(20); + +// Enables media queries for block-grid classes. Set to false if writing semantic HTML. + +// $block-grid-media-queries: true; + +// +// Typography Variables +// + +// Control header font styles + +// $header-font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; +$header-font-weight: normal; // LibrarySite Edit +// $header-font-style: normal; +// $header-font-color: #222; +// $header-line-height: 1.4; +// $header-top-margin: .2em; +// $header-bottom-margin: .5em; +// $header-text-rendering: optimizeLegibility; + +// Control header font sizes + +// LibrarySite Edit +$h1-font-size: em-calc(30); +$h2-font-size: em-calc(25); +$h3-font-size: em-calc(20); +$h4-font-size: em-calc(15); +$h5-font-size: em-calc(10); +$h6-font-size: 1em; + +// Control how subheaders are styled. + +// $subheader-line-height: 1.4; +// $subheader-font-color: lighten($header-font-color, 30%); +// $subheader-font-weight: 300; +// $subheader-top-margin: .2em; +// $subheader-bottom-margin: .5em; + +// A general styling + +// $small-font-size: 60%; +// $small-font-color: lighten($header-font-color, 30%); + +// Style paragraphs + +// $paragraph-font-family: inherit; +// $paragraph-font-weight: normal; +// $paragraph-font-size: 1em; +// $paragraph-line-height: 1.6; +// $paragraph-margin-bottom: em-calc(20); +// $paragraph-aside-font-size: em-calc(14); +// $paragraph-aside-line-height: 1.35; +// $paragraph-aside-font-style: italic; +// $paragraph-text-rendering: optimizeLegibility; + +// Style tags + +// $code-color: darken($alert-color, 15%); +// $code-font-family: Consolas, 'Liberation Mono', Courier, monospace; +// $code-font-weight: bold; + +// Style anchors + +// $anchor-text-decoration: none; +// $anchor-font-color: $primary-color; +// $anchor-font-color-hover: darken($primary-color, 5%); + +// Style the
                  element + +// $hr-border-width: 1px; +// $hr-border-style: solid; +// $hr-border-color: #ddd; +// $hr-margin: em-calc(20); + +// Style lists + +// $list-style-position: outside; +// $list-side-margin: 0; +// $list-nested-margin: em-calc(20); +// $definition-list-header-weight: bold; +// $definition-list-header-margin-bottom: .3em; +// $definition-list-margin-bottom: em-calc(12); + +// Style blockquotes + +// $blockquote-font-color: lighten($header-font-color, 30%); +// $blockquote-padding: em-calc(9, 20, 0, 19); +// $blockquote-border: 1px solid #ddd; +// $blockquote-cite-font-size: em-calc(13); +// $blockquote-cite-font-color: lighten($header-font-color, 20%); +// $blockquote-cite-link-color: $blockquote-cite-font-color; + +// Acronym styles + +// $acronym-underline: 1px dotted #ddd; + +// Control padding and margin + +// $microformat-padding: em-calc(10 12); +// $microformat-margin: em-calc(0 0 20 0); + +// Control the border styles + +// $microformat-border-width: 1px; +// $microformat-border-style: solid; +// $microformat-border-color: #ddd; + +// Control full name font styles + +// $microformat-fullname-font-weight: bold; +// $microformat-fullname-font-size: em-calc(15); + +// Control the summary font styles + +// $microformat-summary-font-weight: bold; + +// Control abbr padding +// $microformat-abbr-padding: em-calc(0 1); + +// Control abbr font styles + +// $microformat-abbr-font-weight: bold; +// $microformat-abbr-font-decoration: none; + +// +// Form Variables +// + +// We use this to set the base for lots of form spacing and positioning styles + +// $form-spacing: em-calc(16); + +// We use these to style the labels in different ways + +// $form-label-pointer: pointer; +// $form-label-font-size: em-calc(14); +$form-label-font-weight: 700; +// $form-label-font-color: lighten(#000, 30%); +// $form-label-bottom-margin: em-calc(3); +$form-component-bottom-margin: em-calc(40); +// $input-font-family: inherit; +// $input-font-color: rgba(0,0,0,0.75); +// $input-font-size: em-calc(14); +// $input-bg-color: #fff; +// $input-focus-bg-color: darken(#fff, 2%); +// $input-border-color: darken(#fff, 20%); +// $input-focus-border-color: darken(#fff, 40%); +// $input-border-style: solid; +// $input-border-width: 1px; +// $input-disabled-bg: #ddd; +// $input-box-shadow: inset 0 1px 2px rgba(0,0,0,0.1); +// $input-include-glowing-effect: true; + +// We use these to style the fieldset border and spacing. + +// $fieldset-border-style: solid; +// $fieldset-border-width: 1px; +// $fieldset-border-color: #ddd; +// $fieldset-padding: em-calc(20); +// $fieldset-margin: em-calc(18 0); + +// We use these to style the legends when you use them + +// $legend-bg: #fff; +// $legend-font-weight: bold; +// $legend-padding: em-calc(0 3); + +// We use these to style the prefix and postfix input elements + +// $input-prefix-bg: darken(#fff, 5%); +// $input-prefix-border-color: darken(#fff, 20%); +// $input-prefix-border-size: 1px; +// $input-prefix-border-type: solid; +// $input-prefix-overflow: hidden; +// $input-prefix-font-color: #333; +// $input-prefix-font-color-alt: #fff; + +// We use these to style the error states for inputs and labels + +// $input-error-message-padding: em-calc(6 4); +// $input-error-message-top: 0; +// $input-error-message-font-size: em-calc(12); +// $input-error-message-font-weight: bold; +// $input-error-message-font-color: #fff; +// $input-error-message-font-color-alt: #333; + +// We use this to style the glowing effect of inputs when focused + +// $glowing-effect-fade-time: 0.45s; +// $glowing-effect-color: $input-focus-border-color; + +// +// Button Variables +// + +// We use these to build padding for buttons. + +// $button-med: em-calc(12); +// $button-tny: em-calc(7); +// $button-sml: em-calc(9); +// $button-lrg: em-calc(16); + +// We use this to control the display property. + +// $button-display: inline-block; +// $button-margin-bottom: em-calc(20); + +// We use these to control button text styles. + +// $button-font-family: inherit; +// $button-font-color: #fff; +// $button-font-color-alt: #333; +// $button-font-med: em-calc(16); +// $button-font-tny: em-calc(11); +// $button-font-sml: em-calc(13); +// $button-font-lrg: em-calc(20); +$button-font-weight: normal; // LibrarySite Edit +// $button-font-align: center; + +// We use these to control various hover effects. + +// $button-function-factor: 10%; + +// We use these to control button border styles. + +// $button-border-width: 1px; +// $button-border-style: solid; + +// We use this to set the default radius used throughout the core. + +// $button-radius: $global-radius; +// $button-round: $global-rounded; + +// We use this to set default opacity for disabled buttons. + +// $button-disabled-opacity: 0.6; + +// +// Button Groups +// + +// Sets the margin for the right side by default, and the left margin if right-to-left direction is used + +// $button-bar-margin-opposite: em-calc(10); + +// +// Dropdown Button Variables +// + +// We use these to set the color of the pip in dropdown buttons + +// $dropdown-button-pip-color: #fff; +// $dropdown-button-pip-color-alt: #333; + +// We use these to style tiny dropdown buttons + +// $dropdown-button-padding-tny: $button-tny * 5; +// $dropdown-button-pip-size-tny: $button-tny; +// $dropdown-button-pip-opposite-tny: $button-tny * 2; +// $dropdown-button-pip-top-tny: -$button-tny / 2 + em-calc(1); + +// We use these to style small dropdown buttons + +// $dropdown-button-padding-sml: $button-sml * 5; +// $dropdown-button-pip-size-sml: $button-sml; +// $dropdown-button-pip-opposite-sml: $button-sml * 2; +// $dropdown-button-pip-top-sml: -$button-sml / 2 + em-calc(1); + +// We use these to style medium dropdown buttons + +// $dropdown-button-padding-med: $button-med * 4 + em-calc(3); +// $dropdown-button-pip-size-med: $button-med - em-calc(3); +// $dropdown-button-pip-opposite-med: $button-med * 2; +// $dropdown-button-pip-top-med: -$button-med / 2 + em-calc(2); + +// We use these to style large dropdown buttons + +// $dropdown-button-padding-lrg: $button-lrg * 4; +// $dropdown-button-pip-size-lrg: $button-lrg - em-calc(6); +// $dropdown-button-pip-opposite-lrg: $button-lrg + em-calc(12); +// $dropdown-button-pip-top-lrg: -$button-lrg / 2 + em-calc(3); + +// +// Split Button Variables +// + +// We use these to control different shared styles for Split Buttons + +// $split-button-function-factor: 15%; +// $split-button-pip-color: #fff; +// $split-button-pip-color-alt: #333; +// $split-button-active-bg-tint: rgba(0,0,0,0.1); + +// We use these to control tiny split buttons + +// $split-button-padding-tny: $button-tny * 9; +// $split-button-span-width-tny: $button-tny * 6.5; +// $split-button-pip-size-tny: $button-tny; +// $split-button-pip-top-tny: $button-tny * 2; +// $split-button-pip-default-float-tny: em-calc(-5); + +// We use these to control small split buttons + +// $split-button-padding-sml: $button-sml * 7; +// $split-button-span-width-sml: $button-sml * 5; +// $split-button-pip-size-sml: $button-sml; +// $split-button-pip-top-sml: $button-sml * 1.5; +// $split-button-pip-default-float-sml: em-calc(-9); + +// We use these to control medium split buttons + +// $split-button-padding-med: $button-med * 6.4; +// $split-button-span-width-med: $button-med * 4; +// $split-button-pip-size-med: $button-med - em-calc(3); +// $split-button-pip-top-med: $button-med * 1.5; +// $split-button-pip-default-float-med: em-calc(-9); + +// We use these to control large split buttons + +// $split-button-padding-lrg: $button-lrg * 6; +// $split-button-span-width-lrg: $button-lrg * 3.75; +// $split-button-pip-size-lrg: $button-lrg - em-calc(6); +// $split-button-pip-top-lrg: $button-lrg + em-calc(5); +// $split-button-pip-default-float-lrg: em-calc(-9); + +// +// Alert Box Variables +// + +// We use this to control alert padding. + +// $alert-padding-top: em-calc(11); +// $alert-padding-default-float: $alert-padding-top; +// $alert-padding-opposite-direction: $alert-padding-top + em-calc(10); +// $alert-padding-bottom: $alert-padding-top + em-calc(1); + +// We use these to control text style. + +// $alert-font-weight: bold; +// $alert-font-size: em-calc(14); +// $alert-font-color: #fff; +// $alert-font-color-alt: darken($secondary-color, 60%); + +// We use this for close hover effect. + +// $alert-function-factor: 10%; + +// We use these to control border styles. + +// $alert-border-style: solid; +// $alert-border-width: 1px; +// $alert-border-color: darken($primary-color, $alert-function-factor); +// $alert-bottom-margin: em-calc(20); + +// We use these to style the close buttons + +// $alert-close-color: #333; +// $alert-close-position: em-calc(5); +// $alert-close-font-size: em-calc(22); +// $alert-close-opacity: 0.3; +// $alert-close-opacity-hover: 0.5; +// $alert-close-padding: 5px 4px 4px; + +// We use this to control border radius + +// $alert-radius: $global-radius; + + +// +// Breadcrumb Variables +// + +// We use this to set the background color for the breadcrumb container. + +// $crumb-bg: lighten($secondary-color, 5%); + +// We use these to set the padding around the breadcrumbs. + +// $crumb-padding: em-calc(9 14 9); +// $crumb-side-padding: em-calc(12); + +// We use these to control border styles. + +// $crumb-function-factor: 10%; +// $crumb-border-size: 1px; +// $crumb-border-style: solid; +// $crumb-border-color: darken($crumb-bg, $crumb-function-factor); +// $crumb-radius: $global-radius; + +// We use these to set various text styles for breadcrumbs. + +// $crumb-font-size: em-calc(11); +// $crumb-font-color: $primary-color; +// $crumb-font-color-current: #333; +// $crumb-font-color-unavailable: #999; +// $crumb-font-transform: uppercase; +// $crumb-link-decor: underline; + +// We use these to control the slash between breadcrumbs + +// $crumb-slash-color: #aaa; +// $crumb-slash: "/"; + +// +// Clearing Variables +// + +// We use these to set the background colors for parts of Clearing. + +// $clearing-bg: #111; +// $clearing-caption-bg: $clearing-bg; +// $clearing-carousel-bg: #111; +// $clearing-img-bg: $clearing-bg; + +// We use these to style the close button + +// $clearing-close-color: #fff; +// $clearing-close-size: 40px; + +// We use these to style the arrows + +// $clearing-arrow-size: 16px; +// $clearing-arrow-color: $clearing-close-color; + +// We use these to style captions + +// $clearing-caption-font-color: #fff; +// $clearing-caption-padding: 10px 30px; + +// We use these to make the image and carousel height and style + +// $clearing-active-img-height: 75%; +// $clearing-carousel-height: 150px; +// $clearing-carousel-thumb-width: 175px; +// $clearing-carousel-thumb-active-border: 4px solid rgb(255,255,255); + +// +// Custom Form Variables +// + +// We use these to control the basic form styles input styles + +// $custom-form-border-color: #ccc; +// $custom-form-border-size: 1px; +// $custom-form-bg: #fff; +// $custom-form-bg-disabled: #ddd; +// $custom-form-input-size: 16px; +// $custom-form-check-color: #222; +// $custom-form-check-size: 16px; +// $custom-form-radio-size: 8px; +// $custom-form-checkbox-radius: 0; + +// We use these to style the custom select form element. + +// $custom-select-bg: #fff; +// $custom-select-fade-to-color: #f3f3f3; +// $custom-select-border-color: #ddd; +// $custom-select-triangle-color: #aaa; +// $custom-select-triangle-color-open: #222; +// $custom-select-height: em-calc(13) + ($form-spacing * 1.5); +// $custom-select-margin-bottom: em-calc(20); +// $custom-select-font-color-selected: #141414; +// $custom-select-disabled-color: #888; + +// We use these to control the style of the custom select dropdown element. + +// $custom-dropdown-height: 200px; +// $custom-dropdown-bg: #fff; +// $custom-dropdown-border-color: darken(#fff, 20%); +// $custom-dropdown-border-width: 1px; +// $custom-dropdown-border-style: solid; +// $custom-dropdown-font-color: #555; +// $custom-dropdown-font-size: em-calc(14); +// $custom-dropdown-color-selected: #eeeeee; +// $custom-dropdown-font-color-selected: #000; +// $custom-dropdown-shadow: 0 2px 2px 0 rgba(0,0,0,0.1); +// $custom-dropdown-offset-top: auto; +// $custom-dropdown-list-padding: em-calc(4); +// $custom-dropdown-default-float-padding: em-calc(6); +// $custom-dropdown-opposite-padding: em-calc(38); +// $custom-dropdown-list-item-min-height: em-calc(24); +// $custom-dropdown-width-small: 134px; +// $custom-dropdown-width-medium: 254px; +// $custom-dropdown-width-large: 434px; + +// +// Dropdown Variables +// + +// We use these to controls height and width styles. + +// $f-dropdown-max-width: 200px; +// $f-dropdown-height: auto; +// $f-dropdown-max-height: none; +// $f-dropdown-margin-top: 2px; + +// We use this to control the background color + +// $f-dropdown-bg: #fff; + +// We use this to set the border styles for dropdowns. + +// $f-dropdown-border-style: solid; +// $f-dropdown-border-width: 1px; +// $f-dropdown-border-color: darken(#fff, 20%); + +// We use these to style the triangle pip. + +// $f-dropdown-triangle-size: 6px; +// $f-dropdown-triangle-color: #fff; +// $f-dropdown-triangle-side-offset: 10px; + +// We use these to control styles for the list elements. + +// $f-dropdown-list-style: none; +// $f-dropdown-font-color: #555; +// $f-dropdown-font-size: em-calc(14); +// $f-dropdown-list-padding: em-calc(5 10); +// $f-dropdown-line-height: em-calc(18); +// $f-dropdown-list-hover-bg: #eeeeee; +// $dropdown-mobile-default-float: 0; + +// We use this to control the styles for when the dropdown has custom content. + +// $f-dropdown-content-padding: em-calc(20); + +// +// Flex Video Variables +// + +// We use these to control video container padding and margins + +// $flex-video-padding-top: em-calc(25); +// $flex-video-padding-bottom: 67.5%; +// $flex-video-margin-bottom: em-calc(16); + +// We use this to control widescreen bottom padding + +// $flex-video-widescreen-padding-bottom: 57.25%; + +// +// Inline List Variables +// + +// We use this to control the margins and padding of the inline list. + +// $inline-list-top-margin: 0; +// $inline-list-opposite-margin: 0; +// $inline-list-bottom-margin: em-calc(17); +// $inline-list-default-float-margin: em-calc(-22); + +// $inline-list-padding: 0; + +// We use this to control the overflow of the inline list. + +// $inline-list-overflow: hidden; + +// We use this to control the list items + +// $inline-list-display: block; + +// We use this to control any elments within list items + +// $inline-list-children-display: block; + +// +// Joyride Variables +// + +// Controlling default Joyride styles + +// $joyride-tip-bg: rgb(0,0,0); +// $joyride-tip-default-width: 300px; +// $joyride-tip-padding: em-calc(18 20 24); +// $joyride-tip-border: solid 1px #555; +// $joyride-tip-radius: 4px; +// $joyride-tip-position-offset: 22px; + +// Here, we're setting the tip dont styles + +// $joyride-tip-font-color: #fff; +// $joyride-tip-font-size: em-calc(14); +// $joyride-tip-header-weight: bold; + +// This changes the nub size + +// $joyride-tip-nub-size: 14px; + +// This adjusts the styles for the timer when its enabled + +// $joyride-tip-timer-width: 50px; +// $joyride-tip-timer-height: 3px; +// $joyride-tip-timer-color: #666; + +// This changes up the styles for the close button + +// $joyride-tip-close-color: #777; +// $joyride-tip-close-size: 30px; +// $joyride-tip-close-weight: normal; + +// When Joyride is filling the screen, we use this style for the bg + +// $joyride-screenfill: rgba(0,0,0,0.5); + +// +// Keystroke Variables +// + +// We use these to control text styles. + +// $keystroke-font: "Consolas", "Menlo", "Courier", monospace; +// $keystroke-font-size: em-calc(14); +// $keystroke-font-color: #222; +// $keystroke-font-color-alt: #fff; +// $keystroke-function-factor: 7%; + +// We use this to control keystroke padding. + +// $keystroke-padding: em-calc(2 4 0); + +// We use these to control background and border styles. + +// $keystroke-bg: darken(#fff, $keystroke-function-factor); +// $keystroke-border-style: solid; +// $keystroke-border-width: 1px; +// $keystroke-border-color: darken($keystroke-bg, $keystroke-function-factor); +// $keystroke-radius: $global-radius; + +// +// Label Variables +// + +// We use these to style the labels + +// $label-padding: em-calc(3 10 4); +// $label-radius: $global-radius; + +// We use these to style the label text + +// $label-font-sizing: em-calc(14); +// $label-font-weight: bold; +// $label-font-color: #333; +// $label-font-color-alt: #fff; + +// +// Magellan Variables +// + +// $magellan-bg: #fff; +// $magellan-padding: 10px; + +// +// Orbit Settings +// + +// We use these to control the caption styles + +// $orbit-container-bg: #f5f5f5; +// $orbit-caption-bg: rgba(0,0,0,0.6); +// $orbit-caption-font-color: #fff; +// $orbit-caption-font-size: emCalc(14); +// $orbit-caption-position: "bottom"; // Supported values: "bottom", "under" +// $orbit-caption-padding: emCalc(10,14); +// $orbit-caption-height: auto; + +// We use these to control the left/right nav styles + +// $orbit-nav-bg: rgba(0,0,0,0.6); +// $orbit-nav-bg-hover: rgba(0,0,0,0.6); +// $orbit-nav-arrow-color: #fff; +// $orbit-nav-arrow-color-hover: #ccc; + +// We use these to control the timer styles + +// $orbit-timer-bg: rgba(0,0,0,0.6); +// $orbit-timer-show-progress-bar: true; + +// We use these to control the bullet nav styles + +// $orbit-bullet-nav-color: #999; +// $orbit-bullet-nav-color-active: #555; +// $orbit-bullet-radius: emCalc(18); + +// We use these to controls the style of slide numbers + +// $orbit-slide-number-bg: rgba(0,0,0,0); +// $orbit-slide-number-font-color: #fff; +// $orbit-slide-number-padding: em-calc(5); + +// Graceful Loading Wrapper and preloader + +// $wrapper-class: "slideshow-wrapper"; +// $preloader-class: "preloader"; + +// +// Pagination Variables +// + +// We use these to control the pagination container + +// $pagination-height: em-calc(24); +// $pagination-margin: em-calc(-5); + +// We use these to set the list-item properties + +// $pagination-li-float: $default-float; +// $pagination-li-height: em-calc(24); +// $pagination-li-font-color: #222; +// $pagination-li-font-size: em-calc(14); +// $pagination-li-margin: em-calc(5); + +// We use these for the pagination anchor links + +// $pagination-link-pad: em-calc(1 7 1); +// $pagination-link-font-color: #999; +// $pagination-link-active-bg: darken(#fff, 10%); + +// We use these for disabled anchor links + +// $pagination-link-unavailable-cursor: default; +// $pagination-link-unavailable-font-color: #999; +// $pagination-link-unavailable-bg-active: transparent; + +// We use these for currently selected anchor links + +// $pagination-link-current-background: $primary-color; +// $pagination-link-current-font-color: #fff; +// $pagination-link-current-font-weight: bold; +// $pagination-link-current-cursor: default; +// $pagination-link-current-active-bg: $primary-color; + +// +// Panel Variables +// + +// We use these to control the background and border styles + +// $panel-bg: darken(#fff, 5%); +// $panel-border-style: solid; +// $panel-border-size: 1px; + +// We use this % to control how much we darken things on hover + +// $panel-function-factor: 10%; +// $panel-border-color: darken($panel-bg, $panel-function-factor); + +// We use these to set default inner padding and bottom margin + +// $panel-margin-bottom: em-calc(20); +// $panel-padding: em-calc(20); + +// We use these to set default font colors + +// $panel-font-color: #333; +// $panel-font-color-alt: #fff; + +// $panel-header-adjust: true; + +// +// Pricing Table Variables +// + +// We use this to control the border color + +// $price-table-border: solid 1px #ddd; + +// We use this to control the bottom margin of the pricing table + +// $price-table-margin-bottom: em-calc(20); + +// We use these to control the title styles + +// $price-title-bg: #ddd; +// $price-title-padding: em-calc(15 20); +// $price-title-align: center; +// $price-title-color: #333; +// $price-title-weight: bold; +// $price-title-size: em-calc(16); + +// We use these to control the price styles + +// $price-money-bg: #eee; +// $price-money-padding: em-calc(15, 20); +// $price-money-align: center; +// $price-money-color: #333; +// $price-money-weight: normal; +// $price-money-size: em-calc(20); + +// We use these to control the description styles + +// $price-bg: #fff; +// $price-desc-color: #777; +// $price-desc-padding: em-calc(15); +// $price-desc-align: center; +// $price-desc-font-size: em-calc(12); +// $price-desc-weight: normal; +// $price-desc-line-height: 1.4; +// $price-desc-bottom-border: dotted 1px #ddd; + +// We use these to control the list item styles + +// $price-item-color: #333; +// $price-item-padding: em-calc(15); +// $price-item-align: center; +// $price-item-font-size: em-calc(14); +// $price-item-weight: normal; +// $price-item-bottom-border: dotted 1px #ddd; + +// We use these to control the CTA area styles + +// $price-cta-bg: #f5f5f5; +// $price-cta-align: center; +// $price-cta-padding: em-calc(20 20 0); + +// +// Progress Bar Variables +// + +// We use this to se the prog bar height + +// $progress-bar-height: em-calc(25); +// $progress-bar-color: transparent; + +// We use these to control the border styles + +// $progress-bar-border-color: darken(#fff, 20%); +// $progress-bar-border-size: 1px; +// $progress-bar-border-style: solid; +// $progress-bar-border-radius: $global-radius; + +// We use these to control the margin & padding + +// $progress-bar-pad: em-calc(2); +// $progress-bar-margin-bottom: em-calc(10); + +// We use these to set the meter colors + +// $progress-meter-color: $primary-color; +// $progress-meter-secondary-color: $secondary-color; +// $progress-meter-success-color: $success-color; +// $progress-meter-alert-color: $alert-color; + +// +// Reveal Variables +// + +// We use these to control the style of the reveal overlay. + +// $reveal-overlay-bg: rgba(#000, .45); +// $reveal-overlay-bg-old: #000; + +// We use these to control the style of the modal itself. + +// $reveal-modal-bg: #fff; +// $reveal-position-top: 50px; +// $reveal-default-width: 80%; +// $reveal-modal-padding: em-calc(20); +// $reveal-box-shadow: 0 0 10px rgba(#000,.4); + +// We use these to style the reveal close button + +// $reveal-close-font-size: em-calc(22); +// $reveal-close-top: em-calc(8); +// $reveal-close-side: em-calc(11); +// $reveal-close-color: #aaa; +// $reveal-close-weight: bold; + +// We use these to control the modal border + +// $reveal-border-style: solid; +// $reveal-border-width: 1px; +// $reveal-border-color: #666; + +// $reveal-modal-class: "reveal-modal"; +// $close-reveal-modal-class: "close-reveal-modal"; + +// +// Section Variables +// + +// We use these to set padding and hover factor + +// $section-title-padding: em-calc(15); +$section-content-padding: em-calc(20); // LibrarySite Edit +// $section-function-factor: 10%; + +// These style the titles + +// $section-title-color: #333; +// $section-title-color-active: #333; +// $section-title-bg: #efefef; +// $section-title-bg-active: darken($section-title-bg, $section-function-factor); +// $section-title-bg-active-tabs: #fff; +// $section-title-bg-hover: darken($section-title-bg, $section-function-factor / 2); + +// Want to control border size, here ya go! + +// $section-border-size: 1px; +// $section-border-style: solid; +// $section-border-color: #ccc; + +// Font controls + +// $section-font-size: em-calc(14); + +// Control the color of the background and some size options + +// $section-content-bg: #fff; +// $section-vertical-nav-min-width: em-calc(200); +// $section-vertical-tabs-title-width: em-calc(200); +// $section-bottom-margin: em-calc(20); + +// $title-selector: ".title"; +// $content-selector: ".content"; +// $active-region-selector: ".active"; + +// +// Side Nav Variables +// + +// We use this to control padding. + +// $side-nav-padding: em-calc(14 0); + +// We use these to control list styles. + +// $side-nav-list-type: none; +// $side-nav-list-position: inside; +// $side-nav-list-margin: em-calc(0 0 7 0); + +// We use these to control link styles. + +// $side-nav-link-color: $primary-color; +// $side-nav-link-color-active: lighten(#000, 30%); +// $side-nav-font-size: em-calc(14); +// $side-nav-font-weight: bold; + +// We use these to control border styles + +// $side-nav-divider-size: 1px; +// $side-nav-divider-style: solid; +// $side-nav-divider-color: darken(#fff, 10%); + +// +// Sub Nav Variables +// + +// We use these to control margin and padding + +// $sub-nav-list-margin: em-calc(-4 0 18); +// $sub-nav-list-padding-top: em-calc(4); + +// We use this to control the definition + +// $sub-nav-font-size: em-calc(14); +// $sub-nav-font-color: #999; +// $sub-nav-font-weight: normal; +// $sub-nav-text-decoration: none; +// $sub-nav-border-radius: 1000px; + +// We use these to control the active item styles + +// $sub-nav-active-font-weight: bold; +// $sub-nav-active-bg: $primary-color; +// $sub-nav-active-color: #fff; +// $sub-nav-active-padding: em-calc(3 9); +// $sub-nav-active-cursor: default; + +// $sub-nav-item-divider: "" !default; +// $sub-nav-item-divider-margin: emCalc(12) !default; + +// +// Switch Variables +// + +// Controlling border styles and background colors for the switch container + +// $switch-border-color: darken(#fff, 20%); +// $switch-border-style: solid; +// $switch-border-width: 1px; +// $switch-bg: #fff; + +// We use these to control the switch heights for our default classes + +// $switch-height-tny: 22px; +// $switch-height-sml: 28px; +// $switch-height-med: 36px; +// $switch-height-lrg: 44px; +// $switch-bottom-margin: em-calc(20); + +// We use these to control default font sizes for our classes. + +// $switch-font-size-tny: 11px; +// $switch-font-size-sml: 12px; +// $switch-font-size-med: 14px; +// $switch-font-size-lrg: 17px; +// $switch-label-side-padding: 6px; + +// We use these to style the switch-paddle + +// $switch-paddle-bg: #fff; +// $switch-paddle-fade-to-color: darken($switch-paddle-bg, 10%); +// $switch-paddle-border-color: darken($switch-paddle-bg, 35%); +// $switch-paddle-border-width: 1px; +// $switch-paddle-border-style: solid; +// $switch-paddle-transition-speed: .1s; +// $switch-paddle-transition-ease: ease-out; +// $switch-positive-color: lighten($success-color, 50%); +// $switch-negative-color: #f5f5f5; + +// Outline Style for tabbing through switches + +// $switch-label-outline: 1px dotted #888; + +// +// Table Variables +// + +// These control the background color for the table and even rows + +// $table-bg: #fff; +// $table-even-row-bg: #f9f9f9; + +// These control the table cell border style + +// $table-border-style: solid; +// $table-border-size: 1px; +// $table-border-color: #ddd; + +// These control the table head styles + +// $table-head-bg: #f5f5f5; +// $table-head-font-size: em-calc(14); +// $table-head-font-color: #222; +// $table-head-font-weight: bold; +// $table-head-padding: em-calc(8 10 10); + +// These control the row padding and font styles + +// $table-row-padding: em-calc(9 10); +// $table-row-font-size: em-calc(14); +// $table-row-font-color: #222; +// $table-line-height: em-calc(18); + +// These are for controlling the display and margin of tables + +// $table-display: table-cell; +// $table-margin-bottom: em-calc(20); + +// +// Image Thumbnail Variables +// + +// We use these to control border styles + +// $thumb-border-style: solid; +// $thumb-border-width: 4px; +// $thumb-border-color: #fff; +// $thumb-box-shadow: 0 0 0 1px rgba(#000,.2); +// $thumb-box-shadow-hover: 0 0 6px 1px rgba($primary-color,0.5); + +// Radius and transition speed for thumbs + +// $thumb-radius: $global-radius; +// $thumb-transition-speed: 200ms; + +// +// Tooltip Variables +// + +// $has-tip-border-bottom: dotted 1px #ccc; +// $has-tip-font-weight: bold; +// $has-tip-font-color: #333; +// $has-tip-border-bottom-hover: dotted 1px darken($primary-color, 20%); +// $has-tip-font-color-hover: $primary-color; +// $has-tip-cursor-type: help; + +// $tooltip-padding: em-calc(8); +// $tooltip-bg: #000; +// $tooltip-font-size: em-calc(15); +// $tooltip-font-weight: bold; +// $tooltip-font-color: #fff; +// $tooltip-line-height: 1.3; +// $tooltip-close-font-size: em-calc(10); +// $tooltip-close-font-weight: normal; +// $tooltip-close-font-color: #888; +// $tooltip-font-size-sml: em-calc(14); +// $tooltip-radius: $global-radius; +// $tooltip-pip-size: 5px; + +// +// Top Bar Variables +// + +// Background color for the top bar + +$topbar-bg-color: $color_white; // LibrarySite Edit +$topbar-bg: $topbar-bg-color; + +// Height and margin + +// $topbar-height: 45px; +// $topbar-margin-bottom: 0; + +// Control Input height for top bar + +// $topbar-input-height: 2.45em; + +// Controlling the styles for the title in the top bar + +// $topbar-title-weight: bold; +// $topbar-title-font-size: em-calc(17); + +// Style the top bar dropdown elements + +$topbar-dropdown-bg: $color_white; // LibrarySite Edit +$topbar-dropdown-link-color: $color_gray_dark; // LibrarySite Edit +$topbar-dropdown-link-bg: $color_white; // LibrarySite Edit +// $topbar-dropdown-toggle-size: 5px; +$topbar-dropdown-toggle-color: $color_gray_dark; // LibrarySite Edit +// $topbar-dropdown-toggle-alpha: 0.5; + +// Set the link colors and styles for top-level nav + +$topbar-link-color: $color_gray_dark; // LibrarySite Edit +$topbar-link-color-hover: $color_white; // LibrarySite Edit +$topbar-link-color-active: $color_gray_medium; // LibrarySite Edit +// $topbar-link-weight: bold; +// $topbar-link-font-size: em-calc(13); +// $topbar-link-hover-lightness: -30%; // Darken by 30% +$topbar-link-bg-hover: $color_gray_medium; // LibrarySite Edit +$topbar-link-bg-active: $color_white; // LibrarySite Edit + +// $topbar-dropdown-label-color: #555; +// $topbar-dropdown-label-text-transform: uppercase; +// $topbar-dropdown-label-font-weight: bold; +// $topbar-dropdown-label-font-size: em-calc(10); +// $topbar-dropdown-label-bg: lighten($topbar-bg-color, 5%); + +// Top menu icon styles + +// $topbar-menu-link-transform: uppercase; +// $topbar-menu-link-font-size: em-calc(13); +// $topbar-menu-link-weight: bold; +$topbar-menu-link-color: $color_gray_dark; // LibrarySite Edit +$topbar-menu-icon-color: $color_gray_dark; // LibrarySite Edit +$topbar-menu-link-color-toggled: $color_gray_dark; // LibrarySite Edit +$topbar-menu-icon-color-toggled: $color_gray_dark; // LibrarySite Edit + +// Transitions and breakpoint styles + +// $topbar-transition-speed: 300ms; +// **Note:** If this value is changed we should also change the value being +// checked against in `Drupal.behaviors.libraryzurbPhoneNumberLinksOnMobile` in +// libraryzurb/js/scripts.js. +$topbar-breakpoint: 769px; // LibrarySite Edit +$large-fixed: 1281px; // screen fixed after 1280 resolution +// $topbar-media-query: "only screen and (min-width: #{$topbar-breakpoint})"; + +// Divider Styles + +// $topbar-divider-border-bottom: solid 1px lighten($topbar-bg-color, 10%); +// $topbar-divider-border-top: solid 1px darken($topbar-bg-color, 10%); + +// Sticky Class + +// $topbar-sticky-class: ".sticky"; +// $topbar-arrows: true; //Set false to remove the triangle icon from the menu item +//include font-family + +@mixin font-face($name: null, $style: null, $exts: eot woff2 woff ttf svg, $style: normal, $weight: normal ) { + $src: null; + + $extmods: ( + eot: "?", + svg: "#" + str-replace($name, " ", "_") + ); + + $formats: ( + otf: "opentype", + ttf: "truetype" + ); + + @each $ext in $exts { + $extmod: if(map-has-key($extmods, $ext), $ext + map-get($extmods, $ext), $ext); + $format: if(map-has-key($formats, $ext), map-get($formats, $ext), $ext); + $src: append($src, url(quote($path + "." + $extmod)) format(quote($format)), comma); + } + + @font-face { + font-family: quote($name); + font-style: $style; + font-weight: $weight; + src: $src; + } +} + @font-face { + font-family: "McLaren-Regular"; + src: url('../fonts/libraryzurb-fonts/McLaren-Regular.ttf'); + font-weight: normal; + font-style: normal; + } + @font-face { + font-family: "Pt-seriefbold"; + src: url('../fonts/libraryzurb-fonts/PTF75F.ttf'); + } + @font-face { + font-family: "Pt-seriefregular"; + src: url('../fonts/libraryzurb-fonts/PTF55F.ttf'); + } + @font-face { + font-family: "Arialbold"; + src: url('../fonts/libraryzurb-fonts/arialbd.ttf'); + } + @font-face { + font-family: "Arialregular"; + src: url('../fonts/libraryzurb-fonts/Chn_Prop_Arial_Normal.ttf'); + } + diff --git a/docroot/sites/all/themes/libraryzurb_teen/scss/base/_common.scss b/docroot/sites/all/themes/libraryzurb_teen/scss/base/_common.scss new file mode 100644 index 00000000..35688be7 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/scss/base/_common.scss @@ -0,0 +1,213 @@ +// Common abstract classes to extend or parametrics are stored here. + +// Example parametrics. +// ------------------------------------------------------ +// %font-FONTNAME {} +// %font-sans-serif { font-family: sans-serif; } +// %font-serif { font-family: serif; } + +.pagination.pager { + float: right; + margin-right: 10px; + li { + border-left: 1px solid transparent; + padding: 0; + height: 33px; + &.current { + a { + background: $blue; + &:hover { + background: $blue; + } + } + } + a { + background: $orange; + padding: 5px 10px; + color: $white; + text-decoration: none; + width: 31px; + height: 33px; + padding: 0 !important; + text-decoration: none !important; + font-size: 17px; + line-height: 34px; + &:hover { + background: $blue; + } + } + + &.arrow { + &:nth-of-type(2) { + a { + color: transparent !important; + background: $orange url('../images/libraryzurb/left-arrow.png') no-repeat !important; + background-position: center 7px; + width: 31px; + height: 33px; + background-size: 18px; + border-radius: 12px 0px 0px 12px; + } + + } + &:nth-last-of-type(2) { + a { + color: transparent !important; + background: $orange url('../images/libraryzurb/right-arrow.png') no-repeat !important; + background-position: center 4px; + width: 31px; + height: 33px; + background-size: 18px; + border-radius: 0px 12px 12px 0px; + + } + } + &.first, &.last { + display: none; + } + } + } +} +.view .views-field-body { + @include arialregular; +} +.page-patron ul.action-links { + display: none; +} +.view-empty a { + display: inline-block; + margin-top: 10px; + background: $blue !important; + color: $white !important; + width: 100%; + margin-left: 0 !important; + @include noborder; + &:hover { + background: $blue !important; + color: $white !important; + text-decoration: underline !important; + } +} +h1#page-title { + @include mclaren; + color: $black; + font-size: 28px; +} +.views-field-count { + padding-left: 17px; +} +.more-link { + text-align: right; + a { + @include mclaren; + position: relative; + font-size: 17px; + text-transform: capitalize; + padding-right: 20px; + &:after { + @include previous(17px, 17px, $right: 0, $top: 1px); + background: url('../images/libraryzurb/right-blue-arrow.png') no-repeat; + background-size: 15px; + } + } +} +.page-user { + .alert-box { + &:nth-of-type(2) { + display: none; + } + } +} +.homebox-column-wrapper { + @media screen and (max-width: 767px) { + width: 100% !important; + .homebox-column { + height: auto !important; + padding: 0 !important; + } + } +} +.more-link { + text-align: right; + width: 100%; + a { + @include mclaren; + position: relative; + font-size: 17px; + text-transform: capitalize; + padding-right: 20px; + &:after { + @include previous(17px, 17px, $right: 0, $top: 12%); + background: url('../images/libraryzurb/right-blue-arrow.png') no-repeat; + background-size: 15px; + } + } + } + .page-patron { + .button-group { + &:nth-of-type(1) { + li { + display: none; + } + } + &:nth-of-type(2) { + float: left; + a { + font-size: 17px !important; + @include noborder; + background: $yellow !important; + &:hover { + background: $button-hover; + } + } + li { + &:nth-of-type(1) { + display: none; + } + } + } + } + #edit-profile-main-field-user-birthday { + width: 100%; + display: inline-block; + } + } + /**css for login and signup button in unauthencated pages***/ + .not-logged-in { + .pre-header { + padding-bottom: 0 !important; + .pre-header-left { + .top-menu { + float: none !important; + width: 100% !important; + .block-menu-menu-authenticated-links { + float: right; + margin-bottom: 0; + .menu { + li { + a { + @include bluebutton($font-size: 17px); + margin: 5px !important; + } + } + } + } + } + } + } + } + form#user-pass { + span { + &.form-required { + display: none; + } + } + div { + &.user_pass_name { + &:after { + content: "*"; + color: $red; + } + } + } + } \ No newline at end of file diff --git a/docroot/sites/all/themes/libraryzurb_teen/scss/base/_drupal.scss b/docroot/sites/all/themes/libraryzurb_teen/scss/base/_drupal.scss new file mode 100644 index 00000000..2a36a58e --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/scss/base/_drupal.scss @@ -0,0 +1,46 @@ +// Drupal comes with CSS quirks (Drupalisms). Unravel or override them here. + +// Make the "sticky" Top Bar play nice with the "fixed" Admin Menu. +.admin-menu .fixed { + top: emCalc(29px); +} + +// Remove the bottom padding on status messages when displayed inside a Zurb +// Foundation Reveal modal. +#status-messages.reveal-modal { + .alert-box { + margin-bottom: 0; + } +} + +// Fix Zurb Foundation Reveal Modal z-index and make it play nice with dropdown +// menus, lightboxes, etc. +.reveal-modal { + z-index: 999; +} + +// Override Drupal Core pager styles. This is necessary because we need to keep +// the .pager class on pagers for Views AJAX to work. If you are disabling +// Drupal Core CSS you can safely comment the following lines. +.item-list .pager { + clear: none; +} + +.item-list .pager li { + padding: 0; + margin: 0; + display: inline-block; +} + +// Prevent contextual links icon from having a background color on hover. +.contextual-links-region .contextual-links-wrapper a { + background-color: transparent; +} +.contextual-links-region-active { + .contextual-links-trigger-active:hover { + background-color: transparent; + } + .contextual-links-active .contextual-links-trigger-active:hover { + background-color: #fff; + } +} diff --git a/docroot/sites/all/themes/libraryzurb_teen/scss/base/_elements.scss b/docroot/sites/all/themes/libraryzurb_teen/scss/base/_elements.scss new file mode 100644 index 00000000..0dd188ee --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/scss/base/_elements.scss @@ -0,0 +1,59 @@ +// Elements +// +// Things to review before you write code here: +// - Be sure to load after "foundation" import. +// - Also, before adding styles be sure to modify variables in the +// "scss/_variables.scss" file. You may not need to write any code. + +// Headings +//------------------------------------------ +// h1, h2, h3, +// h4, h5, h6 {} + +// Anchors +//----------------------------------------------------------------------------- +// a {} + +// a:focus {} + +// a.active, +// a:active, +// a:hover {} + +// Form Input +//----------------------------------------------------------------------------- +// input[type="text"], +// input[type="password"], +// input[type="date"], +// input[type="datetime"], +// input[type="datetime-local"], +// input[type="month"], +// input[type="week"], +// input[type="email"], +// input[type="number"], +// input[type="search"], +// input[type="tel"], +// input[type="time"], +// input[type="url"], +// textarea { +// } + + +// input[type="text"], +// input[type="password"], +// input[type="date"], +// input[type="datetime"], +// input[type="datetime-local"], +// input[type="month"], +// input[type="week"], +// input[type="email"], +// input[type="number"], +// input[type="search"], +// input[type="tel"], +// input[type="time"], +// input[type="url"], +// textarea { + +// } + +// select {} diff --git a/docroot/sites/all/themes/libraryzurb_teen/scss/base/_init.scss b/docroot/sites/all/themes/libraryzurb_teen/scss/base/_init.scss new file mode 100755 index 00000000..484ae414 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/scss/base/_init.scss @@ -0,0 +1,58 @@ +// Make sure the charset is set appropriately +@charset "UTF-8"; + +// This init file is a base partial that you can use to bootstrap the theme. +// The theme will have compilation errors if not imported. +// +// This file is forked version of the foundation.scss file: +// https://github.com/zurb/foundation/blob/master/scss/foundation.scss + +// Global Zurb Foundation variables. +@import "variables"; +// Comment out this import if you don't want to use normalize. +@import "normalize"; +// Comment out this import below if you are customizing you imports below. +@import "foundation"; +// Uncomment this import if you want to use Compass. +// @import "compass"; + +// Or optionally, if you require only portions of Zurb Foundation (at your own +// risk), comment the above Foundation import and uncomment the ones below. + +/* Each individual part that can be added in */ +// @import "foundation/components/global"; +// @import "foundation/components/grid"; +// @import "foundation/components/visibility"; +// @import "foundation/components/block-grid"; +// @import "foundation/components/type"; +// @import "foundation/components/buttons"; +// @import "foundation/components/forms"; // *requires components/buttons +// @import "foundation/components/custom-forms"; // *requires components/buttons, components/forms +// @import "foundation/components/button-groups"; // *requires components/buttons +// @import "foundation/components/dropdown-buttons"; // *requires components/buttons +// @import "foundation/components/split-buttons"; // *requires components/buttons +// @import "foundation/components/flex-video"; +// @import "foundation/components/section"; +// @import "foundation/components/top-bar"; // *requires components/grid +// @import "foundation/components/orbit"; +// @import "foundation/components/reveal"; +// @import "foundation/components/joyride"; +// @import "foundation/components/clearing"; +// @import "foundation/components/alert-boxes"; +// @import "foundation/components/breadcrumbs"; +// @import "foundation/components/keystrokes"; +// @import "foundation/components/labels"; +// @import "foundation/components/inline-lists"; +// @import "foundation/components/pagination"; +// @import "foundation/components/panels"; +// @import "foundation/components/pricing-tables"; +// @import "foundation/components/progress-bars"; +// @import "foundation/components/side-nav"; +// @import "foundation/components/sub-nav"; +// @import "foundation/components/switch"; +// @import "foundation/components/magellan"; +// @import "foundation/components/tables"; +// @import "foundation/components/thumbs"; +// @import "foundation/components/tooltips"; +// @import "foundation/components/dropdown"; + diff --git a/docroot/sites/all/themes/libraryzurb_teen/scss/base/_mixins.scss b/docroot/sites/all/themes/libraryzurb_teen/scss/base/_mixins.scss new file mode 100644 index 00000000..4d3268fa --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/scss/base/_mixins.scss @@ -0,0 +1,305 @@ +// @file +// Place your mixins here. Feel free to roll your own mixins. Or nuke what is +// currently here. + +// +// Mixin: Base Utility +// + + //css before and after + @mixin previous($width, $height, $top: null, $bottom: null, $left: null, $right: null) { + content: ""; + width: $width; + height: $height; + display: block; + visibility: visible; + position: absolute; + top: $top; + bottom: $bottom; + left: $left; + right: $right; +} +// generic transform + +@mixin rotate($degrees, $dir: null ) { + + @if $dir == "Y" { + -webkit-transform: rotateY($degrees); + -moz-transform: rotateY($degrees); + -ms-transform: rotateY($degrees); + -o-transform: rotateY($degrees); + transform: rotateY($degrees); + } @else if $dir == "X" { + -webkit-transform: rotateX($degrees); + -moz-transform: rotateX($degrees); + -ms-transform: rotateX($degrees); + -o-transform: rotateX($degrees); + transform: rotateX($degrees); + } @else { + -webkit-transform: rotate($degrees); + -moz-transform: rotate($degrees); + -ms-transform: rotate($degrees); + -o-transform: rotate($degrees); + transform: rotate($degrees); + } +} +//media query + +@mixin tablet { + @media (min-width: #{$tablet-width}) and (max-width: #{$desktop-width - 1px}) { + @content; + } +} +@mixin desktop { + @media (min-width: #{$desktop-width}) { + @content; + } +} +@mixin mobile { + @media (max-width: #{$mobile-width}) { + @content; + } +} +@mixin mini { + @media (min-width: #{$tablet-width}) and (max-width: #{$medium-width}) { + @content; + } +} + +//for optimise sass coding + +@mixin stage { + position: absolute; + left: -999em; +} + +@mixin unstage { + position: static; + left: auto; +} +@mixin boxshadow { + -webkit-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + -moz-box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + box-shadow: 3px 3px 6px -1px rgba(0, 0, 0, 0.5); + } + @mixin mclaren { + font-family: McLaren-Regular !important; + font-weight: normal !important; + font-style: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; +} +@mixin noborder { + border: none !important; + outline: none !important; +} +@mixin arialregular { + font-family: arial !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; +} +@mixin arialbold { + font-family: Arialbold !important; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; + -moz-osx-font-smoothing: grayscale !important; + -moz-font-smoothing: grayscale !important; +} +@mixin orange-blue { + background: $blue; + overflow: hidden; + border-radius: 20px; + color: $white; + position: relative; + @include boxshadow; + .block-title, h2 { + color: $white; + @include mclaren; + padding-top: 26px; + padding-bottom: 25px; + font-size: 28px; + @include mobile{ + font-size: 22px; + } + height: 110px; + border-bottom: medium none; + margin-top: -1px; + padding-left:36px; + z-index: 0; + position: relative; + font-weight: normal !important; + border-radius: 20px; + overflow: hidden; + &:after { + @include previous(100%, 110px, $left: 0, $top: 0); + background: url('../images/libraryzurb/background-saffron.png') no-repeat; + background-position: -35px 10px; + @include rotate(180deg); + z-index: -1; + + + } + } +} +@mixin yellowbutton($p: null) { + color: $black; + @include mclaren; + border-radius: 10px; + background: $yellow !important; + text-transform: capitalize; + border: none; + @if $p == "P" { + padding: $button-sml 10px; + word-spacing: -2px; + } + @else { + padding: $button-sml 20px; + } + @include boxshadow; + &:hover { + color: $black; + background: $button-hover !important; + opacity: 1; + outline: none; + text-decoration: none !important; + } + &:focus, &.active { + color: $black; + background: $button-active !important; + outline: 1; + opacity: 1; + text-decoration: none !important; + } + +} +@mixin bluebutton($font-size: null) { + color: $white !important; + @include mclaren; + background: $blue !important; + border-radius: 10px; + padding: 9px 22px; + @include boxshadow; + border: none; + text-transform: capitalize; + font-size: $font-size; + &:hover, &:focus { + color: $white; + background: $blue; + opacity: 1; + outline: none; + } + +} +@mixin yellowbackground { + color: $white; + border-radius: 20px; + background: $yellow; + @include boxshadow; + +} +@mixin like { + position: relative; + padding-right: 34px; + &:after { + @include previous(30px, 30px, $right: 0, $top: 0px); + background: url('../images/libraryzurb/smily-white.png') no-repeat; + } +} +@mixin bluebackground { + background: $blue !important; + overflow: hidden; + border-radius: 20px; + color: $white; + position: relative; + @include boxshadow; +} +@mixin waveimg($ch-font: null) { + color: $white; + @include mclaren; + padding-top: 26px; + padding-bottom: 25px; + + @if $ch-font == "C" { + font-size: 22px; + @include mobile { + font-size: 17px; + } + } + @else { + font-size: 28px; + @include mobile { + font-size: 22px; + } + } + height: 110px; + border-bottom: medium none; + margin-top: -1px; + padding-left:36px; + z-index: 0; + position: relative; + border-radius: 20px; + overflow: hidden; + &:after { + @include previous(100%, 110px, $left: 0, $top: 0); + background: url('../images/libraryzurb/background-saffron.png') no-repeat; + background-position: -35px 10px; + @include rotate(180deg); + z-index: -1; + + } + } +@mixin nobackground { + background: none !important; +} +@mixin bluebox { + background: $blue !important; + box-shadow: none !important; + opacity: 1 !important; +} +@mixin counter { + counter-increment: section; + content: " " counter(section, decimal) ". "; + padding-right: 5px; + display: inline-block; +} +@mixin animate { + -webkit-transition-duration: 0.8s; + -moz-transition-duration: 0.8s; + -o-transition-duration: 0.8s; + transition-duration: 0.8s; + + -webkit-transition-property: -webkit-transform; + -moz-transition-property: -moz-transform; + -o-transition-property: -o-transform; + transition-property: transform; +} +@mixin block { + margin-bottom: 35px; + @include mobile { + margin-bottom: 25px; + } +} +@mixin white-text { + color: $white !important; + @include mclaren; +} +@mixin black-text { + color: $black; + @include arialregular; + opacity: 1 !important; +} +@mixin blue-text { + color: $blue; + @include mclaren; + &:hover { + color: $blue; + } + +} +@mixin bck_size_tablet { + @include tablet { + background-size: 100% !important; + } +} diff --git a/docroot/sites/all/themes/libraryzurb_teen/scss/components/_blocks.scss b/docroot/sites/all/themes/libraryzurb_teen/scss/components/_blocks.scss new file mode 100644 index 00000000..09e945d5 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/scss/components/_blocks.scss @@ -0,0 +1,748 @@ +// Blocks + +.block { + &.block-private-msg-custom-homepage-slider { + @include bluebackground; + padding: 0 !important; + ul { + list-style: none; + position: absolute; + right: 40px; + z-index: 1; + top: 28px; + label { + width: 20px; + display: inline; + font-size: 10px; + } + input[type=radio] { + visibility: hidden; + position: absolute; + } + input[type=radio] + label:before { + height:20px; + width:20px; + margin-right: 10px; + content: " "; + display:inline-block; + vertical-align: baseline; + border:1px solid $white; + background: $white; + border-radius: 100%; + } + input[type=radio]:checked + label:before { + background:$blue; + border: 1px solid $blue; + } + + } + .slide { + padding-bottom: 50px; + .view { + .view-header { + @include waveimg; + } + .view-content { + padding-top: 17px; + } + .view-footer { + position: relative; + top: 30px; + left: 22px; + } + } + } + .owl-controls { + position: absolute; + top: 36%; + width: 100%; + height: 0; + .owl-pagination { + display: none; + } + .owl-buttons { + .owl-prev { + float: left; + background: url('../images/libraryzurb/left-arrow.png') no-repeat; + opacity: 1; + color: transparent; + border-radius: 0; + margin-left: -28px; + padding: 10px; + + } + .owl-next { + float: right; + background: url('../images/libraryzurb/right-arrow.png') no-repeat; + opacity: 1; + color: transparent; + border-radius: 0; + margin-right: -45px; + padding: 10px; + + } + } + } + .slide { + padding-bottom: 50px; + .view { + .view-header { + @include waveimg; + text-transform: capitalize; + } + } + } + .owl-controls { + position: absolute; + top: 36%; + width: 100%; + height: 0; + .owl-pagination { + display: none; + } + .owl-buttons { + .owl-prev { + float: left; + background: url('../images/libraryzurb/left-arrow.png') no-repeat; + opacity: 1; + color: transparent; + border-radius: 0; + margin-left: -28px; + padding: 10px; + + } + .owl-next { + float: right; + background: url('../images/libraryzurb/right-arrow.png') no-repeat; + opacity: 1; + color: transparent; + border-radius: 0; + margin-right: -45px; + padding: 10px; + + } + } + } + } + &.block-auto-role-allocation-calendar-data.header { + display: none; + } + margin-bottom: 35px; + @include mobile { + margin-bottom: 25px; + } + &.block-views-event-activities-block-1 { + @include bluebackground; + padding: 10px 22px; + .block-title { + font-size: 22px; + color: $white; + @include mclaren; + } + .view-event-activities { + a { + font-size: 17px; + color: $white; + text-decoration: underline; + @include arialregular; + } + } + } + &.badge-reward-list { + margin-bottom: 0 !important; + .badge_list { + @include mclaren; + font-size: 28px; + } + } + &.dashboard-block { + .pagination.pager li { + @include noborder; + } + @include orange-blue; + .view { + display: table; + width: 100%; + padding: 12px 2.3%; + position: relative; + .attachment { + width: 50%; + display: table-cell; + position: relative; + bottom: 26px; + .view { + padding: 0 !important; + display: inline-block; + .view-content { + float: left; + display: inline-block; + width: 100%; + .views-row { + display: table; + margin-bottom: 0; + img { + margin: 0px 5px 0px 0px; + @include noborder; + background: $white; + } + .views-field { + display: table-cell; + height: 100%; + vertical-align: bottom; + &.views-field-name { + a { + color: $white; + @include arialbold; + } + } + } + } + } + } + } + .view-content { + width: 50%; + float: right; + display: table-cell; + table { + float: right; + } + table, table tr.even, table tr.alt, table tr:nth-of-type(2n) { + background: none !important; + @include noborder; + } + table tr td .views-field { + h2 { + display: none; + } + .content { + display: inline-block; + background: $white; + } + } + } + .item-list { + position: absolute; + top: -17px; + right: 4%; + display: block; + .pagination { + li { + margin-left: 10px; + a { + color: transparent !important; + position: relative; + background: transparent; + &:hover { + background: transparent; + } + &:after { + @include previous(20px, 20px, $top: 0, $left: 0); + border-radius: 100%; + background: $white; + } + } + &.current { + a { + &:after { + background: $orange !important; + } + } + } + &.arrow { + display: none; + } + } + } + } + } + } + &.block-views-booklist-slideshow-block-2 { + h2.block-title { + @include mclaren; + font-size: 25px; + color: $black; + @include noborder; + margin-bottom: 33px; + + } + } + &.bordr-bottom { + border-bottom: 1px solid $light-gray; + padding-bottom: 20px; + } + &.block-private-msg-custom { + @include yellowbackground; + padding: 35px; + width: 100%; + display: inline-block; + h2 { + color: $black; + margin-top: 0; + font-size: 28px; + @include mclaren; + @include noborder; + } + .pm-custom { + width: 100%; + display: inline-block; + position: relative; + .pm-view { + position: absolute; + top: 29%; + right: -6px; + padding: 12px 22px; + @include bluebutton($font-size: 17px); + } + .pm { + width: 90%; + display: inline-block; + margin-bottom: 25px; + .pm-subject { + width: 60%; + float: left; + color: $red; + font-size: 17px; + @include arialbold; + a { + color: $black; + line-height: 1; + } + .pm-new { + float: left; + padding-right: 10px; + color: $red; + position: relative; + top: 5px; + } + } + .pm-admin { + width: 19%; + float: left; + font-size: 17px; + @include arialregular; + color: $black; + } + .pm-date { + float: left; + width: 19%; + color: $black; + font-size: 17px; + @include arialregular; + } + + } + } + } + + &.block-user-login { + @include orange-blue; + .block-title { + padding-left: 11.5%; + } + form { + width: 100%; + max-width: 77%; + margin: 0 auto; + label { + @include white-text; + } + ul { + list-style: none; + li { + margin-left: 0; + a { + @include white-text; + } + } + } + button { + @include yellowbutton; + margin-left: 0; + } + } + } + &.review-booklist-block { + background: $white; + border-radius: 20px; + padding-left: 10px; + padding-right: 10px; + margin-bottom: 48px; + @include boxshadow; + @include mclaren; + .block-title { + border-top: none; + padding: 10px; + padding-left: 22.6%; + a { + @include mclaren; + font-size: 22px; + color: $black; + position: relative; + &.active { + color: $orange !important; + &:before { + @include previous(25px, 25px, $top: 3px, $left: -31px); + background: url('../images/libraryzurb/star.png') no-repeat; + } + } + } + } + ul { + &.menu { + margin-bottom: 6px; + li { + padding: 6px 0px 0px 22.6%; + a { + color: $black; + font-size: 22px; + &:focus { + outline: none; + } + } + &.active { + + a { + color: $orange !important; + position: relative; + @include mclaren; + &:before { + @include previous(25px, 25px, $top: 3px, $left: -31px); + background: url('../images/libraryzurb/star.png') no-repeat; + } + + } + } + } + } + } + } + &.write-book-review { + margin-bottom: 0 !important; + h2.block-title { + margin-bottom: 25px; + } + + } + &.block-views-reward-earn-block, &.block-views-reward-earn-block-1 { + @include orange-blue; + .view { + display: table; + width: 100%; + .views-row { + display: table-row; + width: 100%; + .views-field { + &.views-field-field-badge-image { + width: 40%; + display: table-cell; + padding-left: 15px; + .field-content { + img { + margin-bottom: 10px; + } + } + } + &.views-field-title { + float: none; + width: 50%; + display: table-cell; + vertical-align: middle; + padding-left: 2%; + + } + } + } + } + .view-footer { + padding-left: 15px; + } + } + &.announcement { + background: $yellow url('../images/libraryzurb/annocement.png') no-repeat; + background-size: 100%; + background-position: center center; + color: $black; + border-radius: 20px; + @include boxshadow; + .block-title { + padding: 26px 36px; + border: none; + color: $black; + font-size: 28px; + @include mobile { + font-size: 18px; + } + @include mclaren; + } + .views-field-body { + p { + padding-left: 36px; + @include arialbold; + @include mobile { + font-size: 14px; + } + } + ol { + margin-left: 70px; + padding-bottom: 40px; + list-style: none; + + li { + position: relative; + font-size: 18px; + @include mobile { + font-size: 14px; + } + @include arialregular; + &:after { + @include previous(47px, 21px, $left: -32px, $top: 3px); + background: url('../images/libraryzurb/arrow-list.png') no-repeat; + } + } + } + } + } + &.homepage-blocks { + background: $blue; + overflow: hidden; + border-radius: 20px; + color: $white; + position: relative; + @include boxshadow; + &.playlib-books { + .owl-carousel { + position: inherit; + .owl-item { + .views-field { + display: flex; + align-items: center; + justify-content: center; + height: 240px; + img { + width: 100%; + } + + } + } + .owl-controls { + position: absolute; + top: 20px; + right: 30px; + .owl-pagination { + .owl-page { + &.active { + span { + background: $blue; + } + } + span { + opacity: 1; + width: 20px; + height: 20px; + background: $white; + } + } + } + .owl-buttons { + display: none; + } + } + + } + } + &.playlib-media { + .owl-carousel { + .owl-item { + text-align: center; + } + .views-field.views-field-field-video-link { + width: 136px; + } + .flickr-wrap .flickr-photo-img:hover, img.flickr-photoset-img:hover { + transform: none; + top: 0; + border: none; + } + span.flickr-credit, .flickr-citation { + display: none; + } + .flickr-photo-img, img.flickr-photoset-img { + box-shadow: none; + border: none; + border-radius: 0; + height: 100px; + width: 136px; + } + .owl-controls { + position: absolute; + top: 20%; + width: 100%; + height: 0; + .owl-pagination { + display: none; + } + .owl-buttons { + .owl-prev { + float: left; + background: url('../images/libraryzurb/left-arrow.png') no-repeat; + opacity: 1; + color: transparent; + border-radius: 0; + margin-left: -28px; + padding: 10px; + + } + .owl-next { + float: right; + background: url('../images/libraryzurb/right-arrow.png') no-repeat; + opacity: 1; + color: transparent; + border-radius: 0; + margin-right: -45px; + padding: 10px; + + } + } + } + } + } + .block-title { + @include waveimg; + } + p { + padding-left: 40px; + padding-right: 40px; + font-size: 18px; + line-height: 1.4; + } + + } + &.footer-playlibdetails, &.playlib-copyright, &.footer-playlibpolicies { + width: 100%; + text-align: left !important; + float: none !important; + clear: both; + } + &.footer-playlibdetails { + margin-bottom: 25px !important; + @include mobile { + margin-top: 50px; + } + } + &.footer-playlibdetails, &.footer-playlibpolicies { + font-size: 14px !important; + @include arialbold; + } + &.playlib-copyright { + position: relative; + span#at-rate { + @include mclaren; + font-size: 22px !important; + height: 0; + position: relative; + top: 3px; + } + span#year-lib { + @include arialregular; + font-size: 12px !important; + + } + } + &.block-menu-menu-social-sharing-icons { + position: absolute; + top: 0; + right: 0; + + @include mobile { + left: 0 !important; + width: 100%; + } + .block-title { + display: none; + border-bottom: none; + } + ul.menu { + @include mobile { + width: 100%; + max-width: 225px; + margin: 0 auto; + } + li { + border-right: none !important; + width: 50px; + float: left; + a { + color: transparent !important; + position: relative; + &:after { + @include previous(38px, 38px, $top: 0, $left: 0); + @include animate; + border-radius: 100%; + @include boxshadow; + + } + + &.fb { + &:after { + background: url('../images/libraryzurb/facebook.png') no-repeat; + background-position: center; + background-size: 100%; + } + } + &.twit { + &:after { + background: url('../images/libraryzurb/twitter.png') no-repeat; + background-position: center; + background-size: 100%; + } + } + &.tmblr { + &:after { + background: url('../images/libraryzurb/tumbir.png') no-repeat; + background-position: center; + background-size: 100%; + } + } + &.pntrst { + &:after { + background: url('../images/libraryzurb/pinterest.png') no-repeat; + background-position: center; + background-size: 100%; + } + } + + &:hover { + &:after { + @include rotate(360deg); + } + } + } + } + } + + } +} +.block-title { + font-weight: normal !important; + text-transform: capitalize; +} +.view { + &.view-media-photos-videos- { + .view-footer { + button { + margin-top: 20px; + } + } + } +} + +// Drupal sytem blocks: +// .block-search {} +// .block-system {} + +.owl-carousel { + max-width: 89%; + margin: 0 auto; + +} \ No newline at end of file diff --git a/docroot/sites/all/themes/libraryzurb_teen/scss/components/_brand.scss b/docroot/sites/all/themes/libraryzurb_teen/scss/components/_brand.scss new file mode 100644 index 00000000..f59eb3db --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/scss/components/_brand.scss @@ -0,0 +1,47 @@ +/** + * Styles for the Brand area. + */ + +.brand a { + /* color: $color_gray_dark; */ + + &:focus, + &:hover { + /* background-color: transparent; + color: $color_gray_dark; */ + } +} + +#logo { + float: left; + margin: 0.75em 0.5em 0.75em 0; + width: 64px; + + @media only screen and (max-width: #{$topbar-breakpoint}) { + width: 64px; + } +} + +#site-name { + font-size: 1.5em; + line-height: 1em; + margin: 0.75em 0 0 0; + a { + color: $white; + font-size: 36px; + font-family: Pt-seriefbold; + } + + @media only screen and (max-width: #{$topbar-breakpoint}) { + margin-top: 0.75em; + } +} + +#site-slogan { + font-size: 23px; + line-height: 1em; + margin: 0.25em 0 0 0; + padding-left: 0.25em; + color: $white; + font-family: Pt-seriefregular; +} diff --git a/docroot/sites/all/themes/libraryzurb_teen/scss/components/_buttons.scss b/docroot/sites/all/themes/libraryzurb_teen/scss/components/_buttons.scss new file mode 100644 index 00000000..0a7de456 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/scss/components/_buttons.scss @@ -0,0 +1,55 @@ +/** + * Styles for buttons. + */ + +// Docs: http://foundation.zurb.com/docs/v/4.3.2/components/buttons.html +// +// Before adding styles be sure to modify variables in the +// "scss/_variables.scss" file. + +button, +.button { + padding: $button-sml 20px; + background: $yellow; + color: $black; + margin-left: 20px; + border: 1px solid $yellow; + border-radius: 10px; + font-size: 17px; + text-transform: capitalize; + @include mclaren; + @include boxshadow; + &:hover { + background: $button-hover; + color: $black; + outline: none; + text-decoration: none; + } + &:focus, &.active { + background: $button-active; + color: $black; + outline: none; + } + + a { + color: $black; + font-size: 17px; + text-transform: capitalize; + @include mclaren; + + &:hover { + outline: none; + color: $black; + background: $button-hover; + text-decoration: none; + @include noborder; + } + &:focus, &.active { + outline: none; + text-decoration: none; + color: $black; + background: $button-active; + } + } +} + diff --git a/docroot/sites/all/themes/libraryzurb_teen/scss/components/_forms.scss b/docroot/sites/all/themes/libraryzurb_teen/scss/components/_forms.scss new file mode 100644 index 00000000..e4e5d748 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/scss/components/_forms.scss @@ -0,0 +1,6 @@ +// Docs: http://foundation.zurb.com/docs/components/forms.html + +// Drupal specific classes +// ---------------------------------------------------------------------------- +.form-text {} +.form-submit {} diff --git a/docroot/sites/all/themes/libraryzurb_teen/scss/components/_foundation-icons.scss b/docroot/sites/all/themes/libraryzurb_teen/scss/components/_foundation-icons.scss new file mode 100644 index 00000000..83062921 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/scss/components/_foundation-icons.scss @@ -0,0 +1,596 @@ +/* + * Foundation Icons v 3.0 + * Made by ZURB 2013 http://zurb.com/playground/foundation-icon-fonts-3 + * MIT License + */ + +$font-path: '../fonts/foundation-icons'; + +@font-face { + font-family: "foundation-icons"; + src: url("#{$font-path}/foundation-icons.eot"); + src: url("#{$font-path}/foundation-icons.eot?#iefix") format("embedded-opentype"), + url("#{$font-path}/foundation-icons.woff") format("woff"), + url("#{$font-path}/foundation-icons.ttf") format("truetype"), + url("#{$font-path}/foundation-icons.svg#fontcustom") format("svg"); + font-weight: normal; + font-style: normal; +} + +.fi-address-book:before, +.fi-alert:before, +.fi-align-center:before, +.fi-align-justify:before, +.fi-align-left:before, +.fi-align-right:before, +.fi-anchor:before, +.fi-annotate:before, +.fi-archive:before, +.fi-arrow-down:before, +.fi-arrow-left:before, +.fi-arrow-right:before, +.fi-arrow-up:before, +.fi-arrows-compress:before, +.fi-arrows-expand:before, +.fi-arrows-in:before, +.fi-arrows-out:before, +.fi-asl:before, +.fi-asterisk:before, +.fi-at-sign:before, +.fi-background-color:before, +.fi-battery-empty:before, +.fi-battery-full:before, +.fi-battery-half:before, +.fi-bitcoin-circle:before, +.fi-bitcoin:before, +.fi-blind:before, +.fi-bluetooth:before, +.fi-bold:before, +.fi-book-bookmark:before, +.fi-book:before, +.fi-bookmark:before, +.fi-braille:before, +.fi-burst-new:before, +.fi-burst-sale:before, +.fi-burst:before, +.fi-calendar:before, +.fi-camera:before, +.fi-check:before, +.fi-checkbox:before, +.fi-clipboard-notes:before, +.fi-clipboard-pencil:before, +.fi-clipboard:before, +.fi-clock:before, +.fi-closed-caption:before, +.fi-cloud:before, +.fi-comment-minus:before, +.fi-comment-quotes:before, +.fi-comment-video:before, +.fi-comment:before, +.fi-comments:before, +.fi-compass:before, +.fi-contrast:before, +.fi-credit-card:before, +.fi-crop:before, +.fi-crown:before, +.fi-css3:before, +.fi-database:before, +.fi-die-five:before, +.fi-die-four:before, +.fi-die-one:before, +.fi-die-six:before, +.fi-die-three:before, +.fi-die-two:before, +.fi-dislike:before, +.fi-dollar-bill:before, +.fi-dollar:before, +.fi-download:before, +.fi-eject:before, +.fi-elevator:before, +.fi-euro:before, +.fi-eye:before, +.fi-fast-forward:before, +.fi-female-symbol:before, +.fi-female:before, +.fi-filter:before, +.fi-first-aid:before, +.fi-flag:before, +.fi-folder-add:before, +.fi-folder-lock:before, +.fi-folder:before, +.fi-foot:before, +.fi-foundation:before, +.fi-graph-bar:before, +.fi-graph-horizontal:before, +.fi-graph-pie:before, +.fi-graph-trend:before, +.fi-guide-dog:before, +.fi-hearing-aid:before, +.fi-heart:before, +.fi-home:before, +.fi-html5:before, +.fi-indent-less:before, +.fi-indent-more:before, +.fi-info:before, +.fi-italic:before, +.fi-key:before, +.fi-laptop:before, +.fi-layout:before, +.fi-lightbulb:before, +.fi-like:before, +.fi-link:before, +.fi-list-bullet:before, +.fi-list-number:before, +.fi-list-thumbnails:before, +.fi-list:before, +.fi-lock:before, +.fi-loop:before, +.fi-magnifying-glass:before, +.fi-mail:before, +.fi-male-female:before, +.fi-male-symbol:before, +.fi-male:before, +.fi-map:before, +.fi-marker:before, +.fi-megaphone:before, +.fi-microphone:before, +.fi-minus-circle:before, +.fi-minus:before, +.fi-mobile-signal:before, +.fi-mobile:before, +.fi-monitor:before, +.fi-mountains:before, +.fi-music:before, +.fi-next:before, +.fi-no-dogs:before, +.fi-no-smoking:before, +.fi-page-add:before, +.fi-page-copy:before, +.fi-page-csv:before, +.fi-page-delete:before, +.fi-page-doc:before, +.fi-page-edit:before, +.fi-page-export-csv:before, +.fi-page-export-doc:before, +.fi-page-export-pdf:before, +.fi-page-export:before, +.fi-page-filled:before, +.fi-page-multiple:before, +.fi-page-pdf:before, +.fi-page-remove:before, +.fi-page-search:before, +.fi-page:before, +.fi-paint-bucket:before, +.fi-paperclip:before, +.fi-pause:before, +.fi-paw:before, +.fi-paypal:before, +.fi-pencil:before, +.fi-photo:before, +.fi-play-circle:before, +.fi-play-video:before, +.fi-play:before, +.fi-plus:before, +.fi-pound:before, +.fi-power:before, +.fi-previous:before, +.fi-price-tag:before, +.fi-pricetag-multiple:before, +.fi-print:before, +.fi-prohibited:before, +.fi-projection-screen:before, +.fi-puzzle:before, +.fi-quote:before, +.fi-record:before, +.fi-refresh:before, +.fi-results-demographics:before, +.fi-results:before, +.fi-rewind-ten:before, +.fi-rewind:before, +.fi-rss:before, +.fi-safety-cone:before, +.fi-save:before, +.fi-share:before, +.fi-sheriff-badge:before, +.fi-shield:before, +.fi-shopping-bag:before, +.fi-shopping-cart:before, +.fi-shuffle:before, +.fi-skull:before, +.fi-social-500px:before, +.fi-social-adobe:before, +.fi-social-amazon:before, +.fi-social-android:before, +.fi-social-apple:before, +.fi-social-behance:before, +.fi-social-bing:before, +.fi-social-blogger:before, +.fi-social-delicious:before, +.fi-social-designer-news:before, +.fi-social-deviant-art:before, +.fi-social-digg:before, +.fi-social-dribbble:before, +.fi-social-drive:before, +.fi-social-dropbox:before, +.fi-social-evernote:before, +.fi-social-facebook:before, +.fi-social-flickr:before, +.fi-social-forrst:before, +.fi-social-foursquare:before, +.fi-social-game-center:before, +.fi-social-github:before, +.fi-social-google-plus:before, +.fi-social-hacker-news:before, +.fi-social-hi5:before, +.fi-social-instagram:before, +.fi-social-joomla:before, +.fi-social-lastfm:before, +.fi-social-linkedin:before, +.fi-social-medium:before, +.fi-social-myspace:before, +.fi-social-orkut:before, +.fi-social-path:before, +.fi-social-picasa:before, +.fi-social-pinterest:before, +.fi-social-rdio:before, +.fi-social-reddit:before, +.fi-social-skillshare:before, +.fi-social-skype:before, +.fi-social-smashing-mag:before, +.fi-social-snapchat:before, +.fi-social-spotify:before, +.fi-social-squidoo:before, +.fi-social-stack-overflow:before, +.fi-social-steam:before, +.fi-social-stumbleupon:before, +.fi-social-treehouse:before, +.fi-social-tumblr:before, +.fi-social-twitter:before, +.fi-social-vimeo:before, +.fi-social-windows:before, +.fi-social-xbox:before, +.fi-social-yahoo:before, +.fi-social-yelp:before, +.fi-social-youtube:before, +.fi-social-zerply:before, +.fi-social-zurb:before, +.fi-sound:before, +.fi-star:before, +.fi-stop:before, +.fi-strikethrough:before, +.fi-subscript:before, +.fi-superscript:before, +.fi-tablet-landscape:before, +.fi-tablet-portrait:before, +.fi-target-two:before, +.fi-target:before, +.fi-telephone-accessible:before, +.fi-telephone:before, +.fi-text-color:before, +.fi-thumbnails:before, +.fi-ticket:before, +.fi-torso-business:before, +.fi-torso-female:before, +.fi-torso:before, +.fi-torsos-all-female:before, +.fi-torsos-all:before, +.fi-torsos-female-male:before, +.fi-torsos-male-female:before, +.fi-torsos:before, +.fi-trash:before, +.fi-trees:before, +.fi-trophy:before, +.fi-underline:before, +.fi-universal-access:before, +.fi-unlink:before, +.fi-unlock:before, +.fi-upload-cloud:before, +.fi-upload:before, +.fi-usb:before, +.fi-video:before, +.fi-volume-none:before, +.fi-volume-strike:before, +.fi-volume:before, +.fi-web:before, +.fi-wheelchair:before, +.fi-widget:before, +.fi-wrench:before, +.fi-x-circle:before, +.fi-x:before, +.fi-yen:before, +.fi-zoom-in:before, +.fi-zoom-out:before { + font-family: "foundation-icons"; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + -webkit-font-smoothing: antialiased; + display: inline-block; + text-decoration: inherit; +} + +.fi-address-book:before { content: "\f100"; } +.fi-alert:before { content: "\f101"; } +.fi-align-center:before { content: "\f102"; } +.fi-align-justify:before { content: "\f103"; } +.fi-align-left:before { content: "\f104"; } +.fi-align-right:before { content: "\f105"; } +.fi-anchor:before { content: "\f106"; } +.fi-annotate:before { content: "\f107"; } +.fi-archive:before { content: "\f108"; } +.fi-arrow-down:before { content: "\f109"; } +.fi-arrow-left:before { content: "\f10a"; } +.fi-arrow-right:before { content: "\f10b"; } +.fi-arrow-up:before { content: "\f10c"; } +.fi-arrows-compress:before { content: "\f10d"; } +.fi-arrows-expand:before { content: "\f10e"; } +.fi-arrows-in:before { content: "\f10f"; } +.fi-arrows-out:before { content: "\f110"; } +.fi-asl:before { content: "\f111"; } +.fi-asterisk:before { content: "\f112"; } +.fi-at-sign:before { content: "\f113"; } +.fi-background-color:before { content: "\f114"; } +.fi-battery-empty:before { content: "\f115"; } +.fi-battery-full:before { content: "\f116"; } +.fi-battery-half:before { content: "\f117"; } +.fi-bitcoin-circle:before { content: "\f118"; } +.fi-bitcoin:before { content: "\f119"; } +.fi-blind:before { content: "\f11a"; } +.fi-bluetooth:before { content: "\f11b"; } +.fi-bold:before { content: "\f11c"; } +.fi-book-bookmark:before { content: "\f11d"; } +.fi-book:before { content: "\f11e"; } +.fi-bookmark:before { content: "\f11f"; } +.fi-braille:before { content: "\f120"; } +.fi-burst-new:before { content: "\f121"; } +.fi-burst-sale:before { content: "\f122"; } +.fi-burst:before { content: "\f123"; } +.fi-calendar:before { content: "\f124"; } +.fi-camera:before { content: "\f125"; } +.fi-check:before { content: "\f126"; } +.fi-checkbox:before { content: "\f127"; } +.fi-clipboard-notes:before { content: "\f128"; } +.fi-clipboard-pencil:before { content: "\f129"; } +.fi-clipboard:before { content: "\f12a"; } +.fi-clock:before { content: "\f12b"; } +.fi-closed-caption:before { content: "\f12c"; } +.fi-cloud:before { content: "\f12d"; } +.fi-comment-minus:before { content: "\f12e"; } +.fi-comment-quotes:before { content: "\f12f"; } +.fi-comment-video:before { content: "\f130"; } +.fi-comment:before { content: "\f131"; } +.fi-comments:before { content: "\f132"; } +.fi-compass:before { content: "\f133"; } +.fi-contrast:before { content: "\f134"; } +.fi-credit-card:before { content: "\f135"; } +.fi-crop:before { content: "\f136"; } +.fi-crown:before { content: "\f137"; } +.fi-css3:before { content: "\f138"; } +.fi-database:before { content: "\f139"; } +.fi-die-five:before { content: "\f13a"; } +.fi-die-four:before { content: "\f13b"; } +.fi-die-one:before { content: "\f13c"; } +.fi-die-six:before { content: "\f13d"; } +.fi-die-three:before { content: "\f13e"; } +.fi-die-two:before { content: "\f13f"; } +.fi-dislike:before { content: "\f140"; } +.fi-dollar-bill:before { content: "\f141"; } +.fi-dollar:before { content: "\f142"; } +.fi-download:before { content: "\f143"; } +.fi-eject:before { content: "\f144"; } +.fi-elevator:before { content: "\f145"; } +.fi-euro:before { content: "\f146"; } +.fi-eye:before { content: "\f147"; } +.fi-fast-forward:before { content: "\f148"; } +.fi-female-symbol:before { content: "\f149"; } +.fi-female:before { content: "\f14a"; } +.fi-filter:before { content: "\f14b"; } +.fi-first-aid:before { content: "\f14c"; } +.fi-flag:before { content: "\f14d"; } +.fi-folder-add:before { content: "\f14e"; } +.fi-folder-lock:before { content: "\f14f"; } +.fi-folder:before { content: "\f150"; } +.fi-foot:before { content: "\f151"; } +.fi-foundation:before { content: "\f152"; } +.fi-graph-bar:before { content: "\f153"; } +.fi-graph-horizontal:before { content: "\f154"; } +.fi-graph-pie:before { content: "\f155"; } +.fi-graph-trend:before { content: "\f156"; } +.fi-guide-dog:before { content: "\f157"; } +.fi-hearing-aid:before { content: "\f158"; } +.fi-heart:before { content: "\f159"; } +.fi-home:before { content: "\f15a"; } +.fi-html5:before { content: "\f15b"; } +.fi-indent-less:before { content: "\f15c"; } +.fi-indent-more:before { content: "\f15d"; } +.fi-info:before { content: "\f15e"; } +.fi-italic:before { content: "\f15f"; } +.fi-key:before { content: "\f160"; } +.fi-laptop:before { content: "\f161"; } +.fi-layout:before { content: "\f162"; } +.fi-lightbulb:before { content: "\f163"; } +.fi-like:before { content: "\f164"; } +.fi-link:before { content: "\f165"; } +.fi-list-bullet:before { content: "\f166"; } +.fi-list-number:before { content: "\f167"; } +.fi-list-thumbnails:before { content: "\f168"; } +.fi-list:before { content: "\f169"; } +.fi-lock:before { content: "\f16a"; } +.fi-loop:before { content: "\f16b"; } +.fi-magnifying-glass:before { content: "\f16c"; } +.fi-mail:before { content: "\f16d"; } +.fi-male-female:before { content: "\f16e"; } +.fi-male-symbol:before { content: "\f16f"; } +.fi-male:before { content: "\f170"; } +.fi-map:before { content: "\f171"; } +.fi-marker:before { content: "\f172"; } +.fi-megaphone:before { content: "\f173"; } +.fi-microphone:before { content: "\f174"; } +.fi-minus-circle:before { content: "\f175"; } +.fi-minus:before { content: "\f176"; } +.fi-mobile-signal:before { content: "\f177"; } +.fi-mobile:before { content: "\f178"; } +.fi-monitor:before { content: "\f179"; } +.fi-mountains:before { content: "\f17a"; } +.fi-music:before { content: "\f17b"; } +.fi-next:before { content: "\f17c"; } +.fi-no-dogs:before { content: "\f17d"; } +.fi-no-smoking:before { content: "\f17e"; } +.fi-page-add:before { content: "\f17f"; } +.fi-page-copy:before { content: "\f180"; } +.fi-page-csv:before { content: "\f181"; } +.fi-page-delete:before { content: "\f182"; } +.fi-page-doc:before { content: "\f183"; } +.fi-page-edit:before { content: "\f184"; } +.fi-page-export-csv:before { content: "\f185"; } +.fi-page-export-doc:before { content: "\f186"; } +.fi-page-export-pdf:before { content: "\f187"; } +.fi-page-export:before { content: "\f188"; } +.fi-page-filled:before { content: "\f189"; } +.fi-page-multiple:before { content: "\f18a"; } +.fi-page-pdf:before { content: "\f18b"; } +.fi-page-remove:before { content: "\f18c"; } +.fi-page-search:before { content: "\f18d"; } +.fi-page:before { content: "\f18e"; } +.fi-paint-bucket:before { content: "\f18f"; } +.fi-paperclip:before { content: "\f190"; } +.fi-pause:before { content: "\f191"; } +.fi-paw:before { content: "\f192"; } +.fi-paypal:before { content: "\f193"; } +.fi-pencil:before { content: "\f194"; } +.fi-photo:before { content: "\f195"; } +.fi-play-circle:before { content: "\f196"; } +.fi-play-video:before { content: "\f197"; } +.fi-play:before { content: "\f198"; } +.fi-plus:before { content: "\f199"; } +.fi-pound:before { content: "\f19a"; } +.fi-power:before { content: "\f19b"; } +.fi-previous:before { content: "\f19c"; } +.fi-price-tag:before { content: "\f19d"; } +.fi-pricetag-multiple:before { content: "\f19e"; } +.fi-print:before { content: "\f19f"; } +.fi-prohibited:before { content: "\f1a0"; } +.fi-projection-screen:before { content: "\f1a1"; } +.fi-puzzle:before { content: "\f1a2"; } +.fi-quote:before { content: "\f1a3"; } +.fi-record:before { content: "\f1a4"; } +.fi-refresh:before { content: "\f1a5"; } +.fi-results-demographics:before { content: "\f1a6"; } +.fi-results:before { content: "\f1a7"; } +.fi-rewind-ten:before { content: "\f1a8"; } +.fi-rewind:before { content: "\f1a9"; } +.fi-rss:before { content: "\f1aa"; } +.fi-safety-cone:before { content: "\f1ab"; } +.fi-save:before { content: "\f1ac"; } +.fi-share:before { content: "\f1ad"; } +.fi-sheriff-badge:before { content: "\f1ae"; } +.fi-shield:before { content: "\f1af"; } +.fi-shopping-bag:before { content: "\f1b0"; } +.fi-shopping-cart:before { content: "\f1b1"; } +.fi-shuffle:before { content: "\f1b2"; } +.fi-skull:before { content: "\f1b3"; } +.fi-social-500px:before { content: "\f1b4"; } +.fi-social-adobe:before { content: "\f1b5"; } +.fi-social-amazon:before { content: "\f1b6"; } +.fi-social-android:before { content: "\f1b7"; } +.fi-social-apple:before { content: "\f1b8"; } +.fi-social-behance:before { content: "\f1b9"; } +.fi-social-bing:before { content: "\f1ba"; } +.fi-social-blogger:before { content: "\f1bb"; } +.fi-social-delicious:before { content: "\f1bc"; } +.fi-social-designer-news:before { content: "\f1bd"; } +.fi-social-deviant-art:before { content: "\f1be"; } +.fi-social-digg:before { content: "\f1bf"; } +.fi-social-dribbble:before { content: "\f1c0"; } +.fi-social-drive:before { content: "\f1c1"; } +.fi-social-dropbox:before { content: "\f1c2"; } +.fi-social-evernote:before { content: "\f1c3"; } +.fi-social-facebook:before { content: "\f1c4"; } +.fi-social-flickr:before { content: "\f1c5"; } +.fi-social-forrst:before { content: "\f1c6"; } +.fi-social-foursquare:before { content: "\f1c7"; } +.fi-social-game-center:before { content: "\f1c8"; } +.fi-social-github:before { content: "\f1c9"; } +.fi-social-google-plus:before { content: "\f1ca"; } +.fi-social-hacker-news:before { content: "\f1cb"; } +.fi-social-hi5:before { content: "\f1cc"; } +.fi-social-instagram:before { content: "\f1cd"; } +.fi-social-joomla:before { content: "\f1ce"; } +.fi-social-lastfm:before { content: "\f1cf"; } +.fi-social-linkedin:before { content: "\f1d0"; } +.fi-social-medium:before { content: "\f1d1"; } +.fi-social-myspace:before { content: "\f1d2"; } +.fi-social-orkut:before { content: "\f1d3"; } +.fi-social-path:before { content: "\f1d4"; } +.fi-social-picasa:before { content: "\f1d5"; } +.fi-social-pinterest:before { content: "\f1d6"; } +.fi-social-rdio:before { content: "\f1d7"; } +.fi-social-reddit:before { content: "\f1d8"; } +.fi-social-skillshare:before { content: "\f1d9"; } +.fi-social-skype:before { content: "\f1da"; } +.fi-social-smashing-mag:before { content: "\f1db"; } +.fi-social-snapchat:before { content: "\f1dc"; } +.fi-social-spotify:before { content: "\f1dd"; } +.fi-social-squidoo:before { content: "\f1de"; } +.fi-social-stack-overflow:before { content: "\f1df"; } +.fi-social-steam:before { content: "\f1e0"; } +.fi-social-stumbleupon:before { content: "\f1e1"; } +.fi-social-treehouse:before { content: "\f1e2"; } +.fi-social-tumblr:before { content: "\f1e3"; } +.fi-social-twitter:before { content: "\f1e4"; } +.fi-social-vimeo:before { content: "\f1e5"; } +.fi-social-windows:before { content: "\f1e6"; } +.fi-social-xbox:before { content: "\f1e7"; } +.fi-social-yahoo:before { content: "\f1e8"; } +.fi-social-yelp:before { content: "\f1e9"; } +.fi-social-youtube:before { content: "\f1ea"; } +.fi-social-zerply:before { content: "\f1eb"; } +.fi-social-zurb:before { content: "\f1ec"; } +.fi-sound:before { content: "\f1ed"; } +.fi-star:before { content: "\f1ee"; } +.fi-stop:before { content: "\f1ef"; } +.fi-strikethrough:before { content: "\f1f0"; } +.fi-subscript:before { content: "\f1f1"; } +.fi-superscript:before { content: "\f1f2"; } +.fi-tablet-landscape:before { content: "\f1f3"; } +.fi-tablet-portrait:before { content: "\f1f4"; } +.fi-target-two:before { content: "\f1f5"; } +.fi-target:before { content: "\f1f6"; } +.fi-telephone-accessible:before { content: "\f1f7"; } +.fi-telephone:before { content: "\f1f8"; } +.fi-text-color:before { content: "\f1f9"; } +.fi-thumbnails:before { content: "\f1fa"; } +.fi-ticket:before { content: "\f1fb"; } +.fi-torso-business:before { content: "\f1fc"; } +.fi-torso-female:before { content: "\f1fd"; } +.fi-torso:before { content: "\f1fe"; } +.fi-torsos-all-female:before { content: "\f1ff"; } +.fi-torsos-all:before { content: "\f200"; } +.fi-torsos-female-male:before { content: "\f201"; } +.fi-torsos-male-female:before { content: "\f202"; } +.fi-torsos:before { content: "\f203"; } +.fi-trash:before { content: "\f204"; } +.fi-trees:before { content: "\f205"; } +.fi-trophy:before { content: "\f206"; } +.fi-underline:before { content: "\f207"; } +.fi-universal-access:before { content: "\f208"; } +.fi-unlink:before { content: "\f209"; } +.fi-unlock:before { content: "\f20a"; } +.fi-upload-cloud:before { content: "\f20b"; } +.fi-upload:before { content: "\f20c"; } +.fi-usb:before { content: "\f20d"; } +.fi-video:before { content: "\f20e"; } +.fi-volume-none:before { content: "\f20f"; } +.fi-volume-strike:before { content: "\f210"; } +.fi-volume:before { content: "\f211"; } +.fi-web:before { content: "\f212"; } +.fi-wheelchair:before { content: "\f213"; } +.fi-widget:before { content: "\f214"; } +.fi-wrench:before { content: "\f215"; } +.fi-x-circle:before { content: "\f216"; } +.fi-x:before { content: "\f217"; } +.fi-yen:before { content: "\f218"; } +.fi-zoom-in:before { content: "\f219"; } +.fi-zoom-out:before { content: "\f21a"; } diff --git a/docroot/sites/all/themes/libraryzurb_teen/scss/components/_grid.scss b/docroot/sites/all/themes/libraryzurb_teen/scss/components/_grid.scss new file mode 100644 index 00000000..b3c56796 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/scss/components/_grid.scss @@ -0,0 +1,107 @@ +//grid layout// +html { + background: $grey; +} +body { + width: 100%; + height: 100%; + @include arialregular; + -webkit-font-smoothing: antialiased; + font-size: 18px; + line-height: 1.5; + color: $black; + @include boxshadow; + background: $white; + &.front, &.not-front { + max-width: 1280px; + margin: 0 auto; + + + } + .main { + margin-top: -5px; + } + input[type="password"] { + @include mclaren; + } + .alert-box.success { + opacity: 1; + @include mclaren; + a { + @include mclaren; + opacity: 1; + color: $red !important; + &.close { + color: $white !important; + opacity: 1; + &:hover { + text-decoration: none !important; + } + } + } + } +} +.row { + &.l-main { + max-width: 94.6%; + @media screen and (max-width: 767px) { + max-width: 91.8%; + } + } +} +.large-3 { + @media screen and (min-width: 1026px) { + width: 31.87%; + } + @media only screen and (min-width: 768px) and (max-width: 1025px) { + width: 38%; + padding-left: 0; + padding-right: 0; + } + @media screen and (max-width: 767px) { + width: 100%; + display: inline-block; + } +} +.large-9 { + @media screen and (min-width: 1026px) { + width: 68.12%; +} + @media only screen and (min-width: 768px) and (max-width: 1025px) { + width: 62%; + padding-left: 0; + padding-right: 0; + } + @media screen and (max-width: 767px) { + width: 100%; + display: inline-block; + } +} +.pull-9 { + @media screen and (min-width: 1026px) { + right: 68.4%; + } + @media only screen and (min-width: 768px) and (max-width: 1025px) { + right: 63.4%; + } + @media screen and (max-width: 767px) { + right: 0; + } +} +.push-3 { + @media screen and (min-width: 1026px) { + left: 31.9%; + } + @media only screen and (min-width: 768px) and (max-width: 1025px) { + left: 38.9%; + } + @media screen and (max-width: 767px) { + left: 0; + } +} +.main.columns, .sidebar-first.columns { + @media screen and (max-width: 767px) { + padding-left: 0; + padding-right: 0; + } +} \ No newline at end of file diff --git a/docroot/sites/all/themes/libraryzurb_teen/scss/components/_page.scss b/docroot/sites/all/themes/libraryzurb_teen/scss/components/_page.scss new file mode 100644 index 00000000..a7aeda7f --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/scss/components/_page.scss @@ -0,0 +1,2795 @@ + +/**open single msg**/ +.page-messages-view { + .privatemsg-message-participants { + width: 100%; + max-width: 80%; + margin: 0 auto; + color: $black; + @include noborder; + a.username { + color: $white; + padding-left: 5px; + } + } + .privatemsg-message { + max-width: 80%; + margin: 0 auto; + .privatemsg-message-information { + @include noborder; + .privatemsg-author-name { + position: relative; + padding-left: 30px; + &:before { + @include previous(47px, 21px, $left: 0, $top: -3px); + background: url('../images/libraryzurb/arrow-list.png') no-repeat; + } + } + a.username { + color: $black; + } + span.privatemsg-message-date { + color: $white; + } + ul { + list-style: none; + margin-top: 1.25em; + li { + + a { + color: $black; + padding: 5px 20px; + background: $yellow; + border-radius: 10px; + @include boxshadow; + &:hover { + text-decoration: none; + } + } + } + } + } + .privatemsg-message-body { + p { + a { + color: $black; + } + } + } + } + .privatemsg-reply { + color: $white; + @include noborder; + } + .form-submit { + margin-top: 10px !important; + } + +} +/**end**/ +/**css for photos n vedios page***/ +.section-media { + .block-title { + font-size: 28px; + color: $black; + @include mclaren; + @include noborder; + } + .block-views-media-photos-videos-block-6 { + .view .views-row { + width: 32%; + @include mobile { + width: 100%; + } + } + } + .block-views-media-photos-videos-block-3 { + .view .views-row { + width: 24%; + @include mobile { + width: 100%; + } + @include tablet { + width: 32%; + } + } + } + .main { + .view { + display: table; + width: 100%; + .views-row { + display: table-row; + float: left; + padding-left: 1%; + @include mobile { + padding-left: 0; + } + clear: none !important; + .flickr-photoset-img { + text-align: center; + img { + width: 160px; + height: 160px; + &:hover { + transform: none; + top: 0; + } + } + } + .flickr-citation { + margin-top: 23px; + margin-bottom: 35px; + text-align: center; + a { + color: transparent; + position: relative; + display: inline-block; + width: 80%; + @include tablet { + width: 139px; + } + &:after { + content: "view album"; + height: 38px; + line-height: 40px; + width: 100%; + background: $yellow url('../images/libraryzurb/view-album.png') no-repeat; + @include desktop { + background-position: 37px center !important; + } + color: $black; + border-radius: 10px; + text-align: center; + @include boxshadow; + @include mclaren; + text-transform: capitalize; + position: absolute; + top: 0; + left: 0; + text-align: right; + padding-right: 20px; + @include tablet { + padding-right: 5px; + background-position: 8px center !important; + background-size: 17px !important; + } + } + &:hover { + &:after { + background: $button-hover url('../images/libraryzurb/view-album.png') no-repeat; + + } + } + &:focus { + &:after { + background: $button-active url('../images/libraryzurb/view-album.png') no-repeat; + } + } + } + } + .views-field-field-video-description { + .views-label { + display: none; + } + .field-content { + padding-top: 10px; + font-size: 12px; + line-height: 1; + @include arialregular; + } + } + } + .view-footer { + width: 100%; + display: inline-block; + } + } + } +} +/**end photos n vedios***/ +/**css for reward page***/ + +.page-rewards { + .pull-9.sidebar { + width: 29.53%; + right: 69.4%; + padding: 35px 2.65% 0px; + margin-bottom: 25px; + @include bluebackground; + @include mobile { + width: 100%; + right: 0; + } + @include tablet { + width: 38%; + right: 63.4%; + } + .block { + .block-title, .view-header, .view-header p { + font-size: 22px; + @include white-text; + } + &.block-views-my-rewards-block { + .views-field-field-image-upload { + float: left; + display: table-row; + margin-right: 19px; + } + } + &.block-views-my-badges-block-1 { + .view { + display: table; + width: 100%; + counter-reset: section; + .views-row { + display: table-row; + width: 100%; + .views-field { + display: table-cell; + + vertical-align: middle; + &.views-field-field-badge-image { + padding-right: 10px; + position: relative; + &:before { + /* @include counter; + position: absolute; + left: -14px; + top: 15px; */ + } + } + &.views-field-title { + padding-left: 10px; + } + } + } + } + } + .views-row { + .views-field-nothing { + .badges { + img { + float: left; + margin: 0.5em 1em 0.5em 0; + } + } + } + } + } + } + .main { + #page-title { + + display: none; + } + .view-badges { + .view-header { + h2 { + @include mclaren; + font-size: 28px; + color: $black; + @include noborder; + } + } + .view-content { + div.badges { + img { + margin-right: 6%; + } + } + } + } + + .block { + .block-title { + @include noborder; + font-size: 18px; + color: $orange; + @include mclaren; + } + .view { + display: table; + width: 100%; + .view-content { + display: table-row; + width: 100%; + .views-row { + display: table-cell; + padding-right: 10px; + @include tablet { + display: inline-block; + width: 19%; + vertical-align: top; + } + .views-field { + width: 100%; + display: inline-block; + font-family: 17px; + @include arialregular; + } + } + } + } + + } + + + } + +} +/**end css of reward page**/ +/**css for reward-winner page**/ + .page-node-add { + + .block-system { + form { + .form-textarea-wrapper { + table { + tbody { + tr { + td.mceIframeContainer { + position: relative; + padding-bottom: 56.25%; + height: 0; overflow: + hidden; max-width: 100%; + + iframe, object, embed { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + + } + + } + } + } + } + } + } + } + } + .page-reward-winners { + @include arialregular; + #page-title { + @include mclaren; + } + table { + width: 100% !important; + } + } +/**end reward-winners page**/ +/**css for program page***/ +/**css for unauthenticated program page***/ +.not-logged-in.section-programs { + .pull-9.sidebar { + right: 70.4%; + @include mobile { + right: 0; + } + @include tablet { + width: 38%; + right: 63.4%; + padding-left: 2%; + padding-right: 2%; + } + } + .block-views-reward-earn-block-1 { + .block-title { + &:after { + background: none; + } + } + } +} +/*end unauthenticated program page css**/ +/**css for authunticated program page***/ +.logged-in.section-programs{ + .block-views-reward-earn-block-1 { + display: none; + } + .pull-9.sidebar { + width: 29.53%; + right: 69.4%; + padding-left: 2.65%; + padding-right: 2.65%; + @include mobile { + width: 100%; + right: 0; + } + @include tablet { + width: 38%; + right: 63.4%; + padding-left: 2%; + padding-right: 2%; + } + @include block; + } + .sidebar { + background: $blue; + color: $white; + padding-top: 25px; + padding-bottom: 25px; + border-radius: 20px; + .block { + .block-title { + color: $white; + font-size: 22px; + @include mclaren; + } + .view { + .views-field-title { + a { + color: $white; + font-size: 17px; + @include arialregular; + } + } + } + &.block-auto-role-allocation { + > div { + display: inline-block; + + > div { + a { + @include desktop { + @include yellowbutton; + } + @include mobile { + @include yellowbutton; + } + @include tablet { + @include yellowbutton(P); + } + + width: 100%; + display: inline-block; + position: relative; + margin-top: 80px; + } + } + } + span { + padding-left: 32%; + @include arialbold; + font-size: 17px; + } + div.days-left, div.all_rewrad_won { + padding-left: 32%; + line-height: 1; + } + position: relative; + &:before { + @include previous(100px, 100px, $left: 0, $top: 19px); + background: url('../images/libraryzurb/white-calender.png') no-repeat; + background-position: left; + } + + } + } + + } +} +/**end css authenticated program page**/ + +.section-programs { + + .pull-9.sidebar2 { + width: 29.53%; + right: 71.4%; + padding-left: 0; + padding-right: 0; + } + + .main { + .current-program { + @include orange-blue; + .view { + display: inline-block; + width: 100%; + padding: 10px 4%; + .view-content { + display: table; + width: 100%; + } + .views-row { + display: table-row; + width: 100%; + .views-field { + &.views-field-field-program-image { + width: 20%; + display: table-cell; + vertical-align: middle; + float: none !important; + } + &.views-field-body { + width: 78%; + padding-left: 2%; + display: table-cell; + float: none !important; + @include arialregular; + font-size: 17px; + } + &.views-field-title, &.views-field-field-sign-up { + display: none; + } + } + } + } + } + .view { + .view-header, .view-header p { + font-size: 28px !important; + @include mclaren; + color: $black; + } + .view-content { + .views-row { + display: table; + width: 100%; + .views-field { + display: table-row; + padding-bottom: 23px; + &.views-field-field-program-image { + width: 20%; + float: left; + } + &.views-field-title, &.views-field-field-sign-up, &.views-field-body { + width: 78%; + float: right; + } + &.views-field-title { + padding-bottom: 23px; + a { + @include mclaren; + color: $orange; + font-size: 20px; + } + } + &.views-field-body { + font-size: 18px; + @include arialregular; + line-height: 1.4; + } + &.views-field-field-sign-up { + a { + @include yellowbutton; + } + } + + } + } + } + } + } +} +/**end css of program page**/ + +/**common css for patraon dashboard page**/ + +.page-user-profile { + .main { + padding-left: 0; + padding-right: 0; + } + .homebox { + width: 100%; + max-width: 94.6%; + margin: 34px auto; + @include mobile { + max-width: 100%; + } + .homebox-column-wrapper { + @media screen and (max-width: 939px) { + width: 100% !important; + } + .homebox-column { + @media screen and (max-width: 939px) { + height: auto !important; + } + } + } + #homebox-block-auto_role_allocation_progress-block { + .portlet-header { + position: relative; + } + .portlet-content { + color: $black; + font-size: 15px; + @include arialregular; + &:before { + @include previous(50px, 50px, $left: 6%, $top: 12px); + overflow: visible; + background: url('../images/libraryzurb/progress-dash.png') no-repeat; + } + div { + padding-left: 32%; + position: relative; + padding-bottom: 30%; + &:before { + + @include previous(100px, 100px, $left: 0, $top: -11px); + @media only screen and (min-width: 940px) and (max-width: 1025px) { + @include previous(100px, 100px, $left: -17px, $top: -11px); + } + background: url('../images/libraryzurb/fi-calendar.svg') no-repeat; + background-position: center; + } + a.button { + width: 100%; + display: inline-block; + @include bluebutton($font-size: 17px); + position: absolute; + left: -15px; + bottom: 0; + } + } + } + } + #homebox-add { + @include yellowbackground; + border-radius: 20px; + padding: 36px 20px 25px; + position: relative; + &:after { + content: "Click on a button to add it to your Dashboard."; + width: 100%; + height: auto; + @include arialregular; + color: $black; + } + .item-list ul li.last { + float: right !important; + } + } + #homebox-buttons { + margin-bottom: 32px; + a { + padding: 9px 25px; + @include bluebutton($font-size: 22px); + text-decoration: none; + } + } + #homebox-add { + ul li a { + @include bluebutton($font-size: 17px); + text-decoration: none; + &.used { + @include noborder; + } + } + } + .homebox-column { + @include nobackground; + } + .homebox-portlet { + @include noborder; + position: relative; + } + .homebox-portlet-inner { + @include boxshadow; + @include noborder; + background: $yellow; + border-radius: 20px; + margin-bottom: 10px; + .portlet-header { + @include bluebox; + border-radius: 20px 20px 0px 0px; + padding: 15.5px 15px 15.5px 0 !important; + @include noborder; + a { + position: relative; + &.portlet-close { + background: url('../images/libraryzurb/close-img.png') no-repeat; + } + &.portlet-minus { + background: url('../images/libraryzurb/min-img.png') no-repeat; + padding-right: 23px; + } + &.portlet-maximize { + display: none; + } + &.portlet-plus { + background: url('../images/libraryzurb/plus.png') no-repeat; + padding-right: 23px; + } + background-size: 30px; + height: 30px; + width: 30px; + } + .portlet-title { + @include white-text; + padding-left: 21%; + font-size: 22px; + position: relative; + + + } + } + } + .portlet-content { + padding: 35px 7.1% !important; + position: inherit; + .view { + &:before { + @include previous(50px, 50px, $top: 12px, $left: 6%); + } + .view-header { + text-align: left !important; + } + .view-content { + .views-field-count { + font-size: 15px; + @include arialregular; + color: $black; + margin-top: 10px; + .views-label-count { + @include like; + &:after { + top: -4px !important; + } + } + } + } + &.view-follow { + &:before { + background: url('../images/libraryzurb/following.png') no-repeat; + } + .view-header { + .Following { + p { + font-size: 15px; + @include arialbold; + color: $black; + } + } + } + .view-content { + width: 100%; + display: table; + .views-row { + display: table-row; + img { + margin: 0px 0px 0.5em 0px; + @include noborder; + } + .views-field { + display: table-cell; + &.views-field-field-user-avatar { + width: 25%; + float: left; + padding-right: 5%; + } + &.views-field-name { + width: 70%; + float: left; + a { + color: $black; + font-size: 15px; + @include arialregular; + } + } + } + } + } + } + &.view-patron-rewads-for-patron-dashboard { + &:before { + background: url('../images/libraryzurb/reward-dash.png') no-repeat; + } + + .view-content { + display: table; + width: 100%; + .views-row { + display: table-row; + .views-field { + display: table-cell; + &.views-field-field-reward-badge { + h2 { + display: none; + } + width: 30%; + float: left; + } + &.views-field-php { + width: 65%; + float: right; + padding-top: 20px; + font-size: 15px; + @include arialregular; + color: $black; + } + } + } + } + } + &.view-booklist-on-activities-page { + &:before { + background: url('../images/libraryzurb/booklist-dash.png') no-repeat; + } + counter-reset: section; + .view-footer { + p { + text-align: center; + margin-top: 10px; + width: 100%; + a { + width: 100%; + display: inline-block; + margin: 0; + padding: 7px 22px; + @include bluebutton($font-size: 17px); + &:hover { + text-decoration: underline !important; + } + } + } + } + .view-header { + h3{ + font-size: 15px; + color: $black; + @include arialbold; + text-transform: capitalize; + } + + } + ol { + list-style: none; + li { + .views-field-title { + a { + color: $black; + font-size: 15px; + @include arialregular; + &:before { + @include counter; + } + } + } + } + + } + } + &.view-my-book-reviews { + &:before { + background: url('../images/libraryzurb/review-dash.png') no-repeat; + } + counter-reset: section; + .view-empty { + p { + &:nth-of-type(1) { + text-align: left; + } + } + p { + &:nth-of-type(2) { + text-align: center; + a { + width: 100%; + display: inline-block; + margin: 0; + padding: 7px 22px; + @include bluebutton($font-size: 17px); + &:hover { + text-decoration: underline !important; + } + } + + } + } + } + .view-footer { + p { + text-align: center; + width: 100%; + margin-top: 10px; + a { + width: 100%; + display: inline-block; + margin: 0; + padding: 7px 22px; + @include bluebutton($font-size: 17px); + &:hover { + text-decoration: underline !important; + } + } + } + } + .view-empty { + font-size: 15px; + @include arialregular; + color: $black; + } + .view-header { + h3 { + color: $black; + font-size: 15px; + @include arialbold; + text-transform: capitalize; + } + + } + .view-content { + ol , ul { + margin-left: 0; + list-style: none; + li { + margin-left: 0; + a { + color: $black; + @include arialregular; + font-size: 15px; + text-transform: capitalize; + &:before { + @include counter; + } + } + } + } + } + } + &.view-my-activities-for-patron-dashboard { + &:before { + background: url('../images/libraryzurb/activities-dash.png') no-repeat; + } + .view-header { + a { + font-size: 15px; + color: $black; + @include arialbold; + text-transform: capitalize; + text-decoration: none; + } + } + .view-content { + .views-row { + display: inline-block; + width: 100%; + .field-content { + div { + width: 49%; + float: left; + font-size: 15px; + color: $black; + @include arialregular; + &:nth-of-type(2) { + margin-left: 1%; + } + } + } + } + } + .view-footer { + div { + text-align: center; + margin-bottom: 10px; + a { + width: 100%; + display: inline-block; + padding: 11px 22px; + @include bluebutton($font-size: 17px); + } + } + } + } + } + } + } +} + +/**end css of patron dashboard page**/ + +/**css for msg center**/ + +.page-messages { + /**create-msg***/ + &.page-messages-new, &.page-messages-view { + .main { + form { + width: 100%; + max-width: 90%; + margin: 0 auto; + label,div { + @include white-text; + } + .form-submit { + @include yellowbutton; + } + fieldset#edit-token { + display: none; + } + } + } + } + /**end create-msg**/ + div.main { + background: $blue; + overflow: hidden; + border-radius: 20px; + margin-bottom: 25px; + position: relative; + padding: 0; + padding-bottom: 20px; + @include boxshadow; + #page-title { + color: $white; + @include mclaren; + padding-top: 26px; + padding-bottom: 25px; + font-size: 28px; + height: 110px; + border-bottom: medium none; + margin-top: -1px; + padding-left:4%; + z-index: 0; + position: relative; + &:after { + @include previous(100%, 110px, $left: 0, $top: 0); + background: url('../images/libraryzurb/background-saffron.png') no-repeat; + background-position: -35px 10px; + @include rotate(180deg); + z-index: -1; + + } + } + ul { + &.pagination.pager { + float: right; + margin-right: 20px; + li { + a { + background: $yellow; + color: $black; + border-left: 1px solid $black; + padding: 10px; + } + &.current { + a { + color: $white !important; + background: $orange !important; + } + } + &.arrow { + &.first { + a { + border-left: 0 !important; + border-radius: 10px 0px 0px 10px; + } + } + &.last { + a { + border-radius: 0px 10px 10px 0px; + } + } + } + } + } + &.button-group { + li { + a { + font-size: 17px; + @include yellowbutton; + } + } + &:after { + clear: none !important; + } + } + &.action-links { + list-style: none; + li { + a { + @include yellowbutton; + margin-left:20px; + font-size: 17px; + position: relative; + top: 8.5px; + @include boxshadow; + } + } + } + + } + form { + clear: both; + button { + font-size: 17px; + @include mclaren; + } + #privatemsg-list-form { + table { + border: none; + margin: 0 auto !important; + max-width: 80%; + th.select-all { + width: 1%; + + } + th.privatemsg-header-participants, td.privatemsg-list-participants { + display: none; + } + input[type="checkbox"], .form-checkbox { + margin: 0 !important; + } + @include mobile { + width: 100% !important; + max-width: 100%; + thead, tbody, th, tr { + width: 100% !important; + } + } + tr { + th, th > a, td, td > a { + color: $white; + } + } + + thead { + background: $blue; + font-weight: normal; + border-bottom: 5px solid $blue; + + + } + tbody { + border-top: none; + .privatemsg-unread td { + font-weight: normal; + } + tr.even, tr.odd { + border-bottom: none; + background-color: $blue; + } + + } + tr.even, tr.alt, tr:nth-of-type(2n) { + background: $blue; + } + + } + .container-inline { + width: 100%; + padding-bottom: 20px; + padding-left: 2%; + margin: 0 auto; + + div { + &.form-type-textfield { + display: none; + } + &.form-type-select { + .chosen-container-single { + width: 200px !important; + .chosen-single { + font-size: 17px; + @include yellowbutton; + padding: 13px 20px 10px; + height: auto !important; + position: relative; + bottom: 2px; + @include boxshadow; + div { + top: 8px; + } + } + } + } + } + } + } + fieldset { + border: none; + legend { + background: none; + font-weight: normal; + margin-top: 15px; + + a { + @include yellowbutton; + @include boxshadow; + font-size: 17px; + + + } + + } + .form-item { + label { + color: $white; + text-align: left !important; + padding-bottom: 5px; + } + + } + + } + + } + } +} + /**msg center css end**/ + + /**common css used in page-reviews and page-booklists**/ + +.page-reviews, .page-booklists { + #page-title { + @include black-text; + @include mclaren; + } + + .view-header { + p { + a { + color: $blue; + &:hover, &:focus { + color: $blue; + } + } + } + } + .pull-9.sidebar { + width: 29.53%; + right: 69.4%; + padding-left: 2.65%; + padding-right: 2.65%; + @include block; + @include mobile { + width: 100%; + right: 0; + } + @include tablet { + width: 37.53%; + right: 63.4%; + } + } + .pull-9.sidebar2 { + width: 29.53%; + right: 71.4%; + padding-left: 0; + padding-right: 0; + @include mobile { + width: 100%; + right: 0; + } + } + + .sidebar { + background: $blue; + color: $white; + padding-top: 25px; + padding-bottom: 25px; + border-radius: 20px; + @include boxshadow; + .views-field-count { + padding-left: 0; + } + .block-title { + @include white-text; + font-size: 22px; + margin-top: 6px; + } + p { + color: white; + &.button { + @include yellowbutton; + margin-left: 0 !important; + margin-bottom: 24px; + } + } + .toogle-follow { + display: none; + } + .view.view-my-book-reviews, .view.view-booklist-on-activities-page { + margin-top: 40px; + } + .reviews-block-block { + margin: 0 auto !important; + .view-content { + ul, ol { + margin-left: 5%; + .views-field-title { + a { + @include white-text; + text-decoration: underline; + } + } + .views-field-count { + .field-content { + position: relative; + top: 10px; + } + .views-label { + position: relative; + top: 10px; + padding-right: 35px; + &:after { + @include previous(30px, 30px, $top: -4px, $right: 0); + background: url('../images/libraryzurb/smily-white.png') no-repeat; + } + } + } + } + } + .view-header { + h3:nth-of-type(1) { + a { + @include white-text; + font-size: 21px !important; + } + } + h3 { + font-size: 17px !important; + @include arialbold; + color: $white; + margin-bottom: 15px; + a { + font-size: 17px !important; + @include arialbold; + color: $white; + } + } + } + } + } + .view { + .view-header { + .other-booklists { + font-size: 25px; + @include mclaren; + color: $black; + margin-bottom: 23px; + } + .viewmenu { + margin-bottom: 23px; + font-size: 17px; + @include arialregular; + } + } + .view-filters { + @include yellowbackground; + form { + margin: 0 !important; + .views-exposed-form { + padding: 3px 2.8% 12px 3.4%; + border: none; + @include tablet { + padding: 8px 0.8% 8px 2.4%; + } + .views-exposed-widget { + width: 25%; + padding-left: 1%; + padding-right: 0; + padding-top: 17px; + @include tablet { + width: 49%; + padding-top: 2px; + } + .chosen-container { + width: 100% !important; + } + input[type="text"] { + height: 40px; + position: relative; + top: 3px; + } + } + label { + @include black-text; + font-size: 16px; + } + .chosen-processed { + .chosen-search { + input { + background: $white; + } + } + .chosen-drop { + background: $blue; + .chosen-results { + li a { + background: $blue; + @include white-text; + &:hover, &:focus { + background: $blue; + @include white-text; + } + } + } + } + a { + + @include bluebutton($font-size: 21px); + height: auto !important; + border: none; + div { + b{ + visibility: hidden; + position: relative; + &:after { + content: ""; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: 5px solid $white; + position: absolute; + top: 45%; + display: block; + left: 0; + visibility: visible; + } + } + + } + } + + } + + .views-submit-button { + button { + @include bluebutton($font-size: 21px); + margin-top: 26px; + line-height: 1.2; + text-transform: capitalize; + margin-left: 0; + @include tablet { + margin-top: 7px; + } + } + } + } + } + } + } +} +/**css for bookreview&booklist unauthencated page**/ +.not-logged-in.page-booklists { + .main .view-content .item-list ol li .views-field-nothing { + .field-content { + div { + a { + color: $gray !important; + padding-left: 5px; + pointer-events: none !important; + } + } + } + } +} +.not-logged-in.page-reviews { + .main .view-content .item-list ol li .views-field.views-field-nothing { + div.user { + a { + padding-left: 5px; + color: $gray !important; + pointer-events: none !important; + } + } + } +} +/**end css of unauthencated booklist&bookreview page**/ + +/**css only for book-review page****/ + +.page-reviews { + counter-reset: section; + #page-title { + display: none; + } + .view-reviews { + .view-header { + .reviews-title, .reviews-subtitle { + color: $black; + @include noborder; + @include mclaren; + } + .reviews-title { + font-size: 28px; + } + .reviews-subtitle { + font-size: 22px; + } + } + } + .main { + .view-content { + .views-row img { + @include noborder; + } + .item-list { + ol { + list-style: none; + display: table; + + li { + margin-bottom: 0; + display: table-row; + width: 100%; + position: relative; + float: left; + border-bottom: 1px solid $light-gray; + padding-top: 35px; + padding-bottom: 35px; + .views-field { + + &.views-field-nothing-1 { + width: 70%; + float: right; + display: table-cell; + padding-left: 4%; + padding-top: 23px; + .bookreview_title { + font-size: 20px; + @include mclaren; + a { + font-size: 20px; + padding-right: 5px; + } + + } + } + + &.views-field-count { + position: relative; + top: 45px; + } + &.views-field-body { + @include arialregular; + font-size: 18px; + line-height: 1.4; + } + &.views-field-nothing { + div { + float: left; + &.user { + padding-left: 5px; + @include mclaren; + } + &.review { + @include mclaren; + } + &.date { + width: 100%; + display: table-row; + @include arialregular; + padding-top: 16px; + font-size: 18px; + + } + &.field-name-field-avatar-image { + position: relative; + height: 41px; + padding-left: 5px; + padding-top: 5px; + bottom: 19px; + + img { + + margin: 0 !important; + @include boxshadow; + } + } + } + } + + &.views-field-view-node { + span { + &.button { + visibility: hidden; + a { + visibility: visible; + } + } + } + } + &.views-field-title, &.views-field-php { + a { + @include blue-text; + } + } + &.views-field-count { + text-align: right; + //width: 20%; + float: right; + display: table-row; + @include mclaren; + .views-label-count { + @include like; + } + } + + &.views-field-field-book-cover-image-link { + display: table-cell; + float: left; + width: 30%; + padding: 0px; + table { + margin: 0 !important; + @include noborder; + tbody { + @include noborder; + td { + padding: 0; + img { + margin: 0; + padding: 0; + @media screen and (max-width: 1199px) { + width: 100% !important; + height: auto !important; + + } + @media screen and (min-width: 1279px) { + width: 242px !important; + height: 361px !important; + } + } + } + } + } + } + &.views-field-body { + padding-top: 15px; + } + &.views-field-nothing,&.views-field-body { + width: 70%; + float: right; + display: table-row; + padding-left: 4%; + } + &.views-field-field-user-avatar { + img { + float: left; + } + } + &.views-field-view-node { + display: table-row; + width: 70%; + float: right; + padding-left: 4%; + .button { + padding: 0 !important; + margin: 23px 0 0; + + a { + @include bluebutton($font-size: 21px); + } + + } + } + } + font-size: 17px; + .views-field-title { + &:before { + @include counter; + } + } + } + } + } + } + + } + +} + +/**css only for booklist page**/ + +.page-booklists { + .l-header .row.header-middle section.block-menu-menu-secoundary-menu ul.menu li a.reviews::after { + background: url('../images/libraryzurb/reviewactive.png') no-repeat !important; + @include bck_size_tablet; + } + .main { + .view-header,.view-footer { + display: none; + } + .view-content { + margin-top: 40px; + counter-reset: section 3; + .item-list { + ol { + margin-left: 20px; + list-style: none; + li { + &.views-row { + margin-bottom: 23px; + .views-field-title { + @include mclaren; + } + } + font-size: 17px; + .views-field-nothing { + margin-top: 23px; + padding-left: 25px; + display: inline-block; + @include mclaren; + div { + float: left; + a { + padding-left: 10px; + } + &.field-name-field-avatar-image { + position: relative; + bottom: 10px; + img { + @include noborder; + @include boxshadow; + margin-left: 10px; + } + } + } + } + + .views-field-php { + a { + color: $blue; + font-size: 21px; + &:hover { + color: $blue; + } + } + } + .views-field-count { + .views-label-count { + @include like; + } + } + .views-field-count { + float: right; + @include mclaren; + } + .views-field-counter { + float: left; + font-size: 17px; + @include mclaren; + &:after { + content: "."; + font-weight: bold; + position: relative; + right: 4px; + } + } + .views-field-title { + a { + font-size: 21px; + color: $blue; + &:before { + + } + } + } + } + } + } + } + .view-booklist-slideshow { + .owl-carousel { + position: relative; + .owl-wrapper-outer { + width: 99%; + margin: 0 auto; + } + .owl-item { + .views-field-field-booklist-cover-image { + width: 135px; + img { + width: 100%; + } + } + } + .views-field-title { + font-size: 21px; + .field-content { + a { + color: $blue; + @include mclaren; + text-transform: capitalize; + } + } + } + .views-field-nothing { + width: 70%; + float: left; + margin-top: 20px; + font-size: 17px; + @include mclaren; + @include tablet { + width: 100%; + display: inline-block; + } + + div { + float: left; + color: $black; + &:first-child { + padding-right: 5px; + } + &.field-name-field-avatar-image { + position: relative; + bottom: 10px; + img { + @include boxshadow; + margin-right: 5px; + margin-left: 5px; + } + } + a.username { + color: $blue; + font-size: 21px; + padding-right: 10px; + + } + } + } + .views-field-count { + width: 30%; + float: left; + text-align: right; + margin-top: 20px; + padding-right: 2%; + @include mclaren; + @include tablet { + width: 100%; + float: right; + position: relative; + bottom: 81px; + } + span { + color: $black; + position: relative; + &.views-label { + padding-right: 40px; + @include like; + } + } + } + .owl-pagination { + display: none; + } + .owl-buttons { + width: 100%; + position: absolute; + top: 40%; + .owl-prev { + float: left; + visibility: hidden; + position: relative; + opacity: 1; + &:before { + @include previous(30px, 30px, $left: -40px, $top: 0); + background: url('../images/libraryzurb/left-blue-arrow.png') no-repeat; + background-size: 25px; + } + } + .owl-next { + float: right; + visibility: hidden; + position: relative; + opacity: 1; + &:after { + @include previous(30px, 30px, $right: -37px, $top: 0); + background: url('../images/libraryzurb/right-blue-arrow.png') no-repeat; + background-size: 25px; + position: absolute; + } + } + } + } + } + } + +} +/**end of booklist page**/ + +/**activities page **/ +.not-logged-in.section-activities { + .block-views-reward-earn-block-1 { + .block-title { + &:after { + background: none; + } + } + + } +} +.logged-in.section-activities { + .block-views-reward-earn-block-1 { + display: none; + } + +} + +.section-activities { + .pagination.pager { + float: none !important; + margin-right: 0 !important; + } + h1#page-title { + display: none; + } + .main { + .views-field-nothing { + h2 { + /* text-transform: uppercase; */ + } + } + .view-activities-page-, .block-block { + @include block; + h2, .block-title { + font-size: 28px; + @include mclaren; + @include noborder; + color: $black; + } + a.button { + margin-bottom: 0; + margin-left: 0; + } + .view-content { + + } + div { + a { + padding-left: 20px; + } + } + } + } + .pull-9.sidebar3 { + width: 29.53%; + right: 67.4%; + margin-bottom: 35px; + @include mobile { + width: 100%; + right: 0; + margin-bottom: 25px; + } + @include tablet { + width: 38%; + right: 63.4%; + padding-left: 0; + padding-right: 0; + } + + } + /* .pull-9.sidebar, .pull-9.sidebar2 { + width: 29.53%; + right: 71.4%; + padding-left: 0px; + padding-right: 0px; + } */ + + + .sidebar3 { + @include bluebackground; + @include block; + float: none !important; + + .block-block { + padding: 0px 6%; + .block-title { + @include white-text; + @include noborder; + margin-top: 17px; + } + div { + @include arialbold; + font-size: 18px; + + } + a.button { + margin: 10px 0px 0px 0px; + } + } + .block-views { + padding: 0px 6%; + &:first-child { + ul { + list-style: none !important; + } + } + .view { + counter-reset: section; + .view-content { + ul { + .views-row { + margin-left: 0; + .views-field-title { + + a { + &:before { + @include counter; + + } + } + } + } + } + } + } + .view-footer { + margin-top: 30px; + p { + a { + @include yellowbutton; + @include boxshadow; + @media screen and (min-width: 768px) and (max-width: 1100px) { + font-size: 17px; + } + } + } + } + .views-field-title { + padding-bottom: 10px; + + } + .views-field-count { + .views-label { + padding-right: 32px; + @include like; + &:after { + top: -4px !important; + } + } + } + h3 { + color: $white; + margin-top: 20px; + font-size: 17px; + @include arialbold; + text-transform: capitalize; + } + ul { + list-style: none; + + margin-left: 0; + li { + margin-left: 0; + + } + a { + + color: $white; + @include arialregular; + font-size: 18px; + text-decoration: underline; + + + } + } + } + } +} +/**end of activity page**/ + +/**css for program-dashboard page**/ + .page-admin-content-dashboard { + font-family: "Source Sans Pro" !important; + font-weight: normal !important; + font-style: normal !important; + font: 81.3%/1.538em "Lucida Grande","Lucida Sans Unicode",sans-serif !important; + .block-menu-block .menu-name-main-menu ul ul, .section-library-search h2, .top-bar.expanded .main-nav .back h5 { + font-family: "Source Sans Pro" !important; + font-weight: normal !important; + font-style: normal !important; + } + .row { + max-width: 94.6%; + } + h1, h2, h3, blockquote::before, blockquote::after, .aside, .block-menu-block .menu-name-main-menu ul, .special { + font-family: "Arvo" !important; + font-weight: normal !important; + font-style: normal !important; + } + table { + width: 100% !important; + font-size: 0.923em !important; + margin: 0px 0px 10px !important; + border: 1px solid #BEBFB9 !important; + } + div, span , a, form, input, ul, li, select, textarea, label, legend, caption { + padding: 0px !important; + border: 0px none !important; + vertical-align: baseline !important; + } + .quicktabs_main input[type="submit"], .quicktabs_main button { + width: auto !important; + } + .quicktabs_main { + overflow: visible !important; + } + .chosen-container.chosen-with-drop .chosen-drop { + padding-bottom: 20px !important; + padding-left: 5px !important; + } + .chosen-container .chosen-results { + overflow: visible !important; + } + ul.quicktabs-tabs { + text-align: left !important; + li { + border: none !important; + text-transform: capitalize !important; + a { + font-family: "Source Sans Pro" !important; + font-weight: normal !important; + font-style: normal !important; + color: $black !important; + padding-right: 7px !important; + } + } + } + } + + /**end program dashboard page**/ + +/**css for progress page**/ + +.section-progress { + .l-main { + display: table; + width: 100%; + border-collapse: separate; + border-spacing: 20px; + position: relative; + @include mobile { + border-spacing: 0px; + max-width: 97%; + margin: 0 auto; + } + + + } + .main { + @include bluebackground; + padding-left: 0; + padding-right: 0; + display: table-row; + width: 100%; + position: static; + + @include block; + #page-title { + @include waveimg; + } + .view-calendar-sticker { + @include yellowbackground; + width: 40%; + display: table-cell; + @include mobile { + width: 100%; + display: inline-block; + } + + .view-header { + + width: 100%; + padding: 20px 0 20px 20px; + left: 0; + div { + @include mclaren; + &.prg_lib { + + + color: $black; + line-height: 1; + padding-bottom: 20px; + font-size: 15px; + } + &.days_progress { + font-size: 26px; + color: $red; + line-height: 1; + padding-bottom: 20px; + } + } + p { + @include mclaren; + margin-bottom: 0; + color: $black; + line-height: 1; + padding-bottom: 20px; + &.heading { + @media screen and (min-width: 940px) { + font-size: 21px !important; + } + } + &.statement { + @media screen and (min-width: 940px) { + font-size: 15px !important; + } + } + } + } + .view-content { + width: 100%; + display: table-row; + .views-row { + width: 20%; + display: table-cell; + vertical-align: bottom; + + img { + width: 100% !important; + border: none; + } + + + } + } + } + .block { + &.block-views { + width: 35%; + display: table-cell; + padding: 10px; + background: $white; + color: $black; + border-radius: 20px; + position: relative; + @include mclaren; + @include boxshadow; + @include mobile { + width: 100%; + display: inline-block; + } + .view-prize-won-for-progress-page { + width: 100%; + display: table; + border-spacing: 0 !important; + .view-header { + width: 29%; + display: table-cell; + position: relative; + div { + font-size: 20px; + color: $blue; + position: absolute; + top: 6px; + text-transform: capitalize; + width: 300px; + } + span { + font-size: 13px; + text-transform: uppercase; + } + } + .view-content { + width: 70%; + display: table-cell; + padding-top: 38px; + .item-list { + ul { + + li.views-row { + margin-bottom: 10px !important; + font-size: 13px !important; + } + } + } + } + .item-list { + width: 100%; + display: table-row; + height: 60px; + ul.pager { + position: absolute; + right: 20px; + + li { + + &.pager-current { + display: none; + } + position: relative; + a { + font-size: 22px; + text-transform: capitalize; + + } + } + } + + } + } + } + &.block-auto-role-allocation { + width: 30%; + display: table-cell; + background: $light-orange; + vertical-align: middle; + text-align: center; + padding: 0 5%; + border-radius: 20px; + @include mclaren; + @include boxshadow; + @include mobile { + width: 100%; + display: inline-block; + } + > div:nth-of-type(2) { + line-height: 1.2; + font-size: 18px; + } + } + &.progress-calendar { + + div.fc-event-container > div ,div.ui-draggable.ui-draggable-handle { + text-align: center !important; + img { + width: 55px !important; + + } + } + div.event_no { + font-size: 14px; + line-height: 1; + @include tablet{ + font-size: 11px; + } + } + div.reward_text { + font-size: 14px; + line-height: 1; + padding-top: 10px; + background: $button-hover; + @include tablet{ + font-size: 11px; + } + } + div.reward_image { + background: $button-hover; + padding-top: 10px; + } + &.contextual-links-region { + position: static; + } + width: 100%; + max-width: 95%; + margin: 20px auto; + .block-title { + display: none; + } + + #calendar { + .fc-header { + border: none; + background: none; + .fc-header-center { + h2 { + color: $white; + @include mclaren; + border-bottom: none; + + } + } + tbody { + border-top: none; + } + td { + span { + &.fc-button { + background: $yellow; + @include boxshadow; + opacity: 1 !important; + color: $black; + &.fc-button-agendaWeek, &.fc-button-agendaDay, &.fc-button-month { + display: none; + } + } + } + } + } + .fc-content { + color: $black; + + .fc-border-separate { + margin-bottom: 0; + border: none; + .fc-day-header { + padding-bottom: 5px; + color: $white; + font-weight: normal !important; + } + tbody { + @include boxshadow; + } + } + .fc-widget-header{ + border: none; + background: $blue; + } + .fc-widget-content { + border: 1px solid $orange; + } + .fc-day { + .fc-day-content { + font-size: 0; + } + .fc-day-number { + color: $blue; + } + &.fc-state-highlight { + .fc-day-number { + color: $orange !important; + } + } + } + } + } + } + } + } + #print_button { + position: absolute; + top: 2%; + @media screen and (-webkit-min-device-pixel-ratio: 0) { + top: 4.5% !important; + } + top: 2% \0/IE9 !important; + right: 4%; + width: 200px; + line-height: 30px; + padding:6px 0px 6px 45px; + font-size: 17px; + @include mclaren; + background: $yellow url('../images/libraryzurb/print-calender.png') no-repeat !important; + background-position: 10px !important; + color: $black; + border-radius: 10px; + @include boxshadow; + @media screen and (min-width: 0) and (min-resolution: .001dpcm) { + top: 4.5%; + } + + + + } + } + +/**end of progress page**/ +/**css for indivisual user profile**/ +.page-users-public-profile { + .main { + display: table; + width: 100%; + border-collapse: separate; + border-spacing: 10px; + section { + display: inline-block; + width: 43%; + margin-right: 2.5%; + margin-left: 2.5%; + vertical-align: top; + } + .block { + @include bluebackground; + .block-title { + @include waveimg(C); + } + a { + color: $white; + } + } + .view { + .views-field-ops { + float: right; + a.flag { + @include yellowbutton; + } + } + &.view-user-public-profile { + display: table-row; + width: 100%; + } + &.view-my-badges { + counter-reset: section; + .view-content { + display: table; + width: 100%; + padding-left: 3%; + padding-right: 3%; + .views-row { + display: table-row; + width: 100%; + .views-field { + display: table-cell; + &.views-field-title { + color: $white; + @include arialregular; + } + &.views-field-field-badge-image { + position: relative; + &:before { + position: absolute; + left: -14px; + top: 15px; + } + } + } + } + } + } + &.view-booklist-on-activities-page, &.view-my-book-reviews { + counter-reset: section; + ul { + list-style: none; + } + .view-header { + width: 100%; + h3 { + @include waveimg(C); + margin-top: 0; + @include noborder; + } + } + .view-content { + padding-left: 3%; + padding-right: 3%; + .views-field-title { + a { + color: $white; + @include arialregular; + text-transform: capitalize; + font-size: 18px; + &:before { + @include counter; + } + } + } + .views-field-count { + @include arialregular; + margin: 10px 0px 0px 10px; + .views-label-count { + @include like; + } + } + } + } + } + + } +} +/**end**/ +/**css for user own review and booklist indivisual ***/ +.page-my-reviews, .page-my-booklist { + .block-quicktabs { + .quicktabs-wrapper { + .quicktabs-tabs { + background: none !important; + li { + background: none !important; + @include noborder; + a { + @include mclaren; + font-size: 17px; + background: $yellow !important; + color: $black; + border-radius: 10px; + @include boxshadow; + text-transform: capitalize !important; + padding: 7px 22px; + + } + &.active { + background: none !important; + padding-top: 0 !important; + } + } + } + .quicktabs_main { + @include noborder; + overflow: hidden !important; + } + } + } + .view-booklist-on-activities-page { + counter-reset: section; + .view-header { + h3 { + color: $black; + font-size: 22px; + @include mclaren; + margin-top: 20px; + } + } + .view-content { + ul, ol { + list-style: none !important; + .views-field-count { + float: right; + position: relative; + bottom: 20px; + margin-right: 15px; + @include mclaren; + .views-label-count { + @include like; + } + } + .views-field-title { + a { + + @include mclaren; + font-size: 21px; + text-transform: capitalize; + &:before { + @include counter; + } + + + } + } + } + } + } + .view-my-book-reviews { + counter-reset: section; + .view-header { + h3 { + color: $black; + font-size: 22px; + @include mclaren; + margin-top: 20px; + } + } + .view-content { + table { + @include noborder; + tbody { + @include noborder; + } + } + .views-row { + display: table; + width: 100%; + .views-field { + display: table-row; + &.views-field-field-book-cover-image-link { + width: 40%; + float: left; + } + &.views-field-title, &.views-field-body, &.views-field-count, &.views-field-view-node { + width: 60%; + float: right; + } + &.views-field-title { + a { + @include mclaren; + font-size: 21px; + text-transform: capitalize; + } + } + &.views-field-body { + font-size: 18px; + @include arialregular; + } + &.views-field-count { + text-align: right; + .views-label-count { + @include like; + } + } + &.views-field-view-node { + a { + @include yellowbutton; + } + } + } + } + } + } +} +/**end**/ +/**page register**/ +.page-user-register { + #user-register-form { + #edit-field-user-random-list-1, #edit-field-user-random-list-3 { + width: 23%; + float: left; + } + #edit-field-user-random-list-2 { + width: 19%; + float: left; + } + #edit-account { + width: 100%; + display: inline-block; + } + } + + #edit-profile-main-field-receive-notifications { + div.description { + font-size: 14px; + @include arialbold; + color: #4D4D4D; + } + } +} +/*css for event page*/ +.section-events { + + .main { + .view-events { + .view-content { + h3 { + font-size: 18px; + color: $white; + @include mclaren; + @include noborder; + background: $light-orange; + padding: 4px 20px 6px; + margin-top: 35px; + } + .views-row { + display: table; + width: 96%; + margin: auto; + margin-top: 10px; + margin-bottom: 10px; + @include tablet { + border-bottom: 1px solid $black; + padding-bottom: 10px; + } + div { + display: table-row; + float: left; + vertical-align: middle; + color: $black; + font-size: 18px; + @include arialregular; + @include tablet { + float: none; + } + a { + color: $black; + font-size: 18px; + @include arialregular; + + } + &:nth-of-type(1) { + width: 60%; + @include tablet { + width: 100%; + } + } + &:nth-of-type(2), &:nth-of-type(3) { + width: 20%; + @include tablet { + width: 100%; + } + } + } + } + } + } + .pagination.pager { + margin-top: 35px; + } + } +} +/*group-registeration page**/ +.page-group-lead-register, .page-admin-people-p2rp-create-staff { + .form-item-name { +display: block !important; + } +} +.page-admin-people-p2rp-create.page-admin-people-p2rp-create-staff #user-register-form { + .form-item.form-type-textfield.form-item-name { + display: block !important; + } + } + /**follow page**/ + .page-follow { + .main { + .block { + .block-title { + color: $black; + font-size: 28px; + @include mclaren; + @include noborder; + } + } + } + } \ No newline at end of file diff --git a/docroot/sites/all/themes/libraryzurb_teen/scss/components/_post-footer.scss b/docroot/sites/all/themes/libraryzurb_teen/scss/components/_post-footer.scss new file mode 100644 index 00000000..77ee0655 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/scss/components/_post-footer.scss @@ -0,0 +1,76 @@ +/** + * Styles for the Post-Footer area. + */ + +.post-footer { + background: url('../images/libraryzurb/header-background.png') no-repeat; + background-size: cover; + color: $color_white; + + a { + color: $color_gray_light; + } +} + +.l-footer { + @include panel(transparent); + + margin-bottom: 0; + overflow: auto; + + .block { + font-size: 0.85em; + } + + .columns { + padding: 0; + } + + .block-block-10, // TODO use block class to target this + .footer-logo { + float: right; + + a:hover { + background-color: transparent; + } + } + + .block-menu { + float: left; + + li { + float: left; + list-style: none; + list-style-image: none; + padding-right: 0.5em; + margin-left: 0.5em; + border-right: 1px solid; + + @media screen and (max-width: $small-screen) { + float: none; + border: 0; + margin-left: 0; + padding-right: 0; + } + + &.first { + margin-left: 0; + padding-left: 0; + } + + &.last { + border-right: 0; + } + } + } + + .block-block-14, // TODO use block class to target this + .copyright { + line-height: 1.6; + text-align: right; + } + + img { + max-width: 30px; + } +} diff --git a/docroot/sites/all/themes/libraryzurb_teen/scss/components/_pre-header.scss b/docroot/sites/all/themes/libraryzurb_teen/scss/components/_pre-header.scss new file mode 100644 index 00000000..d2081334 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/scss/components/_pre-header.scss @@ -0,0 +1,379 @@ +/** + * Styles for the Pre-Header area. + */ + +.pre-header { + background-color: $yellow; + color: $black; + font-size: 14px; + @include mclaren; + padding: 3px 12px 19px 0px; + display: inline-block; + @include mobile { + padding: 0; + } + + a { + color: $color_gray_light; + padding: 0 5px; + } + + p { + margin-bottom: 0; + } + + ul { + @include inline-list; + margin-bottom: 0; + } + + .pre-header-left { + padding: 0; + .breadcurm { + width: 30%; + float: left; + @include tablet { + width: 100%; + float: none; + display: inline-block; + } + ul { + margin: 0; + position: relative; + top: 10px; + @include noborder; + background: transparent; + li { + position: relative; + &:first-child { + content: " "; + } + &:before { + content: " > "; + width: 20px; + height: 20px; + text-align: center; + color: $black; + left: -30px; + top: 0; + position: absolute; + font-size: 17px; + } + &.current { + + a { + color: $black; + + + } + } + a { + color: $blue; + @include arialregular; + text-transform: capitalize; + font-size: 17px; + float: left; + + } + } + } + } + .top-menu { + width: 70%; + float: right; + @include tablet { + width: 100%; + display: inline-block; + float: none; + } + } + section { + .view { + .view-content { + float: right; + position: relative; + top: 15px; + @include tablet { + float: none; + text-align: left; + left: 10px; + top: 0; + } + } + .views-field { + float: left; + margin-left: 10px; + a { + background-color: $blue; + padding: 2px 12px 5px; + border-radius: 10px; + font-size: 19px; + color: $white; + @include mclaren; + @include boxshadow; + &.newclass { + background-color: $red !important; + } + + &.msg { + padding: 2px 12px 5px 33px !important; + background: $blue url('../images/libraryzurb/msg-img.png'); + background-repeat: no-repeat; + background-position: 10px 8px; + + } + } + &.views-field-name { + a { + color: $black !important; + background: none !important; + border: none !important; + font-size: 14px; + box-shadow: none !important; + @include mclaren; + } + } + + } + } + } + } + + .pre-header-right { + padding: 0; + li { + float: right; + } + } + + // do not display on mobile + +} + +#topmostbranding { + max-width: 100%; + padding: 3px 0.5em; + display: inline-block; + float: right; + @include mobile { + padding: 0; + } +} +#citylinks { + @include mobile { + display: none; + } +} +#mobile-header { + + @include tablet { + display: none; + } + @include desktop { + display: none; + } + @include mobile { + padding-left: 0; + padding-right: 0; + } + button { + float: left; + margin-left: 10px; + margin-bottom: 0; + margin-top: 10px; + @include noborder; + border-radius: none !important; + position: relative; + padding: 17px; + box-shadow: none !important; + z-index: 9; + &:hover, &:focus { + background: $yellow !important; + } + + &:after { + @include previous(35px, 5px, $left: 0, $top: 5px); + border-top: 5px solid $orange; + box-shadow: 0px 10px 0px 0px $orange, 0px 20px 0px 0px $orange; + + + } + } + .block { + &.block-private-msg-custom { + border-radius: none !important; + box-shadow: none !important; + margin-bottom: 0 !important; + padding: 0 !important; + background: none; + display: none; + .views-row { + margin-bottom: 0; + .views-field { + a { + background: $blue; + padding: 10px 0px; + border-bottom: 1px solid $white; + &.newclass { + background: $red !important; + } + &.msg { + position: relative; + &:before { + content: ""; + width: 30px; + height: 20px; + display: inline-block; + position: absolute; + + margin-left: -32px; + background: url('../images/libraryzurb/msg-img.png') no-repeat; + background-position: 6px 1px !important; + } + } + } + } + } + .mobile_menu { + li, a { + width: 100%; + display: inline-block; + font-size: 17px; + @include mclaren; + padding-left: 0; + text-align: center; + color: $white; + } + .menu { + line-height: 1; + li { + margin-left: 0; + a { + padding: 10px 0; + border-bottom: 1px solid $white; + background: $orange; + overflow: visible; + &:hover, &:focus { + border-bottom: 1px solid $orange; + background: $white; + color: $orange !important; + } + &:before { + content: ""; + width: 43px; + height: 25px; + display: inline-block; + position: absolute; + margin-left: -46px; + background-position: -5px -7px !important; + background-size: 63px !important; + margin-top: -6px; + + + } + &.progress { + height: auto; + margin-bottom: 0; + padding:10px 0; + border-left: none; + border-right: none; + border-top: none; + font-weight: normal; + &:before { + background: url('../images/libraryzurb/progress.png') no-repeat; + + } + &:hover, &:focus { + &:before { + background: url('../images/libraryzurb/progress_hover.png') no-repeat; + } + } + } + &.activities { + &:before { + background: url('../images/libraryzurb/activities.png') no-repeat; + } + &:hover, &:focus { + &:before { + background: url('../images/libraryzurb/activities_hover.png') no-repeat; + } + } + } + &.rewards { + &:before { + background: url('../images/libraryzurb/rewards.png') no-repeat; + + } + &:hover, &:focus { + &:before { + background: url('../images/libraryzurb/rewards_hover.png') no-repeat; + } + } + } + &.events { + &:before { + background: url('../images/libraryzurb/events.png') no-repeat; + } + &:hover, &:focus { + &:before { + background: url('../images/libraryzurb/events_hover.png') no-repeat; + } + } + } + &.reviews{ + &:before { + background: url('../images/libraryzurb/reviews.png') no-repeat; + } + &:hover, &:focus { + &:before { + background: url('../images/libraryzurb/reviewactive.png') no-repeat; + } + } + } + &.photos{ + &:before { + background: url('../images/libraryzurb/photosnvideos.png') no-repeat; + } + &:hover, &:focus { + &:before { + background: url('../images/libraryzurb/photos_videos_hover.png') no-repeat; + } + } + } + &.current-program{ + &:before { + background: url('../images/libraryzurb/current-programs.png') no-repeat; + } + &:hover, &:focus { + &:before { + background: url('../images/libraryzurb/currentprogs_hover.png') no-repeat; + } + } + } + } + } + } + } + } + &.block-views { + margin-bottom: 0 !important; + margin-right: 10px; + float: right; + margin-top: 17px; + .views-field-name { + a.username { + color: $black !important; + } + } + .views-field-php-2 { + a { + @include bluebutton($font-size: 17px); + margin-bottom: 10px; + &:hover { + color: $white; + } + } + } + } + } +} diff --git a/docroot/sites/all/themes/libraryzurb_teen/scss/components/_quicktabs.scss b/docroot/sites/all/themes/libraryzurb_teen/scss/components/_quicktabs.scss new file mode 100644 index 00000000..bb5f5dc4 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/scss/components/_quicktabs.scss @@ -0,0 +1,67 @@ +/** + * Styles for Quick Tabs. + */ + +// `ul` is needed to override quicktabs module css +ul.quicktabs-tabs { + margin-bottom:0; + text-align: right; + + li { + background-color: rgba(255, 255, 255, 0.75); + border: 1px solid; + border-bottom: 0; + font-size: 0.8em; + font-weight: bold; + margin: 0 0 0 -4px; + padding:0.25em 0.75em; + text-transform: uppercase; + + &.active { + padding-top: 0.75em; + } + + a { + color: $color_gray_dark; + + &:focus, + &:hover { + background-color: transparent; + } + } + } +} + +.quicktabs_main { + background-color: rgba(255, 255, 255, 0.75); + border: 1px solid; + border-bottom: 0; + overflow: auto; + padding: 0 0.75em; + + input[type="text"] { + background: url(../images/iconsprite.png) -5px -67px no-repeat; + background-color: rgba(255, 255, 255, 1); + float: left; + padding-left: 30px; + width: 75%; + } + + input[type="submit"], + button { + float: right; + text-transform: uppercase; + width: 20%; + } +} + +// TODO: clean up this; what is .large-5? +.block-quicktabs-search-our { + margin-top: 55px; // LibrarySite Edit + @media all and (max-width: $topbar-breakpoint) { + .large-5, + .large-4 & { + margin-top: 1em; + } + } +} diff --git a/docroot/sites/all/themes/libraryzurb_teen/scss/components/_top-bar.scss b/docroot/sites/all/themes/libraryzurb_teen/scss/components/_top-bar.scss new file mode 100644 index 00000000..ac5fa0c6 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/scss/components/_top-bar.scss @@ -0,0 +1,174 @@ +/** + * Styles for the Top Bar. + */ + +#topbar { + border-bottom: 1px solid; + border-top: 1px solid; + margin-bottom: 2em; + + .top-bar { + margin-bottom: 0; // there might be a variable for this + } +} + +.top-bar-section { + .main-nav li a { + font-size: 1.25em; + font-weight: normal; + } + + &.active:hover { + color: $topbar-link-color-hover; + } + + .dropdown { + li { + border: 1px solid; + font-size: 0.85em; + + &:not(.first) { + border-top: 0; + } + + &.show-for-small { + border-top: 1px solid; // for visible/thicker border around duplicate parent + } + } + } + + .has-dropdown { + > a { + padding-right: 30px !important; // override Foundation `!important` + &::after { + margin-right: 10px; + } + } + + .dropdown li.has-dropdown > a::after { + @include css-triangle($topbar-dropdown-toggle-size, rgba($topbar-dropdown-toggle-color, $topbar-dropdown-toggle-alpha), $default-float); + margin-right: 5px; + } + } + + ul li.active a { + &.active { + color: $topbar-link-color-active; + } + + &:hover { + color: $topbar-link-color-hover; + } + } +} + +.show-for-small { + display: block !important; // override Foundation `!important` + + a::before { + content: "↳ "; + } +} + +// small screens only +.top-bar .toggle-topbar.menu-icon { + border-right: 1px solid; + left: 12px; + margin-top: -26px; + padding: 10px 0 10px 40px; + right: auto; + width: 50%; + + @media screen and (max-width: $ittybitty-screen) { + padding-left: 30px; + } + + @media screen and (max-width: $innyminny-screen) { + border-right: 0; + } + + a { + font-size: 1.25em; + font-weight: normal; + text-indent: -65px; + width: 45px; + + &:focus, + &:hover { + background-color: transparent; + } + + @media screen and (max-width: $ittybitty-screen) { + font-size: 0.9em; + text-indent: -45px; + width: 35px; + } + } +} + +.top-bar .search-icon { + display: none; + + // small screens only + @media screen and (min-width: $innyminny-screen) and (max-width: $topbar-breakpoint) { + display: block; + float: right; + font-weight: normal; + padding-right: 0.75em; + text-transform: uppercase; + + a { + display: block; + background: url(../images/iconsprite.png) -7px -93px no-repeat; + color: $topbar-link-color; + font-size: 1.25em; + margin-top: -38px; + padding-left: 25px; + + &:focus, + &:hover { + background-color: transparent; + color: $topbar-link-color; + } + + @media screen and (max-width: $ittybitty-screen) { + font-size: 0.9em; + background: none; + margin-top: -33px; + } + } + } +} + +// small screens only +.top-bar.expanded .main-nav { + > .first { + border-top: 1px solid; + } + + > li { + border-bottom: 1px solid; + } + + .back { + border-top: 1px solid; + + h5 { + font-family: $body-font-family; + margin: 0; + + a { + color: #333; + font-size: 2em; + + &::before { + content: "↩ "; + } + } + } + } + + .show-for-small { + border-bottom: 1px solid; // for thicker border around duplicate parent + } +} diff --git a/docroot/sites/all/themes/libraryzurb_teen/scss/components/_type.scss b/docroot/sites/all/themes/libraryzurb_teen/scss/components/_type.scss new file mode 100644 index 00000000..21bef761 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/scss/components/_type.scss @@ -0,0 +1,19 @@ +// Docs: http://foundation.zurb.com/docs/components/type.html +// Before adding styles be sure to modify variables. + +.title {} +.node-title {} +.page-title {} +.block-title {} + +.item-list {} +p { + font-size: 18px; + font-family: Arialregular; + font-style: normal !important; + font-weight: normal !important; + -webkit-font-smoothing: antialiased !important; + line-height: 1.4; + margin-bottom: 23px; + display: inline-block; +} diff --git a/docroot/sites/all/themes/libraryzurb_teen/scss/components/_webforms.scss b/docroot/sites/all/themes/libraryzurb_teen/scss/components/_webforms.scss new file mode 100644 index 00000000..3d1c6f07 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/scss/components/_webforms.scss @@ -0,0 +1,31 @@ +/** + * Styles for Webforms. + */ + + +.webform-client-form { + label:not(.option) { + font-weight: $form-label-font-weight; + } + + .webform-component { + margin-bottom: $form-component-bottom-margin; + } + + .webform-component-date, + .webform-component-webform_time { + .webform-container-inline { + select, .form-radios { + max-width: 20%; + } + } + } + + input[type="file"], + input[type="checkbox"], + input[type="radio"], + input[type="text"], + select { + margin:0; + } +} diff --git a/docroot/sites/all/themes/libraryzurb_teen/scss/custom.scss b/docroot/sites/all/themes/libraryzurb_teen/scss/custom.scss new file mode 100644 index 00000000..918eebc6 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/scss/custom.scss @@ -0,0 +1,781 @@ +/* @file + * This file is a custom file that loads all files. Each non-base layer + * can be disabled. + * + * Do not name this file, "app.scss". If you run a compass update this file can + * be wiped out with a compass update. By default, when a compass project is + * created the file will be named app.scss. Thus this file is named, + * THEMENAME.scss. + * + * This application file (THEMENAME.scss) is where all the partials are + * imported. + * + * Theme styles are categorized using SMACSS standards. They utilize + * categorization of styles into various categories. Those categories are the + * following: + * + * - Base: CSS reset/normalize plus HTML element styling. + * - Layout: Macro arrangement of a web page, including any grid systems. + * - Component: Dictate minor layout modules or reusable elements. + * - State: Describe the appearance of a module in various states. + * - Theme: Purely visual optional styling (“look-and-feel”) for a component. + * + * * Contains Sass customizations for the Klamath County Library sub-theme. + * + * Compile Sass into CSS with `compass clean && compass watch` for development + * environments or `compass clean && compass compile -e production --force` for + * production environments. + * + * @see config.rb + * + * For more information about this new Drupal css file standard, please review + * the following: + * - https://drupal.org/node/1887922 + * - http://smacss.com/ + */ + +// Base +// +// Init file contains required imports. Here's where we include normalize, +// foundation and also compass. +@import "base/init"; +// Import our mixins early so they can be used by other partials. +@import "base/mixins"; +// +// Common file is where you place common utility classes to extend or +// parametrics. Optional file. +@import "base/common"; +// +// Fix for some Drupal CSS quirks (Drupalisms). +@import "base/drupal"; +// +// Styling for elements. +@import "base/elements"; + +// Layout +// +// Each section of the document has it's own partial seperated out to improve +// developer experience. Additionally, grids can be declared in layouts as well. +@import "layout/header"; +@import "layout/main"; +@import "layout/aside"; +@import "layout/triptych"; +@import "layout/footer"; + +// Components +// Import `components` directory structure with Sass Globbing. +// @see https://github.com/chriseppstein/sass-globbing +@import "components/**/*"; + +// Themes +// @import "theme/button-light"; + +// IE8 Grid Support +//@import "ie"; + +/* ----------------------------------------- + Shared Styles + ----------------------------------------- */ + +a { + color: $blue; + cursor: progress; + + &.permalink { + display: none;; + } +} +a:hover, +a:focus { + color: $blue; + background-color: none; + outline: none; + text-decoration: underline; +} + +h1 { + &#page-title { + margin-top:0; + font-size: 28px; + } +} + +h2 { + color: $color_gray_medium; + border-bottom: 1px solid $color_gray_light; + font-size: 1.4em; + header &{ + border-bottom: 0; + &.block-title { + text-transform: uppercase; + font-size: 0.9em; + margin: 5px 0 0 0.75em; + text-shadow: 1px 1px $color_white; + @media screen and (max-width: $smallmedium-screen) { + font-size: 0.7em; + } + &:after { + content: ":"; + } + } + } + .block-menu-block-1 &{ + &.block-title { + border-top: 3px solid; + padding: 0.5em 0 0.1em 0.5em; + margin-bottom:0; + } + } + .l-footer-columns &{ + &.block-title { + border-top: 3px solid; + border-bottom: 0; + padding: 0.25em 0 0; + font-size: 1.2em; + margin-bottom: 0; + } + } + &.field-label { + border-bottom: 0; + font-size: 1em; + text-transform: uppercase; + margin:1em 0 0 0; + } + .section-library-search & { + border-bottom: 0; + font-size: 1em; + text-transform: uppercase; + } +} + +h3 { + color: $color_gray_medium; + text-transform: capitalize; + font-size: 1.2em; +} + +h4 { + text-transform: capitalize; + font-size: 1em; +} + +blockquote { + border-left: 0; + font-style: italic; + padding: 0 3em; + &:before, + &:after { + content:"\201C"; + font-size:4em; + color: $color_gray_dark; + float: left; + margin: -10px 0 0 -40px; + } + &:after { + content:"\201D"; + float: right; + margin: -70px -20px 0 0; + } +} + +.form-item .description { + font-size: emCalc(13); +} + +li { + .view-mode-full &{ + margin-left: 3em; + } +} + +.special { + font-size: 1.2em; +} +.notice { + background-color: $color_gray_light; + font-style: italic; + padding:0.5em 1em; +} +.aside { + background-color: $color_gray_medium; + padding:1em 1.25em; + width: 40%; + float: right; + margin: 0 0 1em 1em; + color: $color_white; + font-size:1em; + font-style: italic; + @media screen and (max-width: $topbar-breakpoint) { + width: 50%; + font-size:0.9em; + padding: 0.75em 1em; + } + a { + border-bottom: medium solid; + /* color: $color_gray_dark; */ + + &:hover, + &:focus { + /* background-color: $color_gray_light; */ + } + } +} +.left { + float:left; + margin:0 1em 1em 0; +} +.right { + float:right; + margin:0 0 1em 1em; +} + +.readmore, +.field-name-field-event-registration, +.registrationlink, +.resourcelink, +.field-name-field-resource-link, +.node-readmore { + margin: 1em 0; + @media screen and (max-width: $small-screen) { + margin: 0 0 0.5em 0; + } + a, + a:link, + a:visited { + width: auto; + padding: 0.25em 0.5em; + text-transform: uppercase; + box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5) inset; + transition: background-color 300ms ease-out 0s; + border: 1px solid; + cursor: pointer; + @media screen and (max-width: $smallmedium-screen) { + font-size: 0.8em; + } + } +} + +li { + &.rsslink, + &.calendarlink { + background: url(../images/iconsprite.png) -7px -40px no-repeat; + list-style: none; + padding-left: 32px; + margin-top: 0.25em; + } + &.calendarlink { + background: url(../images/iconsprite.png) -7px -10px no-repeat; + } +} + +.addtocal { + margin: 0 0.5em; + @media screen and (max-width: $small-screen) { + float: none; + margin: 1em 0; + } +} + +.posted, +.postdate { + margin: -1em 0 1em; + font-size: 0.9em; + font-style: italic; +} +.postdate { + margin: 0; +} +.posted { + clear: both; +} +.element-invisible.eioverride { + clip: auto; + height: auto; + overflow: visible; + position: relative; +} + +@media screen and (min-width: $small-screen) and (max-width: $smallmedium-screen) { + .smallmedium-6 { + position: relative; + width: 50%; + } + .smallmedium-12 { + position: relative; + width: 100%; + } +} + +/* HEADER AREA */ + +header { + .header-middle { + background: url('../images/libraryzurb/header-background.png') no-repeat; + background-size: cover; + margin-top: -2px; + padding-left: 11px; +} + div#topbar { + border: none !important; + } + + + @media all and (max-width: $smallmedium-screen) { + background: none; + } + @media all and (max-width: $topbar-breakpoint) { + .large-5, + .large-4 { + display: none; + } + } + + h2 { + color: $color_gray_dark; + } +} + +// +// SIDEBAR +// + +.block-menu-block-1 { + margin-bottom: 2em; + ul { + li { + border-bottom: 1px solid; + list-style: none; + list-style-image: none; + padding: 0.75em 0 0.5em 1em; + a, + a:link, + a:visited { + display: block; + } + li { + padding: 0.35em 0.5em 0.35em 0; + border-bottom:0; + line-height: 1em; + font-size:0.9em; + } + } + } +} + +.sidebar { + .block:not(.block-menu-block-1) { + /* border: 1px solid; + font-size: 0.9em; */ + margin: 0 0 2em 0; + h2 { + &.block-title { + border: 0; + font-size: 22px; + text-transform: capitalize; + line-height: 1; + margin-top: 0; + } + } + .view-reward-earn { + .view-content { + padding: 0px 20px; + } + } + } + +} + +// +// TRYPTIC COLUMNS +// + +.l-triptych { + h2 { + &.block-title { + border-bottom: 0; + @media screen and (max-width: $small-screen) { + border-top: 1px solid; + padding-top: 0.5em; + } + } + } + li { + margin-left: 0; + list-style-position: inside; + } + .block { + padding: 0 2em; + @media screen and (min-width: $small-screen) and (max-width: $smallmedium-screen) { + padding: 0 1em; + } + @media screen and (max-width: $small-screen) { + padding: 0; + p { + margin-bottom: 0; + } + } + } + .triptych-middle { + border-left: 1px solid; + border-right: 1px solid; + @media screen and (min-width: $small-screen) and (max-width: $smallmedium-screen) { + border-right: 0; + } + @media screen and (max-width: $small-screen) { + border: 0; + } + } +} + + + +// +// FOOTER COLUMNS +// + +.footcols { + background-color: $color_gray_light; + border-top: 1px solid; + margin-top: 2em; + @media screen and (max-width: $small-screen) { + margin-top: 0.5em; + } +} +.l-footer-columns { + padding:2.5em 0 2em; + @media screen and (max-width: $small-screen) { + padding: 1em 0; + } + ul { + li { + list-style: none; + list-style-image: none; + padding: 0.15em 0; + } + } +} + +// +// MAIN +// + +.l-main { + @media screen and (max-width: $small-screen) { + margin-top: -20px; + } +} + +// +// INTERNAL PAGE STYLES +// + +.view-mode-full { + .image { + width: 50%; + float: right; + margin: 0 0 0 4%; + .node-type-resource &{ + width: auto; + } + li &{ + margin-left: 0; + } + @media screen and (max-width: $topbar-breakpoint) { + float: none; + width: 100%; + margin: 0 0 1em 0; + } + .flexslider { + padding: 0; + margin: 0; + border: 1px solid; + box-shadow: none; + border-radius: 0; + .flex-caption { + margin: 0.5em; + padding: 0.5em 0; + font-style: italic; + text-align: center; + line-height: 1.1em; + font-size: 0.8em; + p { + margin: 0; + padding: 0; + } + } + } + } + .field-name-field-resource-name { + font-weight: bold; + text-transform: capitalize; + margin-bottom: 1em; + } + .field-name-field-share { + .field-label { + text-transform: uppercase; + float:left; + margin-right: 0.5em; + } + a:hover, + a:focus { + background: none; + } + } + .field-name-field-branch-phone { + margin: 1em 0; + font-weight: bold; + } + .field-name-field-audience-term a { + display: inline-block; + } + .field-name-field-audience-term a + a { + margin-left: 10px; + } +} + + /* views styling */ +.views-row { + line-height: 1.2em; + clear: both; + margin-bottom: 2em; + .block-views &{ + margin-bottom: 1em; + } + h3 { + text-transform: none; + margin-bottom: 0; + } + img { + /* float:right; + margin: 0.5em 0 0.5em 1em; + border: 1px solid; + */ + padding: 3px; + } +} + +/* Events Address */ +.view-events.view-display-id-address_pane .views-row { + clear: none; +} +.view-events.view-display-id-map_block .views-row img { + float: none; + padding: 0; + border: 0 none; + margin: 0; +} + +.views-exposed-form { + padding: 0.5em 1em; + border: 1px solid; + button, + .button { + padding: 0.3em 0.5em; + text-transform: uppercase; + } + .views-exposed-widget { + .form-submit { + margin-top:1.05em; + } + input[type="file"], + input[type="checkbox"], + input[type="radio"], + input[type="text"], + select { + margin:0; + } + } +} + + /* taxonomy page styling */ +.page-taxonomy-term { + .l-main { + h2 { + &.node-title { + font-size: 1.2em; + border-bottom: 0; + margin-bottom: 0; + } + } + img { + float:right; + margin: 0.5em 0 0.5em 1em; + border: 1px solid; + padding: 3px; + } + li { + &.node-readmore { + list-style: none outside none; + } + } + .posted { + margin: 0; + } + } +} + +// +// COMMENTS +// + +.comment_forbidden { + display: none; +} + +#comments { + h3 { + font-size: 0.9em; + } + .submitted, + .content { + line-height: 1.2em; + font-size: 0.8em; + } + .submitted { + font-style: italic; + } +} + + +// +// FlexSlider Slideshow Styles +// + +.flexslider { + padding: 0; + margin: 0; + border: 0; + box-shadow: none; + border-radius: 0; + p { + @media screen and (max-width: $small-screen) { + margin-bottom: 0.5em; + } + } + h2 { + border: 0; + } + li { + margin-left:0; + } + .views-field-field-image { + width: 70%; + margin-right: 4%; + float: left; + margin-bottom: 2em; + @media screen and (max-width: $topbar-breakpoint) { + float:none; + width:100%; + margin-right: 0; + margin-bottom:0.5em; + } + } + .field-name-field-page-slideshow-image &{ + img { + width: 70%; + margin-right: 4%; + margin-bottom: 2em; + float:left; + @media screen and (max-width: $topbar-breakpoint) { + border:1px solid; + width:100%; + margin-right:0; + margin-bottom:0; + } + } + .flex-caption { + margin: 1em 0; + font-style: italic; + @media screen and (max-width: $topbar-breakpoint) { + border:1px solid; + border-top:0; + width:100%; + margin: 0.5em 0 1em 0; + padding: 1em 0.5em 0.5em; + text-align: center; + font-size: 0.8em; + line-height: 1.1em; + } + } + } + .flex-control-nav { + left: 74%; + margin-top: -15%; + bottom: auto; + position: absolute; + text-align: none; + width:auto; + @media screen and (max-width: $smallmedium-screen) { + margin-top: -8%; + } + @media screen and (max-width: $topbar-breakpoint) { + display: none; + } + } +} +// Update needed with FlexSlider 2.2.2 library. +.flex-direction-nav a:before { + font-size: 26px; +} + + + +/* ----------------------------------------- + Page Name + ----------------------------------------- */ + + +// +// Event Content Type +// + +div { + .addressfield-container-inline { + margin-bottom: 1em; + line-height: 1.4em; + &:after { + clear:none; + } + } +} + +.field-name-field-event-date-and-time, +.datetime { + line-height: 1.4em; + margin-bottom: 1em; + font-weight: bold; + & .addtocal, + & .item-list { + font-weight: normal; + } +} + +// +// Branches Block View +// + +.block-views-branches-block { + font-size: 0.8em; + h4 { + margin: 0; + } + .views-field-field-branch-phone { + @media screen and (min-width: $small-screen) { + margin: 0; + padding: 0; + } + } + .addressfield-container-inline { + margin: 0; + @media screen and (max-width: $small-screen) { + margin-bottom: 0.5em; + } + } +} +.sidebar { + span { + font-size: 17px; + @include arialregular; + line-height: 1.2; + } +} diff --git a/docroot/sites/all/themes/libraryzurb_teen/scss/ie.scss b/docroot/sites/all/themes/libraryzurb_teen/scss/ie.scss new file mode 100644 index 00000000..3dcebcd2 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/scss/ie.scss @@ -0,0 +1,40 @@ +/* Welcome to Compass. Use this file to write IE specific override styles. */ + +// to add support for IE8 or below, use in your scss like so: +//.lt-ie9 { +// @include columnFix; +//} + +@mixin columnFix($columns: 12){ + $i: 1; + @while $i < $columns + 1 { + + $colWidth: ($i/$columns)*100%; + $colWidth7: ($i/$columns)*98%; + & .large-#{$i}, & .small-#{$i} { + width: $colWidth; + *width: $colWidth7; //sets the width for ie7 + } + + /* thanks to pinder */ + & .large-offset-#{$i} { + margin-left: ($i/$columns)*100%; + *margin-left: ($i/$columns)*98%;; + } + + /* allows centering block elements */ + & .centered-#{$i}{ + margin-left: (100% - $colWidth)/2; + *margin-left: (98% - $colWidth7)/2; + } + $i: $i + 1; + } + + & .columns { + //*padding-left: 1%; + //*padding-right: 1%; + } + & .row .row { + *margin-left: 0; /* fix ie7 margins */ + } +} \ No newline at end of file diff --git a/docroot/sites/all/themes/libraryzurb_teen/scss/layout/_aside.scss b/docroot/sites/all/themes/libraryzurb_teen/scss/layout/_aside.scss new file mode 100644 index 00000000..2454ba9d --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/scss/layout/_aside.scss @@ -0,0 +1,7 @@ +// Non-modular or client styles for asides or sidebars. + +.l-sidebar {} + +.sidebar {} +.sidebar-first {} +.sidebar-second {} diff --git a/docroot/sites/all/themes/libraryzurb_teen/scss/layout/_footer.scss b/docroot/sites/all/themes/libraryzurb_teen/scss/layout/_footer.scss new file mode 100644 index 00000000..d3cd6498 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/scss/layout/_footer.scss @@ -0,0 +1,6 @@ +// Non-modular or client styles for .l-footer region. + + +.l-footer {} +.l-footer-columns {} + diff --git a/docroot/sites/all/themes/libraryzurb_teen/scss/layout/_header.scss b/docroot/sites/all/themes/libraryzurb_teen/scss/layout/_header.scss new file mode 100644 index 00000000..81cbede3 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/scss/layout/_header.scss @@ -0,0 +1,187 @@ +// Non-modular or client styles for .l-header region. + +.l-header { + background: $header; + .row { + &.header-middle { + max-width: 100%; + a#logo { + margin: 20px 20px 20px 0px; + } + h1#site-name { + margin: 26px 0px 0px; + } + h2#site-slogan { + margin: 2px 0px 0px; + } + section { + &.s-logoblock { + margin-bottom: 0px; + p { + margin-bottom: 0px; + } + } + &.block-menu-menu-secoundary-menu { + margin-bottom: 0; + @include mobile { + display: none; + } + ul.menu { + float: right; + list-style: none; + position: relative; + bottom: 20px; + li { + display: inline-block; + vertical-align: top; + height: 106px; + width: 100px; + @media screen and (min-width: 768px) and (max-width: 1025px) { + height: 70px; + width: 60px; + } + + + + a { + position: relative; + width: 100%; + height: 100%; + font-size: 0; + + &:after { + @include previous(94px, 105px, $left: 0, $top: 0); + @include tablet { + @include previous(60px, 70px, $left: 0, $top: 0); + } + + background-size: 100px; + @include animate; + } + + &.current-program { + position: relative; + &:hover,&.active-trail { + &:after { + background: url('../images/libraryzurb/currentprogs_hover.png') no-repeat; + @include bck_size_tablet; + } + } + &:after { + background: url('../images/libraryzurb/current-programs.png') no-repeat; + @include bck_size_tablet; + } + + } + &.activities { + &:hover,&.active-trail { + &:after { + background: url('../images/libraryzurb/activities_hover.png') no-repeat; + @include bck_size_tablet; + } + } + &:after{ + background: url('../images/libraryzurb/activities.png') no-repeat; + @include bck_size_tablet; + } + } + &.rewards { + &:hover,&.active-trail { + &:after { + background: url('../images/libraryzurb/rewards_hover.png') no-repeat; + @include bck_size_tablet; + } + } + &:after { + background: url('../images/libraryzurb/rewards.png') no-repeat; + @include bck_size_tablet; + } + } + &.reviews { + &:hover,&.active-trail { + &:after { + background: url('../images/libraryzurb/reviewactive.png') no-repeat; + @include bck_size_tablet; + } + } + &:after { + background: url('../images/libraryzurb/reviews.png') no-repeat; + @include bck_size_tablet; + } + } + &.photos { + &:hover,&.active-trail { + &:after { + background: url('../images/libraryzurb/photos_videos_hover.png') no-repeat; + @include bck_size_tablet; + } + } + &:after { + background: url('../images/libraryzurb/photosnvideos.png') no-repeat; + @include bck_size_tablet; + } + } + &.events { + &:hover,&.active-trail { + &:after { + background: url('../images/libraryzurb/events_hover.png') no-repeat; + @include bck_size_tablet; + } + } + &:after { + background: url('../images/libraryzurb/events.png') no-repeat; + @include bck_size_tablet; + } + } + &.progress { + &:hover,&.active-trail { + &:after { + background: url('../images/libraryzurb/progress_hover.png') no-repeat; + @include bck_size_tablet; + } + } + border: none; + &:after { + background: url('../images/libraryzurb/progress.png') no-repeat; + @include bck_size_tablet; + } + } + + &:hover { + &:after { + @include rotate(360deg, $dir: Y); + } + + } + } + + } + + + } + } + } + } +} +} + +// Top Bar +//-------------------------------------------------- +.top-bar { + .title-area {} +} + +.top-bar-section {} +.top-bar-section .left {} +.top-bar-section .right {} +/**hide admin menu on mobile css**/ + @include mobile { + #admin-menu { + display: none; + } + } + @include tablet { + #admin-menu { + display: none; + } + } \ No newline at end of file diff --git a/docroot/sites/all/themes/libraryzurb_teen/scss/layout/_main.scss b/docroot/sites/all/themes/libraryzurb_teen/scss/layout/_main.scss new file mode 100644 index 00000000..cdac64a8 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/scss/layout/_main.scss @@ -0,0 +1,41 @@ +// Non-modular or client styles for the .l-content region. + +.l-main {} + +.node {} +.body {} +.image {} +.breadcrumb {} +.media-youtube-video { + position: relative; + padding-bottom: 56.25%; + height: 0; + overflow: hidden; + max-width: 100%; + iframe, object, embed { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + } +} + +#citylinks { + @include mobile { + display: none; + } +} +#mobile-header { + @include tablet { + display: none; + } + @include desktop { + display: none; + } +} + + + + + diff --git a/docroot/sites/all/themes/libraryzurb_teen/scss/layout/_triptych.scss b/docroot/sites/all/themes/libraryzurb_teen/scss/layout/_triptych.scss new file mode 100644 index 00000000..22765768 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/scss/layout/_triptych.scss @@ -0,0 +1,7 @@ +// Non-modular or client styles for the .l-triptych region. + +.l-triptych {} + +.triptych-first {} +.triptych-middle {} +.triptych-last {} diff --git a/docroot/sites/all/themes/libraryzurb_teen/scss/librarysite/_colors.scss b/docroot/sites/all/themes/libraryzurb_teen/scss/librarysite/_colors.scss new file mode 100644 index 00000000..5d7d85ae --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/scss/librarysite/_colors.scss @@ -0,0 +1,32 @@ +// DEFAULT COLORS +// There are three detault color sets. +// Uncomment the color set you want to use. +// Comment out all color sets you aren't using. +// Change primary color on line 70 of _settings.scss to use c1 +// Look for "LibrarySite Edit" in _settings.scss and custom.scss for site-by-site customizations + +$color_gray_dark: #333333; +$color_gray_light: #f1f1f1; +$color_white: #ffffff; +$color_notice: #ffe382; + +// Color set 1: Red and Blue + +$color_c1: #ee3940; +$color_c2: #983432; +$color_c3: #afccec; +$color_c4: #e2f0f9; + +// Color set 2: Green and Gold + +// $color_c1: #24ad5b; +// $color_c2: #146836; +// $color_c3: #f9cc7b; +// $color_c4: #fdebc5; + +// Color set 2: Blue and Purple + +// $color_c1: #1b97d5; +// $color_c2: #19659f; +// $color_c3: #d6b3d4; +// $color_c4: #ecd9ec; diff --git a/docroot/sites/all/themes/libraryzurb_teen/scss/librarysite/_fonts.scss b/docroot/sites/all/themes/libraryzurb_teen/scss/librarysite/_fonts.scss new file mode 100644 index 00000000..c5595adc --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/scss/librarysite/_fonts.scss @@ -0,0 +1,26 @@ +// DEFAULT FONTS +// There are four default font sets. +// Uncomment the set you want to use. +// Comment out the sets you are not using. +// Edit the html.tpl.php file with the correct font scripts +// default font scripts are found in LIBRARYSITE_FONTS.txt + +// Font set 1: Zurb defaults + +// $header-font-family: "Rosarivo", "Georgia", georgia, serif; +// $body-font-family: "Source Sans Pro", "Helvetica", Helvetica, Arial, sans-serif; + +// Font set 2: Clean Type - Arvo + + $header-font-family: "Arvo", "Georgia", georgia, serif; + $body-font-family: "Source Sans Pro", "Helvetica", Helvetica, Arial, sans-serif; + +// Font set 3: Old Typewriter - Special Elite + +// $header-font-family: "Special Elite", "Georgia", georgia, serif; +// $body-font-family: "Source Sans Pro", "Helvetica", Helvetica, Arial, sans-serif; + +// Font set 4: Playful - Shadows into Light + +// $header-font-family: "Shadows into Light", "Georgia", georgia, serif; +// $body-font-family: "Source Sans Pro", "Helvetica", Helvetica, Arial, sans-serif; diff --git a/docroot/sites/all/themes/libraryzurb_teen/scss/librarysite_blue/_colors.scss b/docroot/sites/all/themes/libraryzurb_teen/scss/librarysite_blue/_colors.scss new file mode 100644 index 00000000..480ba7ec --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/scss/librarysite_blue/_colors.scss @@ -0,0 +1,32 @@ +// DEFAULT COLORS +// There are three detault color sets. +// Uncomment the color set you want to use. +// Comment out all color sets you aren't using. +// Change primary color on line 70 of _settings.scss to use c1 +// Look for "LibrarySite Edit" in _settings.scss and custom.scss for site-by-site customizations + +$color_gray_dark: #333333; +$color_gray_light: #f1f1f1; +$color_white: #ffffff; +$color_notice: #ffe382; + +// Color set 1: Red and Blue + +//$color_c1: #ee3940; +//$color_c2: #983432; +//$color_c3: #afccec; +//$color_c4: #e2f0f9; + +// Color set 2: Green and Gold + +// $color_c1: #24ad5b; +// $color_c2: #146836; +// $color_c3: #f9cc7b; +// $color_c4: #fdebc5; + +// Color set 2: Blue and Purple + +$color_c1: #1b97d5; +$color_c2: #19659f; +$color_c3: #d6b3d4; +$color_c4: #ecd9ec; diff --git a/docroot/sites/all/themes/libraryzurb_teen/scss/librarysite_blue/_fonts.scss b/docroot/sites/all/themes/libraryzurb_teen/scss/librarysite_blue/_fonts.scss new file mode 100644 index 00000000..54a74624 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/scss/librarysite_blue/_fonts.scss @@ -0,0 +1,26 @@ +// DEFAULT FONTS +// There are four default font sets. +// Uncomment the set you want to use. +// Comment out the sets you are not using. +// Edit the html.tpl.php file with the correct font scripts +// default font scripts are found in LIBRARYSITE_FONTS.txt + +// Font set 1: Zurb defaults + +// $header-font-family: "Rosarivo", "Georgia", georgia, serif; +// $body-font-family: "Source Sans Pro", "Helvetica", Helvetica, Arial, sans-serif; + +// Font set 2: Clean Type - Arvo + +// $header-font-family: "Arvo", "Georgia", georgia, serif; +// $body-font-family: "Source Sans Pro", "Helvetica", Helvetica, Arial, sans-serif; + +// Font set 3: Old Typewriter - Special Elite + +// $header-font-family: "Special Elite", "Georgia", georgia, serif; +// $body-font-family: "Source Sans Pro", "Helvetica", Helvetica, Arial, sans-serif; + +// Font set 4: Playful - Shadows into Light + + $header-font-family: "Shadows into Light", "Georgia", georgia, serif; + $body-font-family: "Source Sans Pro", "Helvetica", Helvetica, Arial, sans-serif; diff --git a/docroot/sites/all/themes/libraryzurb_teen/scss/librarysite_green/_colors.scss b/docroot/sites/all/themes/libraryzurb_teen/scss/librarysite_green/_colors.scss new file mode 100644 index 00000000..6b102bdd --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/scss/librarysite_green/_colors.scss @@ -0,0 +1,32 @@ +// DEFAULT COLORS +// There are three detault color sets. +// Uncomment the color set you want to use. +// Comment out all color sets you aren't using. +// Change primary color on line 70 of _settings.scss to use c1 +// Look for "LibrarySite Edit" in _settings.scss and custom.scss for site-by-site customizations + +$color_gray_dark: #333333; +$color_gray_light: #f1f1f1; +$color_white: #ffffff; +$color_notice: #ffe382; + +// Color set 1: Red and Blue + +//$color_c1: #ee3940; +//$color_c2: #983432; +//$color_c3: #afccec; +//$color_c4: #e2f0f9; + +// Color set 2: Green and Gold + +$color_c1: #24ad5b; +$color_c2: #146836; +$color_c3: #f9cc7b; +$color_c4: #fdebc5; + +// Color set 2: Blue and Purple + +// $color_c1: #1b97d5; +// $color_c2: #19659f; +// $color_c3: #d6b3d4; +// $color_c4: #ecd9ec; diff --git a/docroot/sites/all/themes/libraryzurb_teen/scss/librarysite_green/_fonts.scss b/docroot/sites/all/themes/libraryzurb_teen/scss/librarysite_green/_fonts.scss new file mode 100644 index 00000000..2e914adb --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/scss/librarysite_green/_fonts.scss @@ -0,0 +1,26 @@ +// DEFAULT FONTS +// There are four default font sets. +// Uncomment the set you want to use. +// Comment out the sets you are not using. +// Edit the html.tpl.php file with the correct font scripts +// default font scripts are found in LIBRARYSITE_FONTS.txt + +// Font set 1: Zurb defaults + +// $header-font-family: "Rosarivo", "Georgia", georgia, serif; +// $body-font-family: "Source Sans Pro", "Helvetica", Helvetica, Arial, sans-serif; + +// Font set 2: Clean Type - Arvo + +// $header-font-family: "Arvo", "Georgia", georgia, serif; +// $body-font-family: "Source Sans Pro", "Helvetica", Helvetica, Arial, sans-serif; + +// Font set 3: Old Typewriter - Special Elite + + $header-font-family: "Special Elite", "Georgia", georgia, serif; + $body-font-family: "Source Sans Pro", "Helvetica", Helvetica, Arial, sans-serif; + +// Font set 4: Playful - Shadows into Light + +// $header-font-family: "Shadows into Light", "Georgia", georgia, serif; +// $body-font-family: "Source Sans Pro", "Helvetica", Helvetica, Arial, sans-serif; diff --git a/docroot/sites/all/themes/libraryzurb_teen/scss/librarysite_red/_colors.scss b/docroot/sites/all/themes/libraryzurb_teen/scss/librarysite_red/_colors.scss new file mode 100644 index 00000000..5d7d85ae --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/scss/librarysite_red/_colors.scss @@ -0,0 +1,32 @@ +// DEFAULT COLORS +// There are three detault color sets. +// Uncomment the color set you want to use. +// Comment out all color sets you aren't using. +// Change primary color on line 70 of _settings.scss to use c1 +// Look for "LibrarySite Edit" in _settings.scss and custom.scss for site-by-site customizations + +$color_gray_dark: #333333; +$color_gray_light: #f1f1f1; +$color_white: #ffffff; +$color_notice: #ffe382; + +// Color set 1: Red and Blue + +$color_c1: #ee3940; +$color_c2: #983432; +$color_c3: #afccec; +$color_c4: #e2f0f9; + +// Color set 2: Green and Gold + +// $color_c1: #24ad5b; +// $color_c2: #146836; +// $color_c3: #f9cc7b; +// $color_c4: #fdebc5; + +// Color set 2: Blue and Purple + +// $color_c1: #1b97d5; +// $color_c2: #19659f; +// $color_c3: #d6b3d4; +// $color_c4: #ecd9ec; diff --git a/docroot/sites/all/themes/libraryzurb_teen/scss/librarysite_red/_fonts.scss b/docroot/sites/all/themes/libraryzurb_teen/scss/librarysite_red/_fonts.scss new file mode 100644 index 00000000..6f15734d --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/scss/librarysite_red/_fonts.scss @@ -0,0 +1,26 @@ +// DEFAULT FONTS +// There are four default font sets. +// Uncomment the set you want to use. +// Comment out the sets you are not using. +// Edit the html.tpl.php file with the correct font scripts +// default font scripts are found in LIBRARYSITE_FONTS.txt + +// Font set 1: Zurb defaults + + $header-font-family: "Rosarivo", "Georgia", georgia, serif; + $body-font-family: "Source Sans Pro", "Helvetica", Helvetica, Arial, sans-serif; + +// Font set 2: Clean Type - Arvo + +// $header-font-family: "Arvo", "Georgia", georgia, serif; +// $body-font-family: "Source Sans Pro", "Helvetica", Helvetica, Arial, sans-serif; + +// Font set 3: Old Typewriter - Special Elite + +// $header-font-family: "Special Elite", "Georgia", georgia, serif; +// $body-font-family: "Source Sans Pro", "Helvetica", Helvetica, Arial, sans-serif; + +// Font set 4: Playful - Shadows into Light + +// $header-font-family: "Shadows into Light", "Georgia", georgia, serif; +// $body-font-family: "Source Sans Pro", "Helvetica", Helvetica, Arial, sans-serif; diff --git a/docroot/sites/all/themes/libraryzurb_teen/scss/theme/_EXAMPLE--button.scss b/docroot/sites/all/themes/libraryzurb_teen/scss/theme/_EXAMPLE--button.scss new file mode 100644 index 00000000..c562e9e6 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/scss/theme/_EXAMPLE--button.scss @@ -0,0 +1,33 @@ +// Theme or skin specific modifiers. +// +// The following are some examples of how a theme modifier would work. Themes +// are decoupled from a theme's structure and modifies a component or element's +// default look and feel. Feel free to remove files. +// +// Example Markup: +// + + +// Buttons: Light +// +// 1. Variable settings are set as !default so they can be overriden inside the +// classes or a seperate file. +// ------------------------------------------------------ +// $button-light-bg: #fff !default; /* 1 */ +// $button-light-color: #333 !default; + +// .t-button-light { +// background-color: $button-light-bg; +// color: $button-light-color; +// } + +// // Buttons: Dark +// // ------------------------------------------------------ +// $button-dark-bg: #333 !default; +// $button-dark-color: #fff !default; + +// .t-button-dark { +// background-color: $button-light-bg; +// color: $button-light-color; +// } + diff --git a/docroot/sites/all/themes/libraryzurb_teen/template.php b/docroot/sites/all/themes/libraryzurb_teen/template.php new file mode 100644 index 00000000..8bf5c11d --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/template.php @@ -0,0 +1,240 @@ + CSS_THEME, 'browsers' => array('!IE' => FALSE), 'preprocess' => FALSE)); +// +// // Need legacy support for IE downgrade to Foundation 2 or use JS file below +// // drupal_add_js('http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE7.js', 'external'); +//} + +/** + * Implements template_preprocess_page + * + */ +//function libraryzurb_teen_preprocess_page(&$variables) { +//} + +/** + * Implements template_preprocess_node + * + */ +//function libraryzurb_teen_preprocess_node(&$variables) { +//} + +/** + * Implements hook_preprocess_block() + */ +//function libraryzurb_teen_preprocess_block(&$variables) { +// // Add wrapping div with global class to all block content sections. +// $variables['content_attributes_array']['class'][] = 'block-content'; +// +// // Convenience variable for classes based on block ID +// $block_id = $variables['block']->module . '-' . $variables['block']->delta; +// +// // Add classes based on a specific block +// switch ($block_id) { +// // System Navigation block +// case 'system-navigation': +// // Custom class for entire block +// $variables['classes_array'][] = 'system-nav'; +// // Custom class for block title +// $variables['title_attributes_array']['class'][] = 'system-nav-title'; +// // Wrapping div with custom class for block content +// $variables['content_attributes_array']['class'] = 'system-nav-content'; +// break; +// +// // User Login block +// case 'user-login': +// // Hide title +// $variables['title_attributes_array']['class'][] = 'element-invisible'; +// break; +// +// // Example of adding Foundation classes +// case 'block-foo': // Target the block ID +// // Set grid column or mobile classes or anything else you want. +// $variables['classes_array'][] = 'six columns'; +// break; +// } +// +// // Add template suggestions for blocks from specific modules. +// switch($variables['elements']['#block']->module) { +// case 'menu': +// $variables['theme_hook_suggestions'][] = 'block__nav'; +// break; +// } +//} + +//function libraryzurb_teen_preprocess_views_view(&$variables) { +//} + +/** + * Implements template_preprocess_panels_pane(). + * + */ +//function libraryzurb_teen_preprocess_panels_pane(&$variables) { +//} + +/** + * Implements template_preprocess_views_views_fields(). + * + */ +//function libraryzurb_teen_preprocess_views_view_fields(&$variables) { +//} + +/** + * Implements theme_form_element_label() + * Use foundation tooltips + */ +//function libraryzurb_teen_form_element_label($variables) { +// if (!empty($variables['element']['#title'])) { +// $variables['element']['#title'] = '' . $variables['element']['#title'] . ''; +// } +// if (!empty($variables['element']['#description'])) { +// $variables['element']['#description'] = ' ' . t('More information?') . ''; +// } +// return theme_form_element_label($variables); +//} + +/** + * Implements hook_preprocess_button(). + */ +//function libraryzurb_teen_preprocess_button(&$variables) { +// $variables['element']['#attributes']['class'][] = 'button'; +// if (isset($variables['element']['#parents'][0]) && $variables['element']['#parents'][0] == 'submit') { +// $variables['element']['#attributes']['class'][] = 'secondary'; +// } +//} + +/** + * Implements hook_form_alter() + * Example of using foundation sexy buttons + */ +//function libraryzurb_teen_form_alter(&$form, &$form_state, $form_id) { +// // Sexy submit buttons +// if (!empty($form['actions']) && !empty($form['actions']['submit'])) { +// $classes = (is_array($form['actions']['submit']['#attributes']['class'])) +// ? $form['actions']['submit']['#attributes']['class'] +// : array(); +// $classes = array_merge($classes, array('secondary', 'button', 'radius')); +// $form['actions']['submit']['#attributes']['class'] = $classes; +// } +//} + +/** + * Implements hook_form_FORM_ID_alter() + * Example of using foundation sexy buttons on comment form + */ +//function libraryzurb_teen_form_comment_form_alter(&$form, &$form_state) { +// Sexy preview buttons +// $classes = (is_array($form['actions']['preview']['#attributes']['class'])) +// ? $form['actions']['preview']['#attributes']['class'] +// : array(); +// $classes = array_merge($classes, array('secondary', 'button', 'radius')); +// $form['actions']['preview']['#attributes']['class'] = $classes; +//} + +// LIBRARYSITE CUSTOM OVERRIDES + +function libraryzurb_teen_preprocess_block(&$variables) { + // Convenience variable for block headers. + $title_class = &$variables['title_attributes_array']['class']; + + // Unhide block titles in header region + if ($variables['block']->region == 'header') { + $title_class[] = 'eioverride'; + } +} + + +function libraryzurb_teen_form_alter(&$form, &$form_state, $form_id) { + if ($form_id == 'search_block_form') { +// $form['search_block_form']['#title'] = t('Search'); // Change the text on the label element +// $form['search_block_form']['#title_display'] = 'invisible'; // Toggle label visibilty +// $form['search_block_form']['#size'] = 40; // define size of the textfield +// $form['search_block_form']['#default_value'] = t('Search'); // Set a default value for the textfield + $form['actions']['submit']['#value'] = t('Go »'); // Change the text on the submit button +// $form['actions']['submit'] = array('#type' => 'image_button', '#src' => base_path() . path_to_theme() . '/images/search-button.png'); + + // Add extra attributes to the text box +// $form['search_block_form']['#attributes']['onblur'] = "if (this.value == '') {this.value = 'Search';}"; +// $form['search_block_form']['#attributes']['onfocus'] = "if (this.value == 'Search') {this.value = '';}"; + // Prevent user from searching the default text +// $form['#attributes']['onsubmit'] = "if(this.search_block_form.value=='Search'){ alert('Please enter a search'); return false; }"; + + // Alternative (HTML5) placeholder attribute instead of using the javascript +// $form['search_block_form']['#attributes']['placeholder'] = t('Search'); + } +} + +/** + * Implements hook_css_alter(). + */ +function libraryzurb_teen_css_alter(&$css) { + if (isset($css[drupal_get_path('theme', 'libraryzurb_teen') . '/css/custom.css'])) { + $css[drupal_get_path('theme', 'libraryzurb_teen') . '/css/custom.css']['group'] += 1; + } + if (isset($css[variable_get('file_public_path', conf_path() . '/files') . '/fontyourface/font.css'])) { + $css[variable_get('file_public_path', conf_path() . '/files') . '/fontyourface/font.css']['group'] += 10; + } + // // Always remove base theme CSS. + // $theme_path = drupal_get_path('theme', 'zurb_foundation'); + // + // foreach($css as $path => $values) { + // if(strpos($path, $theme_path) === 0) { + // unset($css[$path]); + // } + // } +} + +/** + * Implements hook_js_alter(). + */ +// function libraryzurb_teen_js_alter(&$js) { +// // Always remove base theme JS. +// $theme_path = drupal_get_path('theme', 'zurb_foundation'); +// +// foreach($js as $path => $values) { +// if(strpos($path, $theme_path) === 0) { +// unset($js[$path]); +// } +// } +// } + +function libraryzurb_teen_preprocess_page(&$variables) { + + +if (!empty($variables['page']['sidebar_first']) || !empty($variables['page']['login_form']) || !empty($variables['page']['activity_sidebar'])){ + $left = $variables['page']['sidebar_first']; + $left1 = $variables['page']['login_form']; + $left3 = $variables['page']['activity_sidebar']; + + } + + if (!empty($variables['page']['sidebar_second'])) { + $right = $variables['page']['sidebar_second']; + } + + // Dynamic sidebars + if ((!empty($left3) || !empty($left) || !empty($left1)) && !empty($right)) { + $variables['main_grid'] = 'large-6 push-3'; + $variables['sidebar_first_grid'] = 'large-3 pull-6'; + $variables['sidebar_sec_grid'] = 'large-3'; + } elseif ((!empty($left3) || !empty($left) || !empty($left1)) && !empty($right)) { + $variables['main_grid'] = 'large-9'; + $variables['sidebar_first_grid'] = ''; + $variables['sidebar_sec_grid'] = 'large-3'; + } elseif ((!empty($left3) || !empty($left) || !empty($left1)) && empty($right)) { + $variables['main_grid'] = 'large-9 push-3'; + $variables['sidebar_first_grid'] = 'large-3 pull-9'; + $variables['sidebar_sec_grid'] = ''; + } else { + $variables['main_grid'] = 'large-12'; + $variables['sidebar_first_grid'] = ''; + $variables['sidebar_sec_grid'] = ''; + } + +} \ No newline at end of file diff --git a/docroot/sites/all/themes/libraryzurb_teen/templates/field--field-book-cover-image.tpl.php b/docroot/sites/all/themes/libraryzurb_teen/templates/field--field-book-cover-image.tpl.php new file mode 100644 index 00000000..78fe2b8a --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/templates/field--field-book-cover-image.tpl.php @@ -0,0 +1,60 @@ + + + $item): + + + print ""; + + endforeach; ?> \ No newline at end of file diff --git a/docroot/sites/all/themes/libraryzurb_teen/templates/field--field-book-cover-image1.tpl.php b/docroot/sites/all/themes/libraryzurb_teen/templates/field--field-book-cover-image1.tpl.php new file mode 100644 index 00000000..7586ddc6 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/templates/field--field-book-cover-image1.tpl.php @@ -0,0 +1,64 @@ + + + $item): + + if ($item['#markup']) { + print ""; + } + + else { + print ""; + } + endforeach; ?> \ No newline at end of file diff --git a/docroot/sites/all/themes/libraryzurb_teen/templates/html.tpl.php b/docroot/sites/all/themes/libraryzurb_teen/templates/html.tpl.php new file mode 100644 index 00000000..09bbe42d --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/templates/html.tpl.php @@ -0,0 +1,53 @@ + + + + + + + + + + <?php print $head_title; ?> + + + + + + + + + + + + +> +
                  + + + + + + diff --git a/docroot/sites/all/themes/libraryzurb_teen/templates/node--booklist.tpl.php b/docroot/sites/all/themes/libraryzurb_teen/templates/node--booklist.tpl.php new file mode 100644 index 00000000..8c578eb1 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/templates/node--booklist.tpl.php @@ -0,0 +1,116 @@ +body becomes $body. When needing to access + * a field's raw values, developers/themers are strongly encouraged to use these + * variables. Otherwise they will have to explicitly specify the desired field + * language, e.g. $node->body['en'], thus overriding any language negotiation + * rule that was previously applied. + * + * @see template_preprocess() + * @see template_preprocess_node() + * @see template_process() + */ +?> +uid); ?> +
                  > + + + + + > + + + + + field_privacy_settings['und'][0]['value']; if ($privacy_field == 'public' || $privacy_field == 'private'): ?> + +
                  + + + + +
                  + + + + + + + + + + + + + +
                  diff --git a/docroot/sites/all/themes/libraryzurb_teen/templates/node--review_book.tpl.php b/docroot/sites/all/themes/libraryzurb_teen/templates/node--review_book.tpl.php new file mode 100644 index 00000000..1e70559a --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/templates/node--review_book.tpl.php @@ -0,0 +1,159 @@ +body becomes $body. When needing to access + * a field's raw values, developers/themers are strongly encouraged to use these + * variables. Otherwise they will have to explicitly specify the desired field + * language, e.g. $node->body['en'], thus overriding any language negotiation + * rule that was previously applied. + * + * @see template_preprocess() + * @see template_preprocess_node() + * @see template_process() + */ +//print "
                  ";
                  +//print_r($content);
                  +//print "
                  "; +//print "hiiii"; +?> + +uid); ?> +
                  > + + + + + > + + + + + +
                  + + + + +
                  + + + "; + +print "
                  "; + +print "
                  "; + + +if($node->status == 1) { + + $book_cover_image = $bimage['0']['safe_value']; + + if ($book_cover_image) { + $bimg = ""; + } + else { + $bimg = ""; + } + print ""; + print "
                  ".$bimg."
                  "; +} +print "Review : " . $review['0']['safe_value']; + +print "Catalog link : " . $clink['0']['safe_value']; + + + +?> + + + + + + + + + + +
                  diff --git a/docroot/sites/all/themes/libraryzurb_teen/templates/page--front.tpl.php b/docroot/sites/all/themes/libraryzurb_teen/templates/page--front.tpl.php new file mode 100644 index 00000000..476a0f71 --- /dev/null +++ b/docroot/sites/all/themes/libraryzurb_teen/templates/page--front.tpl.php @@ -0,0 +1,235 @@ + +
                  + + + + + + + + + + + + + +
                  +
                  + +
                  +
                  + + + + + +
                  +
                  + +
                  +
                  + + + +
                  +
                  + +
                  + +
                  + + + + + + + + +

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